首頁  >  文章  >  後端開發  >  CTF常見的PHP漏洞介紹(圖文總結)

CTF常見的PHP漏洞介紹(圖文總結)

不言
不言轉載
2019-02-18 14:20:386326瀏覽

這篇文章帶給大家的內容是關於CTF中常見的PHP漏洞介紹(圖文總結)),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

平常也遇到不少這樣的題目,記性不好很容易忘,於是好好總結一下加深記憶! ! !

一.      md5()漏洞,php在處理雜湊字串時會利用」!=”或” ==”來對哈希值進行比較,它把每一個以” 0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以後,其哈希值都是以” 0E”開頭的,那麼PHP將會認為他們相同,都是0。

下面舉出幾個經md5處理後開頭為0e的例子;
s878926199a
0e545993274517709034328855841020
s155964671a##0e342721241271a##14271a##0 14587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
下面我們來做個實驗試試:


結果。 。 。如我們預期的一樣CTF常見的PHP漏洞介紹(圖文總結)

CTF常見的PHP漏洞介紹(圖文總結)因此,當md5加密的字串是可控(即可以控制輸入),就可能造成漏洞! ! !

當然,更有趣的是,md5,是不能處理陣列的。下面也是實驗:

我們傳入兩個不同的陣列:CTF常見的PHP漏洞介紹(圖文總結)

CTF常見的PHP漏洞介紹(圖文總結)#會發現雖然有警告,但仍能繞過,(不想有警告在前面加@符號即可):


但是,不知道不知道處理數組會回傳什麼,因此試驗一下:CTF常見的PHP漏洞介紹(圖文總結)

CTF常見的PHP漏洞介紹(圖文總結)var_dump()一下:

CTF常見的PHP漏洞介紹(圖文總結)為空! ! !說明處理數組的時候,會回傳NULL值。

對於    md5(str)==0      有許多繞過方法;請總結一下:

    開頭為0或0e繞過
  1. #陣列
  2. 只要經md5函數處理後開頭沒有數字都可以,例如"c9f0f895fb98ab9159f51fd0297e236d"==0成立! ! ! ,用到了字串轉換成整數! ! ! ,如果開頭沒有數字的話,就只能轉換成0了! !
二.

strcmp()函數漏洞,strcmp()函數用於比較兩個字串,strcmp( string$ str1, string$ str2);
參數str1第一個字串.str2第二個字串。如果str1小於str2回傳 0;如果
兩者相等
,則傳回0.(注意相等回傳0這個特性)
但如果此函數參數中有一個不合法的參數(對象,數組等),就會報錯並返回0! ! ! (此漏洞適用於5.3之前的php,本機試了一下。。發現弄不了,不知道怎麼回事)

下面以BUGKU程式碼審計一道題實例:



如圖,根據strcmp漏洞,傳入一個數組試試:CTF常見的PHP漏洞介紹(圖文總結)

CTF常見的PHP漏洞介紹(圖文總結)傳入數組,導致strcmp錯誤,返回,於是就繞過了! ! !

還有另一個函數strcasecmp(),與strcmp()相同,strcmp()區分大小寫,而strcasecmp()不區分,都可用同樣方法繞過。


#

以上是CTF常見的PHP漏洞介紹(圖文總結)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除