PHP-代码审计-变量覆盖
當你的才華
還撐不起你的野心時
那你就應該靜下心來學習
?
? ? ? ?代碼審計學習線上實驗,都是CE一邊實操,一邊整理的筆記,方便以后翻看時,可快速查閱。
目錄
變量覆蓋漏洞
一、簡介
? extract()函數
? parse_strc()函數
? import_request_variables()函數
二、漏洞利用
三、漏洞防范
?extract()函數防御
parse_str()函數防御
import_request_variables()函數防御
變量覆蓋漏洞
? ? ? ?變量覆蓋指的是用我們自定義的參數值替換程序原有的變量值,一般變量覆蓋漏洞需要結合程序的其它功能來實現完整的攻擊
一、簡介
變量覆蓋漏洞大多數由函數使用不當導致,經常引發變量覆蓋漏洞的函數有:extract(), parse_str()和import_request_variables()
通常來說,單獨的變量覆蓋漏洞很難有利用價值,需要和其他漏洞結合起來才能完成攻擊
?
? extract()函數
先看看extract()函數說明:
該函數的變量覆蓋隱患就出在第二個參數上面:
-
當第二個參數為空或者EXTR_OVERWRITE時,變量注冊如果遇到沖突會直接覆蓋掉原變量。
-
當第二個變量為EXTR_IF_EXISTS時,僅當原變量已存在是對其進行更新,否則不注冊新變量。
extract.php 代碼如下:
打開瀏覽器輸入:http://192.168.161.133/VariCover/extract.php
可以看到extract()函數執行之后,將變量$a的值覆蓋
?
? parse_strc()函數
說明:
該函數在注冊變量之前不會驗證當前變量是否已存在,如果存在會直接覆蓋。
parse_str.php
打開瀏覽器,輸入url:http://192.168.161.133/VariCover/extract.php
?
? import_request_variables()函數
說明:
import_request_variables.php
? ? 值得注意的是:import_request_variables()函數函數只能用在 PHP4.1 ~ PHP5.4之間,額外以上三種函數,使用時請格外注意,否則非常容易出現變量覆蓋漏洞。
?
二、漏洞利用
? ? ? ?我們應該已經理解了變量覆蓋是怎么發生的,但是否還在疑惑這種漏洞是如何利用的?又會造成怎樣的危害呢??正如之前所說,單獨的變量覆蓋漏洞不易實現完整的攻擊,但是這種漏洞的利用上限非常高,配合上其他漏洞,會有意想不到的效果。 比如,齊博CMS變量覆蓋導致sql注入漏洞、metinfo變量覆蓋漏洞導致任意文件包含,有興趣的同學可以自行百度了解詳情,這里就點到為止
?
三、漏洞防范
?extract()函數防御
將extract.php中extract()函數第二個參數修改為extr_skip:
再加載該頁面,可以看到變量沒有再被覆蓋
?
parse_str()函數防御
parse_str()函數的防范,只能我們自己添加判斷語句,比如:
再加載該頁面,可以看到變量不再會被覆蓋
?
import_request_variables()函數防御
? ? ? ?此函數是非常危險的函數,在PHP5.5之后已被官方刪除!假如你任然在使用低版本的PHP環境,也建議你避免使用此函數.
我不需要自由,只想背著她的夢
一步步向前走,她給的永遠不重
?
總結
以上是生活随笔為你收集整理的PHP-代码审计-变量覆盖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP-代码审计-命令执行
- 下一篇: PHP-代码审计-身份认证