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