【干貨分享】PHP 漏洞挖掘——進(jìn)階篇
![]()
從常見的PHP風(fēng)險(xiǎn)點(diǎn)告訴你如何進(jìn)行PHP漏洞挖掘,以及PHP滲透測(cè)試中的黑盒與白盒。你與PHP大師只有這一篇文章的差距!
文章目錄
- 一.?PHP漏洞挖掘特點(diǎn)
- 二.?PHP白盒審計(jì)
- 三.?如何進(jìn)行漏洞挖掘——常見的PHP風(fēng)險(xiǎn)點(diǎn)
- 四.?黑盒與白盒的統(tǒng)一
- 五.?學(xué)習(xí)資料
一.?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)
可操作的參數(shù)名
![]()
如果我們提交URL:
key.php?alert(1);=1&bbb=2 那么就導(dǎo)致一個(gè)xss的漏洞,想象一下如果這個(gè)key提交給include()等函數(shù)或者sql查詢呢。
變量覆蓋
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ì)全局變量賦值的作用。
![]()
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)是用來掩蓋他們代碼缺陷的萬用過濾器。可惜那幫無聊的白帽子們總能想出繞過辦法..
![]()
下面幾種情況可能會(huì)導(dǎo)致GPC被繞過1.$_SERVER
- 2.getenv()得到的變量
- 3.$HTTP_RAW_POST_DATA與PHP輸入、輸出流
數(shù)據(jù)庫(kù)操作容易忘記使用單引號(hào)保護(hù)
![]()
寬字節(jié)注入
![]()
?
因此,各類編碼的一編一轉(zhuǎn),最終被繞進(jìn)去的很可能是程序員。可能出現(xiàn)問題的編碼如下:
![]()
舉個(gè)栗子——比如這段奇葩代碼…
php
$sql = “SELECT * FROM article WHERE articleid='”.urldecode($_GET[id]).”‘”;
?>
GPC的高級(jí)“用法”
//提交 ? ? ? ? ? ? ? ?? ???? ?’
//魔術(shù)引號(hào)處理 ? ? ? ? \’
//我們要的字符 ? ? ? ? \
![]()
eval/preg_replace命令執(zhí)行
命令執(zhí)行無疑是PHP漏洞中最聳人聽聞的一類了。簡(jiǎn)簡(jiǎn)單單一個(gè)請(qǐng)求就能夠一步拿shell,這是多少黑客們夢(mèng)寐以求的事情了…然而對(duì)于程序員來講,犯下這樣的錯(cuò)誤往往就在一念之間。
![]()
?
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
非常見命令執(zhí)行函數(shù)
![]()
其它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
特殊字符截?cái)?/h3>
著名的null字符截?cái)唷?/p>
![]()
提交“action=/etc/passwd%00”中的“%00”將截?cái)嗪竺娴摹?php”
當(dāng)然還有一些在夢(mèng)游的程序員…
![]()
四.?黑盒與白盒的統(tǒng)一
黑盒與白盒
軟件測(cè)試中的黑盒與白盒
![]()
PHP滲透測(cè)試中的黑盒與白盒
![]()
典型的兩種思路
![]()
平時(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/
注(origin_from):http://www.hackdig.com/09/hack-48974.htm
