這篇文章帶給大家的內容是關於CTF中常見的PHP漏洞介紹(圖文總結)),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
平常也遇到不少這樣的題目,記性不好很容易忘,於是好好總結一下加深記憶! ! !
一. md5()漏洞,php在處理雜湊字串時會利用」!=”或” ==”來對哈希值進行比較,它把每一個以” 0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以後,其哈希值都是以” 0E”開頭的,那麼PHP將會認為他們相同,都是0。
下面舉出幾個經md5處理後開頭為0e的例子;
s878926199a
0e545993274517709034328855841020
s155964671a##0e342721241271a##14271a##0 14587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
下面我們來做個實驗試試:
結果。 。 。如我們預期的一樣
因此,當md5加密的字串是可控(即可以控制輸入),就可能造成漏洞! ! !
當然,更有趣的是,md5,是不能處理陣列的。下面也是實驗:
我們傳入兩個不同的陣列:
#會發現雖然有警告,但仍能繞過,(不想有警告在前面加@符號即可):
但是,不知道不知道處理數組會回傳什麼,因此試驗一下:
var_dump()一下:
為空! ! !說明處理數組的時候,會回傳NULL值。
對於 md5(str)==0 有許多繞過方法;請總結一下:
strcmp()函數漏洞,strcmp()函數用於比較兩個字串,strcmp( string$ str1, string$ str2);
參數str1第一個字串.str2第二個字串。如果str1小於str2回傳 0;如果
兩者相等
,則傳回0.(注意相等回傳0這個特性)但如果此函數參數中有一個不合法的參數(對象,數組等),就會報錯並返回0! ! ! (此漏洞適用於5.3之前的php,本機試了一下。。發現弄不了,不知道怎麼回事)
如圖,根據strcmp漏洞,傳入一個數組試試:
傳入數組,導致strcmp錯誤,返回,於是就繞過了! ! !
以上是CTF常見的PHP漏洞介紹(圖文總結)的詳細內容。更多資訊請關注PHP中文網其他相關文章!