現在,隨著企業資訊化建設的開展,越來越多的重要資料會以電子媒介的形式存放,這在方便企業辦公的同時,也造成了極大的安全隱患。近年來,隨著APT攻擊的蔓延,使得越來越多的企業遭受不可挽回的重大損失。一個偶然的機會,有幸邀請到了一家國外專門做web安全的公司來對自己的web系統做安全測試。4周下來,我與幾位安全專家多次溝通,完成了對自己系統的威脅建模,滲透測試,白盒測試,一共發現了28個漏洞。經驗寶貴,因此有必要好好總結下。
在目的明確、裝備精良、經驗豐富的“僱傭軍”式的攻擊者面前,傳統的安全裝置已顯得力不從心,企業需要做的是定期開展專業的滲透測試,來降低風險,加固安全。
那麼,什麼是滲透測試?
滲透測試,是滲透測試工程師完全模擬黑客可能使用的攻擊技術和漏洞發現技術,對目標網路、主機、應用的安全作深入的探測,發現系統最脆弱的環節。
如果說安全檢測是“橫向地毯式自動化掃描”,那麼滲透測試就是“縱向深度人工化入侵”。
可見滲透測試的目的是發現目標系統潛在的業務漏洞風險。
安全問題都體現在輸入輸出的問題上,能夠分析資料流就有跡可循了。先知道滲透測試的流程,用工具找到漏洞,瞭解並且復現它。
一、如何進行Web滲透測試?
完整web滲透測試框架
當需要測試的web應用數以千計,就有必要建立一套完整的安全測試框架,流程的最高目標是要保證交付給客戶的安全測試服務質量。
立項:專案建立,時間安排,人力分配,目標制定,廠商介面人確定;
系統分析&威脅分析:針對具體的web應用,分析系統架構、使用的元件、對外提供的介面等,以STRIDE為威脅模型進行對應的安全威脅分析,輸出安全威脅分析表,重點關注top3威脅;
制定測試用例:根據威脅分析的結果制定對應的測試用例,測試用例按照模板輸出,具備可執行性;
測試執行&漏洞挖掘:測試用例執行&發散測試,挖掘對應的安全問題or漏洞;
問題修復&迴歸測試:指導客戶應用開發方修復安全問題or漏洞,並進行迴歸測試,確保安全問題or漏洞得到修復,並且沒有引入新的安全問題;
專案總結評審:專案過程總結,輸出文件評審,相關文件歸檔。
二、Web應用的滲透測試流程
主要分為3個階段,分別是:資訊收集→漏洞發現→漏洞利用,下面仔細分析一下各個階段流程:
如果對軟體測試、介面測試、自動化測試、效能測試、LR指令碼開發、面試經驗交流。感興趣可以175317069,群內會有不定期的發放免費的資料連結,這些資料都是從各個技術網站蒐集、整理出來的,如果你有好的學習資料可以私聊發我,我會註明出處之後分享給大家。
1、資訊收集
在資訊收集階段,我們需要儘量多的收集關於目標web應用的各種資訊,比如:指令碼語言的型別、伺服器的型別、目錄的結構、使用的開源軟體、資料庫型別、所有連結頁面,用到的框架等
指令碼語言的型別: 常見的指令碼語言的型別包括:php、asp、aspx、jsp等
測試方法:
1 爬取網站所有連結,檢視字尾
2 直接訪問一個不存在頁面後面加不同的字尾測試
3 檢視robots.txt,檢視字尾
伺服器的型別: 常見的web伺服器包括:apache、tomcat、IIS、ngnix等
測試方法:
1 檢視header,判斷伺服器型別
2 根據報錯資訊判斷
3 根據預設頁面判斷
目錄的結構: 瞭解更多的目錄,可能發現更多的弱點,如:目錄瀏覽、程式碼洩漏等。
測試方法:
1 使用字典列舉目錄
2 使用爬蟲爬取整個網站,或者使用google等搜尋引擎獲取
3 檢視robots.txt是否洩漏
使用的開源軟體: 我們如果知道了目標使用的開源軟體,我們可以查詢相關的軟體的漏洞直接對網站進行測試。
測試方法:
指紋識別(網路上有很多開源的指紋識別工具)
資料庫型別: 對於不同的資料庫有不同的測試方法。
測試方法:
1 使應用程式報錯,檢視報錯資訊
2 掃描伺服器的資料庫埠(沒做NAT且防火牆不過濾時有效)
所有連結頁面: 這個跟前面的獲取目錄結構類似,但是這個不只是獲取網站的所有功能頁面,有時候還可以獲取到管理員備份的原始碼。
測試方法:
1 使用字典列舉頁面
2 使用爬蟲爬取整個網站,或者使用google等搜尋引擎獲取
3 檢視robots.txt是否洩漏
用到的框架: 很多網站都利用開源的框架來快速開發網站,所以收集網站的框架資訊也是非常關鍵的。
測試方法:
指紋識別(網路上有很多開源的指紋識別工具)
2、漏洞發現
在這個階段我們在做測試的時候要對症下藥,不能盲目的去掃描,首先要確定目標應用是否使用的是公開的開源軟體,開源框架等、然後在做深一度的漏洞掃描。
關於開源軟體的漏洞發現
開源的軟體:常見的開源軟體有wordpress、phpbb、dedecms等
開源的框架:常見的開源框架有Struts2、 Spring MVC、ThinkPHP等
中介軟體伺服器:常見的中介軟體伺服器有jboss、tomcat、Weblogic等
資料庫服務:常見的資料庫服務mssql、mysql、oracle、redis、sybase、MongoDB、DB2等
對於開源軟體的測試方法
1 通過指紋識別軟體判斷開源軟體的版本資訊,針對不同的版本資訊去開放的漏洞資料庫查詢相應版本的漏洞進行測試
2 對於預設的後臺登入頁、資料庫服務埠認證等入口可以進行簡單的暴力破解、預設口令嘗試等操作
3 使用開源的漏洞發現工具對其進行漏洞掃描,如:WPScan
關於自主開發的應用
手動測試:這個階段,我們需要手工測試所有與使用者互動的功能,比如:留言、登入、下單、退出、退貨、付款等操作
軟體掃描:使用免費的軟體掃描,如:appscan、wvs、netsparker,burp等
可能存在的漏洞
Owasp關鍵點
程式碼安全之上傳檔案
程式碼安全之檔案包含
程式碼安全之SSRF
邏輯漏洞之密碼重置
邏輯漏洞之支付漏洞
邏輯漏洞之越權訪問
平臺安全之中介軟體安全
3、漏洞利用
針對不同的弱點有不同的漏洞利用方式,需要的知識點也比較多。一般這個階段包括兩種方式,一種是手工測試,一種是工具測試
手工測試
手工測試是通過客戶端或伺服器訪問目標服務,手工向目標程式傳送特殊的資料,包括有效的和無效的輸入,觀察目標的狀態、對各種輸入的反應,根據結果來發現問題的漏洞檢測技術。手工測試不需要額外的輔助工具,可由測試者獨立完成,實現起來比較簡單。但這種方法高度依賴於測試者,需要測試者對目標比較瞭解。手工測試可用於Web應用程式、瀏覽器及其他需要使用者互動的程式。
這種方式對於有特殊過濾等操作,或者網路上沒有成型的利用工具的時候可以使用。
工具測試
網路上有很多好用的免費利用工具,比如針對sql注入的sqlmap、針對軟體漏洞的matesploit等。