本篇文章給大家帶來的內容是關于CTF中常見的PHP漏洞介紹(圖文總結)),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
平常也遇到不少這樣的題目,記性不好很容易忘,于是好好總結一下加深記憶?。?!
一. md5()漏洞,php在處理哈希字符串時會利用”!=”或” ==”來對哈希值進行比較,它把每一個以” 0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以后,其哈希值都是以” 0E”開頭的,那么PHP將會認為他們相同,都是0。
下面舉幾個經md5處理后開頭為0e的例子;
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
下面我們做個實驗試試:
結果。。。如我們期望的一樣
因此,當md5加密的字符串是可控(即可以控制輸入),就可能造成漏洞?。。?/p>
當然,更有趣的是,md5,是不能處理數組的。下面也是實驗:
我們傳入兩個不同的數組:
會發現雖然有警告,但是仍能繞過,(不想有警告在前面加@符號即可):
但是,不知道不知道處理數組會返回什么,因此試驗一下:
var_dump()一下:
為空?。?!說明處理數組的時候,會返回NULL值。
對于 md5(str)==0 有很多繞過方法;總結一下:
開頭為0或0e繞過
數組
只要經md5函數處理后開頭沒有數字都都可以,比如 c9f0f895fb98ab9159f51fd0297e236d ==0成立!??!,用到了html' target='_blank'>字符串轉換成整數?。?!,如果開頭沒有數字的話,就只能轉換成0了??!
二.strcmp()函數漏洞,
strcmp()函數用于比較兩個字符串,
strcmp( string$ str1, string$ str2) ;
參數str1第一個字符串.str2第二個字符串。如果str1小于str2返回 如果str1大于str2返回 如果兩者相等,返回0.(注意相等返回0這個特性)
但是如果此函數參數中有一個不合法的參數(對象,數組等),就會報錯并返回0?。。。ù寺┒催m用于5.3之前的php,本機試了一下。。發現弄不了,不知道怎么回事)
下面以BUGKU代碼審計一道題實例:
如圖,根據strcmp漏洞,傳入一個數組試試:
傳入數組,導致strcmp錯誤,返回,于是就繞過了!??!
還有另一個函數strcasecmp(),與strcmp()相同,strcmp()區分大小寫,而strcasecmp()不區分,都可用同樣方法繞過。
以上就是CTF中常見的PHP漏洞介紹(圖文總結)的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答