PHP md5()函數的簡單繞過方法,該篇作為學習筆記簡單記錄一下。
例題
主要代碼段:
1 $password=$_POST['password']; 2 $sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'"; 3 $result=mysqli_query($link,$sql); 4 if(mysqli_num_rows($result)>0){ 5 echo 'flag is :'.$flag; 6 } 7 else{ 8 echo '密碼錯誤!'; 9 }
PHP md5()函數
md5() 函數計算字符串的 MD5 散列。
md5() 函數使用 RSA 數據安全,包括 MD5 報文摘要算法。
來自 RFC 1321 的解釋 - MD5 報文摘要算法:MD5 報文摘要算法將任意長度的信息作為輸入值,並將其換算成一個 128 位長度的"指紋信息"或"報文摘要"值來代表這個輸入值,並以換算后的值作為結果。MD5 算法主要是為數字簽名應用程序而設計的;在這個數字簽名應用程序中,較大的文件將在加密(這里的加密過程是通過在一個密碼系統下[如:RSA]的公開密鑰下設置私有密鑰而完成的)之前以一種安全的方式進行壓縮。
如需計算文件的 MD5 散列,請使用 md5_file() 函數。
語法:md5(string,raw)
string:所需加密的字符串
raw:可選參數TRUE或FALSE。FALSE(默認,32字符十六進制數);TRUE(原始16字符二進制格式)
繞過方法
利用md5()函數加密后的字符串達到sql注入效果,破壞sql語句結構。
常用字符串:ffifdyop
在上述例題中,輸入ffifdyop后,sql語句結構變為:
SELECT * FROM admin WHERE pass = ''or'6<trash>'
從而達到繞過md5()函數的效果
至此該簡單的學習筆記結束。
