初級篇更多是對那些已有的版本漏洞分析,存在安全問題的函式進行講解,中級篇更多是針對用戶輸入對漏洞進行利用
中級篇更多是考慮由用戶輸入導致的安全問題,
預備工具首先要有php本地環境可以除錯代碼
總結就是
1. 可以控制的變數【一切輸入都是有害的 】
2. 變數到達有利用價值的函式[危險函式] 【一切進入函式的變數是有害的】
程式的本質是變數與函式,我們審計的漏洞也無法擺脫這兩個元素,讓我們先來看下漏洞形成的條件
漏洞的利用效果最終也取決與函式的功能,所以我們在下面講述
漏洞挖掘的程序中,也將圍繞著這兩個元素來展開,
我們提到漏洞形成的兩大元素是可控變數,和可控變數能夠進入
的函式,那么在漏洞挖掘中,我們也不外乎從這兩個方向來開始,

收集可控變數
當代碼量巨大的時候我們就需要審計工具來幫我們完成一些敏感函式和變數的追蹤
例如常用的審計工具
Seay源代碼審計系統,一款開源的審計程式,主要針對php代碼審計基于危險函式正則匹配
Rirs,基于語意檢測,誤報率低,
Fortify SCA 商用軟體需要破解支持多種語言
百度都有可以自行下載
SQL注入
對于SQL注入建議正向追蹤,在拿到原始碼時先找到它的過濾注入函式判斷
1.如果沒有過濾就可以直接注入
2.如過呼叫了addslashes 就無法對字符型做繞過,當然如果他設定了
Set character_set_client=gbk 開啟了gbk連接就會存在寬位元組注入
- . 數字型注入如果無強轉可以繞過的
- . 如果高版本php用了pdo 系結引數 也不會存在注入
- . urldecode 二次注入 如果呼叫了這個方法就會存在url二次編碼注入
- Mysql_real_escape_string() 對00位元組,,\n,\r,\,’,”,\x1a 進行轉義
如果引數呼叫此函式過濾則不存在注入
XSS注入
查找過濾函式如 htmlspecialchars 對接收到引數做html編碼為<>等, 如果不對標簽做過濾,也可以利用內置標簽的屬性來注入xss,xss各種標簽和新特性導致了很難防御所以也更容易找到,
反射型和存盤型xss只需要跟蹤輸入輸出位置是否有過濾,而dom型你還要對js做審計查看是否直接輸出的js代碼,
CSRF
Csrf需要找到修改密碼,洗掉資訊,修改資訊等重要操作的地方查看,有沒有加referer或者token驗證 否者就存在csrf漏洞 ,或者直接看公共的核心檔案是否有加token驗證之類的代碼,
檔案包含
包含可以直接執行包含檔案的代碼,包含的檔案格式不是受限,分為本地包含和遠程包含,
本地包含:需要注意includ(),include_once(),require(),require_once()
包含php上傳的臨時檔案,在url請求php代碼記錄到webserver日志在包含
Webserver的日志 如果是linux 可以包含/proc/self/environ
遠程檔案包含
需要查看php.ini配置 allow_url_include=on 可以直接用php偽協議進行包含代碼
然而大部分情況都是本地檔案包含, 對檔案包含截斷我們通常可以%00就行截斷,同樣的也可以利用多個句號(.)和反斜杠(/)進行截斷
在windows 下測驗240個連接點(.)可以截斷,linux下需要2038個(/)組合才能截斷,但是在php5.3版本以后就不能利用了,
現在還能用的無版本限制的也只有遠程檔案包含利用(?),(空格),(#) 進行后綴利用截斷,
檔案下載和讀取
可以根據功能點快速定位到代碼 查看fiel_get_contents(),等一些讀取檔案函式是否有權限驗證沒有的話就存在任意檔案讀取
檔案上傳漏洞
找到上傳檔案代碼或者全域搜索move_uploaded_file() 查看是否有進行條件過濾,
基于黑名單繞過:大小寫,雙寫過濾,特殊擴展名,非法符號
基于白名單繞過:%00截斷,非法符號截斷,中文字符截斷
檔案頭驗證繞過:直接篡改頭型別
檔案CG渲染繞過:正常圖片加流檔案合并繞過
檔案洗掉漏洞
多見個人中心檔案管理位置洗掉功能可以越權洗掉,代碼未做目錄跳轉限制
和權限驗證可以造成任意檔案洗掉
代碼執行漏洞
常見eval(),assert(),preg_replace(),call_user_func(),call_user_funca_array(),array_map()等可造成命令執行 還有動態函式 $a($b)
Call_user_funca(),call_user_funca_array() 動態呼叫,這些都可以通過工具進行追蹤可以看是否引數可控,
命令執行
只要對接受引數未作過濾直接帶入7個函式進行命令執行
System(),exec(),shell_exec(),passthru(),pcntl_exec(),proc_optn()函式
反引號也可以例如`cmd` 將被執行命令 可以直接利用工具追蹤查看引數是否可控
越權
分兩種水平越權,垂直越權,
大多存在在uid身份標識位置的可篡改造成越權,對不同的用戶身份篡改造成不同的越權,還有的頁面沒有設定權限訪問,可以未授權訪問,
本篇雖然篇幅過少但實操確實非常重要的,可以去找開源cms去練手做到熟能生巧,以具備快速審計能力,
謹記必須要大量的審計代碼訓練才能對以上漏洞做到非常熟練,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/10960.html
標籤:訊息安全
下一篇:PHP代碼審計基礎-高級篇
