PHP常見繞過(更新ing)


弱類型比較

===: 在進行比較的時候,會先判斷兩種字符串的類型是否相等,再比較
==: 在進行比較的時候,會先將字符串類型轉化成相同,再比較,如果比較的是一個字符串和一個數字,則字符串會被轉化為數值。

# 例題:
$v1 = _GET('v1');
$v2 = _GET('v2');
if($v1!=$v2 && md5($v1)==md5($v2){
    echo $flag;
}
解決方案1:利用弱類型比較  
字符串的開始部分決定了它的值,如果該字符串以合法的數值開始,則使用該數值,否則其值為0。若以xe  
方式開頭則按照科學計數法轉化。  
$v1=240610708,$v2=QNKCDZO,這兩個參數不相等;

md5(’240610708′) 的結果是:0e462097431906509019562988736854

md5(‘QNKCDZO’) 的結果是:0e830400451993494058024219903391     

弱類型比較時都轉換為0,則判斷相等。  
  
解決方案2:利用md5()函數的特點。  
md5()函數加密一個數組時會報錯,返回null。  
因此,只要另$v1,$v2為兩個值不同的數組即可繞過。
即url傳入:v1[]=1 && v2[]=2
strcmp()函數繞過

strcmp()函數用來判斷兩個字符串是否相等,若相等,返回0。php在5.3版本之前若傳入的是一個非字符串類型數據,比如數組和對象,則會報錯,但在報錯的同時會返回0。

# 例題:
$v = _GET['v'];
if(!strcmp($v,$flag){
    echo $flag;
}
解決方案
url傳入:v[]=1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM