談滲透測試方法和流程
本文中,only_guest分享了他個人整理的滲透測試方法和流程,文章中穿插了不少實戰經驗和實例,足見功力,相信大家一定能學到不少東西。
分析目標網站內容及功能
一、首先確定網站采用何種語言編寫.或者是否有混用的情況.此處可以通過查看網站源文件,觀察網站鏈接,捕獲提交請求等方式獲取.
二、爬行網站目錄,使用工具對網站目錄進行爬行,可以輔助上一步讓結果更加精準.將爬行結果存檔,如果可以,此處應分析出網站是否使用通用程序,如果是,記錄下來.進行下一步.
三、根據上一步的爬行結果,對網站根目錄或者關鍵目錄進行暴力目錄探測,如果網站為通用程序,判讀是否有過二次開發,如非通用程序,在探測到的目錄中尋找關鍵目錄及文件.
此步驟詳細測試方法:
1.輸入并訪問一些不可能存在的文件或目錄名,再輸入并訪問一些通過目錄爬行已知存在的目錄及文件名,從而得知服務器如何處理無效資源.
2.使用網站爬行到的結果作為此步驟暴力目錄探測的依據,掃描關鍵目錄或全部.
3.確定服務器如何處理文件無法找到的回應,并使用關鍵字技術來處理這些回應.從而判斷有效資源及無效資源.
4.收集此步驟暴力掃描得到的結果,并手工檢測探測到目錄的有效性.
5.重復以上步驟,得到更多更關鍵的目錄及文件.
四、 通過上面步驟,得到一個完整的網站目錄結構,以及枚舉到的所有目錄名稱,文件名稱及文件擴展名.了解網站開發人員的命名思路,確定其命名規則,推測出更多的目錄及文件名.
此步驟詳細測試方法:
1.檢查整個列表中的文件命名規則,判讀其命名依據,如發現幾個部分內容相同的文件名,addnews.php,viewnews.php,那么我們就可以嘗試是否存在editnews.php,delnews.php,通常只要查看幾個文件名,就可以推測出網站開發人員的命名習慣,根據其個人風格,開發者可能采用各種命名方法,如冗長式(addnewuser.php),簡潔式(adduser.php),縮寫式(addusr.php),或者更加模糊的命名方式(addu.php).了解開發者使用的命名習慣有助于推測出尚未確定內容的準確名稱.
2.有些不同內容的命名方案使用數字和日期作為標識符,通過他們可以輕易推測出隱藏的內容.靜態頁面經常采用這種命名方式.
例如PKAV.NET 的團隊博客中,文章里所展示的圖片的文件名沒有被重新定義,采用了日期加數字遞增的命名方案,如2012年12月12號發布的文章中的圖片分別為1.jpg,2.jpg,3.jpg.那么這些圖片的路徑就是/2012-12-12/1.jpg, /2012-12-12/2.jpg, /2012-12-12/3.jpg , 此時我們在博客上發布了一篇內容加密的文章,只有團隊成員才知道密碼,但是黑客們根據博客以往發布文章的命名規則推測出了這些圖片的準確地址,從而通過圖片內容泄漏了文章的大致概念.
3.檢查所有客戶端代碼,如HTML及JS代碼,尋找任何隱藏了服務器端的線索,以及隱藏的表單元素等.認證檢查注釋內容,往往能帶給我們驚喜,如部分通用程序會在網站首頁放置一個通向網站管理后臺的鏈接,但網站管理人員不希望這個鏈接被正常訪問者所得知,于是將內容注釋,我們可以通過查看HTML代碼得知此具體地址,還有大多數的管理后臺中所調用的JS 中常常會存儲著后臺所有功能模塊的鏈接地址,但在判斷了當前用戶權限后將其隱藏起來,我們也可以通過直接查看JS代碼的方式得知具體的內容,還有一些開發者會在注釋內容中記錄一些敏感信息,我多次從注釋信息中得到數據庫的名稱,甚至可以得到數據庫的具體連接信息,SQL 查詢語句等.
4.把我們通過推測枚舉出來的內容放在其他地方進行嘗試。
如文件a.php 在/111/這個目錄下存在,那么我們可以嘗試在/222/這個目錄下嘗試是否存在相同文件,把所有枚舉出來的文件名使用一些常規后綴來嘗試訪問,如index.php 這個文件已知存在,我們可以使用txt,bak,src,inc,tmp 等后綴進行嘗試,如嘗試index.txt,index.bak 或者添加在原有后綴基礎上,index.php.bak 等.這樣可以幫助我們獲取這些文件的未編譯版本,開發版本或者備份文件,還可以通過網站使用的語言來推測,如java 使用的.cs 后綴等.
5.搜索開發者使用的開發工具或者文本編輯器創建的臨時文件。如SVN的.svn/entries,又或者Ultraedit這類文本編輯器的自動備份功能創建的.bak文件,被大量使用的.tmp后綴,以及index.php~1 這樣的遺留文件,這些都是可能會發現重要線索的細節,測試中一定不要遺漏這些步驟.
6.將上述的步驟自動化,提取所有存在的文件名以及目錄,后綴的詞干信息,在所有目錄下進行自動化批量探測.
7.如果通過以上步驟已經確定一種統一的命名方案,那么就可以使用此命名規則在整個站點下進行測試.
8.不斷重復以上步驟,獲取更多的關鍵信息,根據時間及個人想象力盡情發揮!
五、利用公共信息,如搜索引擎,站點快照信息,以及其網站所使用的程序開發商公布的一些使用文檔等信息近一步獲取目標站點更多信息.
1.使用幾種不同的搜索引擎和網站快照來獲取目標站點的索引和歷史內容記錄.
2.使用搞基搜索技巧如:
site:www.hao123.com (返回此目標站點被搜索引擎抓取收錄的所有內容)
site:www.hao123.com 關鍵詞 (返回此目標站點被搜索引擎抓取收錄的包含此關鍵詞的所有頁面.此處我們可以將關鍵詞設定為,網站后臺,管理后臺,密碼修改,密碼找回等.)
site:www.hao123.com inurl:admin.php (返回目標站點的地址中包含admin.php的所有頁面,可以使用admin.php,manage.php或者其他關鍵詞來尋找關鍵功能頁面)
link:www.hao123.com (返回所有包含目標站點鏈接的頁面,其中包括其開發人員的個人博客,開發日志,或者開放這個站點的第三方公司,合作伙伴等)
related:www.hao123.com (返回所有與目標站點”相似”的頁面,可能會包含一些通用程序的信息等.)
3.在搜索時不要只使用網頁的搜索功能,可以嘗試如圖片,新聞等功能來定位具體信息.
4.從搜索引擎的快照中尋找一些關鍵信息,如程序報錯信息可以會泄漏網站具體路徑,或者一些快照中會保存一些測試用的測試信息,比如說某個網站在開發了后臺功能模塊的時候,還沒給所有頁面增加權限鑒別,此時被搜索引擎抓取了快照,即使后來網站增加了權限鑒別,但搜索引擎的快照中仍會保留這些信息.
5通過搜索引擎獲取目標站點的子域名,得到更多的功能,如有些網站經常使用admin 這個子域名作為其管理后臺,如admin.hao123.com等.
六、收集網站開發者信息,如網站的開發人員,管理維護人員等在互聯網上的一些信息.
1.列出網站中得到的所有開發及維護人員的姓名和郵件地址及其他聯系方式,其中包含從網站聯系功能中獲取到的,從HTML或JS中的注釋信息中得到的,已經內容頁面上獲取到的。
2.使用上面介紹的一些高級搜索技巧,查找這些人在互聯網上發布的與目標站點有關的一切信息,分析并發現有用的信息,如我曾經在用這個方法獲取某國內大型網站的開發人員的信息時,竟發現他把他開發過的所有功能頁面的源代碼都放在一個公開的網站中,可以隨意下載,包含了這個網站的數據庫鏈接信息等關鍵內容,從而導致我輕松獲取到這個大型網站的權限。