后臺登錄
原題鏈接
http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
思路
看評論很多人說是腦洞==、,2333,其實只是因為這個題目颊糜,把要點給出來了,下次不給提示张肾,也是腦洞題芭析?
查看源碼:
$password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密碼錯誤!';
}
問是否能通過提交特定的POST參數(shù)password,讓上示代碼執(zhí)行到“echo 'Success';”吞瞪。
回答是肯定的馁启。這顯然是一個注入問題,問題的關(guān)鍵在于md5函數(shù)的第二個參數(shù)為true芍秆。
先看php中的md5函數(shù)惯疙,它有兩個參數(shù)string和raw。 第一個參數(shù)string是必需的妖啥,規(guī)定要計算的字符串霉颠。 第二個參數(shù)raw可選,規(guī)定十六進制或二進制輸出格式:
- TRUE - 原始 - 16 字符二進制格式
- FALSE - 默認 - 32 字符十六進制數(shù)
當(dāng)md5函數(shù)的第二個參數(shù)為true時荆虱,該函數(shù)的輸出是原始二進制格式蒿偎,會被作為字符串處理。 理解這一點后怀读,問題就簡單了诉位。 只要提交特定字符串,讓其md5值以原始二進制格式輸出(被當(dāng)作字符串)時含有能觸發(fā)SQL注入的特殊字符即可菜枷。
百度后找到兩個這樣的字符串:
content: 129581926211651571912466741651878684928
hex: 06da5430449f8f6f23dfc1276f722738
string: T0Do#'or'8
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
string: 'or'6]!r,b
所以說這個答案是有道理的==苍糠、才不是什么腦洞那么簡單。啤誊。岳瞭。
flag
flag{ffifdyop_has_trash}
知識點
php中md5($str,true)注入