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