PHP漏洞挖掘——進階篇
從常見的PHP風險點告訴你如何進行PHP漏洞挖掘,以及PHP滲透測試中的黑盒與白盒。你與PHP大師只有這一篇文章的差距!
一、PHP漏洞挖掘特點
PHP有著移植性好,容易部署,開發簡單的特點,多用于中小型web應用的開發。這就導致了PHP應用的價值多體現在整站框架/模板的開發上。
程序員在設計一個站點的時候,永遠會把功能實現和開發成本放在***位,而這些恰恰是與安全相矛盾的。快速開發導致的后遺癥就是,開發者在還未完全了解原站所有功能的情況下就將二次開發后的網站發布上線了。
很多開源模板被二次甚至三次開發,并冠以其它公司的名字。這類情況并不在少數。
二、PHP漏洞組成
PHP開發出來的系統存在很多特有漏洞,這些漏洞往往隱藏于服務端代碼邏輯之中,而且極難通過黑盒的方式發現,傳統的滲透性測試幾乎無能為力。
于是我們需要轉向更深處,看看盒子里面的構造。
三、PHP白盒審計
一句話描述我們要做的工作
起點 終點
被引用過很多次的一張圖
一些特別的代碼結構
當然還有“坑爹”的PHP特性
見過很多次的一個界面
三、如何進行漏洞挖掘——常見的PHP風險點
1. 可操作的參數名
如果我們提交URL:
key.php?=1&bbb=2 那么就導致一個xss的漏洞,想象一下如果這個key提交給include()等函數或者sql查詢呢。
2. 變量覆蓋
a)這時我們提交URL: var.php?a=bye那么***的顯示效果應該是什么呢?
b)需要注意的是那個%3d。這個問題也同樣會作用于mb_parse_str()
c)在register_globals開啟的時候,請求var.php?GLOBALS[a]=aaaa&b=111,效果會如何呢?
d) 在register_globals被禁止的時候,import_request_variables可以同樣起到對全局變量賦值的作用。
3. magic_quotes_gpc
魔術引號magic_quotes_gpc其實某些意義上來講并不算是一個風險點,相反它其實是一個PHP特有的安全設置。一般來講,懶惰的程序猿們常常認為魔術引號是用來掩蓋他們代碼缺陷的萬用過濾器。可惜那幫無聊的白帽子們總能想出繞過辦法..
4. 下面幾種情況可能會導致GPC被繞過1.$_SERVER
- getenv()得到的變量
- $HTTP_RAW_POST_DATA與PHP輸入、輸出流
5. 數據庫操作容易忘記使用單引號保護
6. 寬字節注入
因此,各類編碼的一編一轉,最終被繞進去的很可能是程序員。可能出現問題的編碼如下:
舉個栗子——比如這段奇葩代碼…
- <?php
- $sql = “SELECT * FROM article WHERE articleid='”.urldecode($_GET[id]).”‘”;
- ?>
7. GPC的高級“用法”
- //提交 ’
- //魔術引號處理 \’
- //我們要的字符 \
8. eval/preg_replace命令執行
命令執行無疑是PHP漏洞中最聳人聽聞的一類了。簡簡單單一個請求就能夠一步拿shell,這是多少黑客們夢寐以求的事情了…然而對于程序員來講,犯下這樣的錯誤往往就在一念之間。
9. ThinkPHP一鍵getshell
preg_replace的e修飾符會使進行替換時的replacement參數以PHP方式執行,又由于“作用導致分割后的第二個子串(參數值)被當做PHP函數執行。
http://www.11jia.net/index.php/module/action/param1/$%7B@phpinfo()%7D
10. 見命令執行函數
11. 其它PHP漏洞
session_destroy()任意刪除文件漏洞(php4<4.3 php5<5.14):
當我們提交構造
- val.php?del=1(cookie:PHPSESSID=/../1.php)時,由于session_destroy的作用會刪除sess_/../1.php
12. 特殊字符截斷
著名的null字符截斷————
提交“action=/etc/passwd%00”中的“%00”將截斷后面的“.php”
13. 當然還有一些在夢游的程序員…
四、黑盒與白盒的統一
1. 黑盒與白盒
軟件測試中的黑盒與白盒
PHP滲透測試中的黑盒與白盒
典型的兩種思路
2. 平時的學習應該如何加強
對于PHP站點的web安全評估需要引入的幾點:
五、學習資料
- http://www.php100.com/
- http://www.5idev.com/
- http://www.cnseay.com/
- http://www.w3school.com.cn/
- http://bbs.phpchina.com/
- http://www.php-security.org/
- http://bugs.php.net/http://sebug.net/
原文鏈接:http://blog.nsfocus.net/php-vulnerability-mining/
【本文是51CTO專欄作者“綠盟科技博客”的原創稿件,轉載請通過51CTO聯系原作者獲取授權】