2012-05-03 36 views
0

我「直觀地」知道如何發現更明顯的sql注入漏洞。但是,我猜測如果我給了一個帶有許多不同漏洞的大型代碼庫(可能是2002年的Joomla代碼庫),那麼即使通過誠實地進行檢測,我也不會在檢測所有(追溯性已知的)漏洞方面走得很遠所有的代碼完全。是否有指導文章,代碼審查指南,手冊等,用於查找PHP代碼庫中的漏洞?

那麼是否有已發佈的技術系統地找到給定的PHP或類似的代碼庫中的「大部分」的webapp漏洞?如果你的任務是在php代碼庫中查找漏洞,你會怎麼做?

回答

0

在審計大型代碼庫時,我發現使用grep功能來生成可能的行列表來檢查安全問題特別有用。例如,審計用戶受控分配的C源代碼,其可以允許用於allovation包裹的大小的值的情況下,考慮以下內容:由文件名和行號的malloc

egrep "malloc\(.*\)" ~/some/source/dir/ -r 

上面列出的所有呼叫遞歸地在給定的目錄中。這將包括大量的誤報,因此,利用您對代碼濫用的知識,您可以構建其他grep語句,以清除您知道該呼叫無法控制的案例列表。爲了解釋我的意思,我們來構建一個。

char *buffer2 = (char *) malloc(DEVMAPPER_BUFFER_SIZE); 

上面的行顯然不能被包裝,因此是假陽性。所以,現在

egrep "malloc\(.*\)" ~/some/source/dir/ -r | egrep "malloc\([ ]*[A-Z_]+\)" -v 

我們的名單變得越來越小,但還是有一些垃圾結果:允許添加到我們的正則表達式來清除所有類似案例。最終,修剪過的每個人都知道是不正確的,通過把它們轉化爲正則表達式語句的情況下,你可以得到這樣的:

egrep "malloc\(.*\)" ~/some/source/dir/ -r | egrep "malloc\([ ]*[A-Z_]+\)" -v | egrep "malloc\([ ]*[0-9]+\)" -v | egrep "malloc\(sizeof\(.*\)\)" -v 

這樣做對每個將通常用於已知的常用功能導致您的語言出現軟件漏洞,將它們放入快速的Python/bash腳本中,並審覈手動生成的每個調用。

如果您正在審計php,以下鏈接應該會對您有所幫助。

http://pentestlab.org/simple-kung-fu-grep-for-finding-common-web-vulnerabilities-backdoor-shells/