轉自:http://www.freebuf.com/sectool/95683.html
什么是fortify它又能干些什么?
答:fottify全名叫:Fortify SCA ,是HP的產品 ,是一個靜態的、白盒的軟件源代碼安全測試工具。它通過內置的五大主要分析引擎:數據流、語義、結構、控制流、配置流等對應用軟件的源代碼進行靜態的分析,分析的過程中與它特有的軟件安全漏洞規則集進行全面地匹配、查找,從而將源代碼中存在的安全漏洞掃描出來,並給予整理報告。
它支持掃描多少種語言?
答:FortifySCA支持的21語言,分別是:
1. asp.net
2. VB.Net
3. c#.Net
4. ASP
5. VBscript
6. VS6
7.java
8.JSP
9.javascript
10. HTML
11. XML
12. C/C++
13.PHP
14.T-SQL
15.PL/SQL
16. Action script
17. Object-C (iphone-2012/5)
18. ColdFusion5.0 - 選購
19. python -選購
20. COBOL - 選購
21.SAP-ABAP -選購
他是免費的嗎?
答:不是,是收費的。當然網上也沒有破解的。貌似他一個月收費10萬。
如何使用?
安裝fortify之后,打開
界面:
選擇高級掃描
他問要不要更新? 我就選擇No,因為這是我私人的,我是在2015年7月份購買的試用期為1個月。怕更新了就用不了了。如果你購買了可以選擇YES。
選擇之后出現如下界面
瀏覽意思是:掃描之后保存的結果保存在哪個路徑。
然后點擊下一步。
參數說明:
enable clean :把上一次的掃描結果清楚,除非換一個build ID,不然中間文件可能對下一次掃描產生影響。
enable translation: 轉換,把源碼代碼轉換成nst文件
-64: 是掃描64位的模式,sca默認掃描是32位模式。
-Xmx4000m:4000M大概是4G,制定內存數-Xmx4G :也可以用G定義這個參數建議加
-encoding: 定制編碼,UTF-8比較全,工具解析代碼的時候指定字符集轉換的比較好,建議加,如果中文注釋不加會是亂碼。
-diable-source-:rendering:不加載與漏洞無關的代碼到審計平台上,不建議加,這樣代碼顯示不全。
然后點擊下一步
它說:這是一個J2EE Web應用
選擇No (因為你掃的是PHP)
然后scan(開始掃描)
Always run in background 意思:總是在后台運行
run in background 意思:后台運行
cancel 意思 : 取消
Details 意思:細節
掃完之后:
none 代表其他 1個
A1 注入 7個
A3 xss 37個
A4 不安全的直接對象引用 35個
A6 敏感數據暴露 4個
A10 未驗證的重定向和轉發 2個
如果發現是英文的,想改成如下方法中文:
以下是官網提供的分析圖:
分析漏洞:
none漏洞:
這是一個可變變量,按照中國人說法簡稱:“變量覆蓋”。
講一下這個漏洞的原理:
可變變量
$first ="hello"; $hello ="world"; echo $first." ".$$first;
結果是 hello world
$$first就是$hello,因為$first的值是hello
———————————但是在foreach 就不一樣了—————————————————–
<?php $a = 'sss'; foreach ($_GET as $key => $value) { //如果在foreach那就不一樣了 echo $$key; //將$$區分開 然后$key 等於鍵 然后開始合並 比如打開http://www.com.com/demo.php?a=值 就變成了$a 因為$key的鍵是a 所以就變成了$a $$key = $value;//$a = 值 替換變量 } echo '<hr '>'; echo $a; ?>
A1 注入漏洞:
發現$c變量是由客戶端進行GET請求控制的。
safe_replace函數過濾如下字符:
function safe_replace($string) { $string = str_replace('%20','',$string); $string = str_replace('%27','',$string); $string = str_replace('%2527','',$string); $string = str_replace('*','',$string); $string = str_replace('"','"',$string); $string = str_replace("'",'',$string); $string = str_replace('"','',$string); $string = str_replace(';','',$string); $string = str_replace('<','<',$string); $string = str_replace('>','>',$string); $string = str_replace("{",'',$string); $string = str_replace('}','',$string); $string = str_replace('\\','',$string); return $string; }
include $c.".php"; 但是后面有個.php是拼接的。
但是如果php版本小於5.3.40可以采用空字節也就是%00的二進制視作字符串的結束,按照其他說法的話也就是截斷。。。。。
A3 xss 漏洞
$field_sql="update ".DB_PRE."member set {$field_sql} where userid={$last_id}"; $query=$this->mysql->query($field_sql);
寫入數據庫的時候沒有任何限制或者輸出的時候沒有做任何的過濾就直接輸出導致造成了XSS。(我就不一一解釋了)
A4 不安全的直接對象引用漏洞
文件上傳次數未做策略,可導致攻擊。
A6 敏感數據暴露漏洞:
A10 未驗證的重定向和轉發漏洞:
這里我就不去定位看誰使用這個函數了,懂點PHP的人相信都懂。。
整個過程基本已經結束了,但是有點我想提醒大家,在設置內存的時候如果你不設置內存他會自動幫你設置,比如你的電腦內存是8G 他就自動設置為8G 然后就會占用你8G內存,然后搞得你電腦卡卡卡卡卡卡卡的。下次掃之前記得要設置你的內存,如果你電腦是8G內存 設置7G就好了,還剩下1G就可以玩4399小小游戲了。 ~_~