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