ctfshow--web9 md5二進位制格加密的繞過

WSssSW發表於2024-04-04

dirsearch 掃到robots檔案
檢視一下 發現有個index.phps檔案
image
訪問這個index.phps,可以下載下來
我們來審計一下這裡的程式碼
<?php $flag=""; $password=$_POST['password']; if(strlen($password)>10){ die("password error"); } $sql="select * from user where username ='admin' and password ='".md5($password,true)."'"; $result=mysqli_query($con,$sql); if(mysqli_num_rows($result)>0){ while($row=mysqli_fetch_assoc($result)){ echo "登陸成功<br>"; echo $flag; } } ?>

不太清楚怎麼繞過
上網查了查原話是那麼說的:

MD5函式第二個引數預設值為false,表示會產生一個32位的常規MD5值。而true,則是原生的16字元的二進位制格式,這意味著,這裡有可能人為輸入一個字串,經加密後的值以二進位制格式生成,又被當字串處理,很可能新的字串中含有可以構造SQL萬能密碼的'or'的部分。

正好網上有兩個這樣的字串,一個是和解題連結的檔名一樣的字串:ffifdyop,另一個是:129581926211651571912466741651878684928。將任意一個輸入進去,即可繞過驗證。(很明顯,這裡更傾向於讓你用ffifdyop)

輸入ffifdyop就可拿到flag了
image

相關文章