人工源代碼審計
人工代碼審計主要用在白盒測試,其實個人感覺就是更加深入的滲透測試,普通滲透測試感覺更傾向於黑盒,今天就是大概瞭解一下,這一門學問深入學得要很深的開發功底,這裏就是作爲滲透測試的輔助手段學一學吧,先有個認識,相關資料有點多,先跳過一下,不想投入大量時間。
代碼安全測試簡介
代碼安全測試是從安全的角度對代碼進行的安全測試評估。結合豐富的安全知識、編程經驗、測試技術,利用靜態分析和人工審覈的方法尋找代碼在架構和編碼上的安全缺陷,在代碼形成軟件產品前將業務軟件的安全風險降到最低。
一般是在安全環境下(對方公司的斷網環境中),借用工具進行測試
例如 xsearch
seay php
代碼安全測試方法
代碼審覈採用人工審覈和靜態分析工具輔助的方式進行。
人工審覈
既能解決內部問題也能解決外部問題。這也是目前最有效率的解決方案,並且在理論上手工代碼審覈是非常有效的,但人工審覈的效率不高,所以我們會採用自動化分析工具輔助人工的方式來提高審覈效率。
靜態分析工具:通過一組全面規則、測試機制和方針在軟件開發過程、測試中發現軟件的安全缺陷。
代碼審計的通用思路
1、通讀全文代碼,從功能函數代碼開始閱讀,例如include文件夾下的common_fun.php,或者有類似關鍵字的文件。
2、看配置文件,帶有config關鍵字的文件,找到mysql.class.php文件的connect()函數,查看在數據庫連接時是否出現漏洞。
3、繼續跟讀首頁文件index.php,瞭解程序運作時調用了哪些函數和文件 以index.php文件作爲標線,一層一層去擴展閱讀所包含的文件,瞭解其功能,之後進入其功能文件夾的首頁文件,進行擴展閱讀。
漏洞產生的原因
1、變量控制不嚴(一切輸入都是有害)
2、變量到達有利用價值的函數(一切進入函數的變量是有害的),漏洞的利用效果取決於最終函數的功能。
可能出現漏洞的關鍵字
在很多面試選擇題中看到了!!!!
sql注入關鍵字: select、insert、update、$_GET $_POST、$_REQUEST
上傳漏洞關鍵字: $_FILES 、move_uploaded_file
執行漏洞關鍵字: shell_exec、exec、passthru system、popen
包含漏洞關鍵字: include、include_once、require、require_once
變量覆蓋關鍵字: $$
跨站漏洞關鍵字: echo、print、print_r、var_dump、var_exprot,insert
漏洞挖掘一般流程舉例
例如sql注入,在瀏覽器中找出可能有漏洞的參數,再到源代碼中看過濾條件,再到sqlmap驗證
可參考以下源碼審計學習: http://www.anquan.us/static/drops/tips-12751.html
注入漏洞防範地址頁面:http://www.jb51.net/article/26069.htm
http://www.phpddt.com/php/228.html