溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

變量覆蓋漏洞----parse_str()函數

發(fā)布時間:2020-06-16 01:10:24 來源:網絡 閱讀:4634 作者:菜鵝小生 欄目:安全技術

Parse_str()函數引起的變量覆蓋漏洞

parse_str() 函數用于把查詢字符串解析到變量中,如果沒有array 參數,則由該函數設置的變量將覆蓋已存在的同名變量。 極度不建議 在沒有 array參數的情況下使用此函數,并且在 PHP 7.2 中將廢棄不設置參數的行為。此函數沒有返回值

一、分析題目源碼:

變量覆蓋漏洞----parse_str()函數

1、 error_reporting()函數規(guī)定不同級別錯誤,這里為關閉錯誤報告

2、 show_source()函數,別名highlight_file()高亮顯示文件。

3、 empty()函數姜茶一個變量是否為空,所以動我們發(fā)送請求的時候一定帶有id參數

4、 include(‘flag.php’)調用flag.php文件,應該就是存放flag的文件

5、 @parse_str($id)把查詢字符串解析到變量中,沒有使用array選項,若有同名變量,將原來的覆蓋。這里明顯將原來的$a的值給覆蓋掉。

6、 $a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')判斷$a[0]的值不是QNKCDZO并且$a[0]的MD5值要和QNKCDZO的MD5值相同。我們知道很難找出這樣的字符串。

二、構造我們的payload

整體源碼已經分析過了,現在唯一要做的就是需要找出字符串不同,但MD5值相同的值。這很難找出。這個時候可以利用php處理MD5哈希字符串的缺陷進行處理。

缺陷的原理:利用php弱語言特性?!?0”==“1e1”嗎?這樣看是不等于的,但是到了php處理的時候,他會將1e1看做科學計數法來計算1e1=1*10^1=10,那這樣是不是就相等了。

題目這里給出的QNKCDZO的MD5值為:0e830400451993494058024219903391。經過php處理后會認為0*10^n。所以結果為零。

所以,我們可以找到字符串MD5加密后結果開頭為0e的即可。這里有篇文章記錄了很多這樣的字符串:http://www.cnblogs.com/Primzahl/p/6018158.html
所以我們的payload為
?id=a[]=s878926199a(s878926199a的MD5值為0e開頭的字符串)
三、測試結果。

將payload用get方法傳輸:

變量覆蓋漏洞----parse_str()函數

得到flag哈。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI