Natas24 Writeup(strcmp繞過漏洞)


Natas24:

一個登錄頁面,查看源碼,發現關鍵代碼:

if(array_key_exists("passwd",$_REQUEST)){
    if(!strcmp($_REQUEST["passwd"],"<censored>")){
        echo "<br>The credentials for the next level are:<br>";
        echo "<pre>Username: natas25 Password: <censored></pre>";
    }
    else{
        echo "<br>Wrong!<br>";
    }
}

存在strcmp()函數,strcmp()函數的作用是比較兩個字符串,相同則為0。由此自然想到了strcmp漏洞,strcmp函數無法比較數組,會返回0,將passwd輸入為數組即可繞過。

Payload: [url]http://natas24.natas.labs.overthewire.org/?passwd[]=1
flag:GHF6X7YwACaYYssHVY05cFq83hRktl4c

 

擴展——strcmp漏洞

PHP strcmp(str1,str2) 函數:比較兩個字符串(區分大小寫)。
如果 str1 小於 str2 返回 < 0; 如果 str1 大於 str2 返回 > 0;如果兩者相等返回 0。

可知,期望傳入的數據類型是字符串類型,但是如果我們傳入非字符串類型的數據的時候,這個函數將會有怎么樣的行為呢?實際上,當接受到了不符合的類型,這個函數將發生錯誤。在php 5.2版本以及之前的版本中,利用strcmp函數將數組與字符串進行比較會返回-1,但是從5.3開始,會返回0!也就是雖然報了錯,但卻判定其相等了。這對於使用這個函數來做判斷的代碼來說簡直是一個致命的漏洞。

 

參考:https://www.cnblogs.com/ichunqiu/p/9554885.html


免責聲明!

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



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