初級(jí)篇更多是對(duì)那些已有的版本漏洞分析,存在安全問題的函數(shù)進(jìn)行講解,中級(jí)篇更多是針對(duì)用戶輸入對(duì)漏洞進(jìn)行利用
中級(jí)篇更多是考慮由用戶輸入導(dǎo)致的安全問題。
預(yù)備工具首先要有php本地環(huán)境可以調(diào)試代碼
總結(jié)就是
1. 可以控制的變量【一切輸入都是有害的 】
2. 變量到達(dá)有利用價(jià)值的函數(shù)[危險(xiǎn)函數(shù)] 【一切進(jìn)入函數(shù)的變量是有害的】
程序的本質(zhì)是變量與函數(shù),我們審計(jì)的漏洞也無法擺脫這兩個(gè)元素,讓我們先來看下漏洞形成的條件
漏洞的利用效果最終也取決與函數(shù)的功能。所以我們?cè)谙旅嬷v述
漏洞挖掘的過程中,也將圍繞著這兩個(gè)元素來展開。
我們提到漏洞形成的兩大元素是可控變量,和可控變量能夠進(jìn)入
的函數(shù)。那么在漏洞挖掘中,我們也不外乎從這兩個(gè)方向來開始。
收集可控變量
當(dāng)代碼量巨大的時(shí)候我們就需要審計(jì)工具來幫我們完成一些敏感函數(shù)和變量的追蹤
例如常用的審計(jì)工具
Seay源代碼審計(jì)系統(tǒng),一款開源的審計(jì)程序。主要針對(duì)php代碼審計(jì)基于危險(xiǎn)函數(shù)正則匹配
Rirs,基于語義檢測,誤報(bào)率低。
Fortify SCA 商用軟件需要破解支持多種語言
百度都有可以自行下載
對(duì)于SQL注入建議正向追蹤。在拿到源碼時(shí)先找到它的過濾注入函數(shù)判斷
1.如果沒有過濾就可以直接注入
2.如過調(diào)用了addslashes 就無法對(duì)字符型做繞過,當(dāng)然如果他設(shè)置了
Set character_set_client=gbk 開啟了gbk連接就會(huì)存在寬字節(jié)注入
如果參數(shù)調(diào)用此函數(shù)過濾則不存在注入
查找過濾函數(shù)如 htmlspecialchars 對(duì)接收到參數(shù)做html編碼為<>等。 如果不對(duì)標(biāo)簽做過濾,也可以利用內(nèi)置標(biāo)簽的屬性來注入xss,xss各種標(biāo)簽和新特性導(dǎo)致了很難防御所以也更容易找到。
反射型和存儲(chǔ)型xss只需要跟蹤輸入輸出位置是否有過濾,而dom型你還要對(duì)js做審計(jì)查看是否直接輸出的js代碼。
Csrf需要找到修改密碼,刪除信息,修改信息等重要操作的地方查看,有沒有加referer或者token驗(yàn)證 否者就存在csrf漏洞 ?;蛘咧苯涌垂驳暮诵奈募欠裼屑觮oken驗(yàn)證之類的代碼。
包含可以直接執(zhí)行包含文件的代碼,包含的文件格式不是受限。分為本地包含和遠(yuǎn)程包含。
本地包含:需要注意includ(),include_once(),require(),require_once()
包含php上傳的臨時(shí)文件,在url請(qǐng)求php代碼記錄到webserver日志在包含
Webserver的日志 如果是linux 可以包含/proc/self/environ
遠(yuǎn)程文件包含
需要查看php.ini配置 allow_url_include=on 可以直接用php偽協(xié)議進(jìn)行包含代碼
然而大部分情況都是本地文件包含, 對(duì)文件包含截?cái)辔覀兺ǔ?梢?00就行截?cái)?,同樣的也可以利用多個(gè)句號(hào)(.)和反斜杠(/)進(jìn)行截?cái)?/p>
在windows 下測試240個(gè)連接點(diǎn)(.)可以截?cái)?,linux下需要2038個(gè)(/)組合才能截?cái)?,但是在php5.3版本以后就不能利用了。
現(xiàn)在還能用的無版本限制的也只有遠(yuǎn)程文件包含利用(?),(空格),(#) 進(jìn)行后綴利用截?cái)唷?/p>
可以根據(jù)功能點(diǎn)快速定位到代碼 查看fiel_get_contents(),等一些讀取文件函數(shù)是否有權(quán)限驗(yàn)證沒有的話就存在任意文件讀取
找到上傳文件代碼或者全局搜索move_uploaded_file() 查看是否有進(jìn)行條件過濾。
基于黑名單繞過:大小寫,雙寫過濾,特殊擴(kuò)展名,非法符號(hào)
基于白名單繞過:%00截?cái)?,非法符?hào)截?cái)?,中文字符截?cái)?/p>
文件頭驗(yàn)證繞過:直接篡改頭類型
文件CG渲染繞過:正常圖片加流文件合并繞過
多見個(gè)人中心文件管理位置刪除功能可以越權(quán)刪除,代碼未做目錄跳轉(zhuǎn)限制
和權(quán)限驗(yàn)證可以造成任意文件刪除
常見eval(),assert(),preg_replace(),call_user_func(),call_user_funca_array(),array_map()等可造成命令執(zhí)行 還有動(dòng)態(tài)函數(shù) $a($b)
Call_user_funca(),call_user_funca_array() 動(dòng)態(tài)調(diào)用。這些都可以通過工具進(jìn)行追蹤可以看是否參數(shù)可控。
只要對(duì)接受參數(shù)未作過濾直接帶入7個(gè)函數(shù)進(jìn)行命令執(zhí)行
System(),exec(),shell_exec(),passthru(),pcntl_exec(),proc_optn()函數(shù)
反引號(hào)也可以例如`cmd` 將被執(zhí)行命令 可以直接利用工具追蹤查看參數(shù)是否可控
分兩種水平越權(quán),垂直越權(quán)。
大多存在在uid身份標(biāo)識(shí)位置的可篡改造成越權(quán)。對(duì)不同的用戶身份篡改造成不同的越權(quán)。還有的頁面沒有設(shè)置權(quán)限訪問,可以未授權(quán)訪問。
本篇雖然篇幅過少但實(shí)操確實(shí)非常重要的,可以去找開源cms去練手做到熟能生巧,以具備快速審計(jì)能力。
謹(jǐn)記必須要大量的審計(jì)代碼訓(xùn)練才能對(duì)以上漏洞做到非常熟練。
聯(lián)系客服