一、代碼審計工具介紹
代碼審計工具可以輔助我們進行白盒測試,大大提高漏洞分析和代碼挖掘的效率。
在源代碼的靜態安全審計中,使用自動化工具輔助人工漏洞挖掘,一款好的代碼審計軟件,可以顯著提高審計工作的效率。學會利用自動化代碼審計工具,是每一個代碼審計人員必備的能力。
代碼審計工具按照編程語言、審計原理、運行環境可以有多種分類。商業性的審計軟件一般都支持多種編程語言,比如VCG、Fortify SCA,缺點就是價格比較昂貴。其他常用的代碼審計工具還有findbugs、codescan、seay,但是大多都只支持Windows環境。所以針對PHP代碼審計,這里介紹一款免費並且支持linux環境的 PHP 代碼審計軟件——Rips。
二、RIPS 使用教程
RIPS是一個用 PHP 編寫的源代碼分析工具,它使用了靜態分析技術,能夠自動化地挖掘 PHP 源代碼潛在的安全漏洞。滲透測試人員可以直接容易的審閱分析結果,而不用審閱整個程序代碼。由於靜態源代碼分析的限制,漏洞是否真正存在,仍然需要代碼審閱者確認。RIPS 能夠檢測 XSS, SQL 注入, 文件泄露, Header Injection 漏洞等。
下載好Rips之后,打開瀏覽器,輸入url:localhost/rips
:
可以看到,這就是rips的主界面,給人的第一印象就是比較簡單,選型並不復雜,所以也非常容易上手!
接下來我會向你一一介紹這些選項的含義。
-
subdirs:如果勾選上這個選項,會掃描所有子目錄,否則只掃描一級目錄,缺省為勾選。
-
verbosity level:選擇掃描結果的詳細程度,缺省為1(建議就使用1)。
-
vuln type:選擇需要掃描的漏洞類型。支持命令注入、代碼執行、SQL注入等十余種漏洞類型,缺省為全部掃描。
-
code style:選擇掃描結果的顯示風格(支持9種語法高亮)。
-
/regex/:使用正則表達式過濾結果。
值得注意的是:官方宣稱rips只支持在firefox中使用。
接下來在path/file
中輸入掃描目錄, 點擊scan:
可以看到,掃描結果以圖標的形式給出,非常直觀。
rips 對掃描到的課程存在漏洞的代碼,不僅會給出解釋,還會給去相應的利用代碼。比如:
上圖中,掃描到一個命令注入漏洞,打開詳情,可以看到它給出的解釋是Userinput reaches sensitive sink.
,即用戶能夠輸入敏感信息, 造成命令注入漏洞。
點擊左邊的問號
,會為你解釋什么是命令注入漏洞:
點擊左邊的紅色按鈕,還能生成漏洞利用代碼:, 比如,就拿這個漏洞來舉例,再bash一欄種輸入uname -a
,點擊creat,再將生成的代碼保存為testcode.php
:
在testcode.php保存目錄執行命令:php testcode.php localhost/codeaudit/cmdinject
:
可以看到成功返回服務器版本信息。
另外,help信息中還給出了漏洞的修補方案:
翻譯過來就是:
將代碼限制為非常嚴格的字符集或構建允許輸入的命令的白名單。
不要試圖過濾惡意的命令,攻擊者總是能繞過。
盡量避免使用系統命令執行功能。
示例代碼:
$modes = array(“r”,“w”,“a”); if(!in_array($ _ GET [“mode”],$ modes))exit;