如何針對大量目標進行指紋識別
針對某個企業進行滲透測試,通過前期信息收集,會收集到非常多的子域名,有大量應用系統需要我們做測試,當然不可能所有系統都是企業自研,也許會用到比較多的開源系統或者開源組件,那么如何針對大量目標進行指紋識別呢?
網上也有很多開源的指紋識別工具,但是速度會比較慢,比如 Tide 團隊的這個指紋識別工具:
https://github.com/TideSec/TideFinger
使用上也比較簡單,直接指定目標即可,也支持多線程,如果想要針對大量目標進行指紋識別的話,有多種方式,但是直接使用它的話,會比較慢,所以我就基于他們整理的指紋庫,進行了二次開發,寫了一個可以快速識別指紋的腳本。
從它們的代碼中,可以看到,指紋庫 cms_finger.db 中,包含兩種指紋,fofa 和 cms,將其中的指紋進行提取之后,了解其指紋信息結構,fofa 的規則:
(1, u'Huawei-Firewall', u'header="Eudemon Server" || body="Modify by wangxiangguang"')
其規則中,第二列是指紋的名稱,第三列是規則,上面的規則中,header 中包含 Eudemon Server 或者 body 中包含 Modify by wangxiangguang 則認為該系統為 Huawei-Firewall,然后看一下 cms 的規則:
(1, u'08cms', u'/images/admina/arrow.jpg', u'4d31afa41252d32d8a9aefe04796eb4e', u'md5', 0)
第二列是指紋命令,第三列為路徑,第四列為規則,第五列為規則類型,比如上面的規則的意思,當目標網站上存在路徑 /images/admina/arrow.jpg 并且該文件的 md5 值為 4d31afa41252d32d8a9aefe04796eb4e 時,則認為該系統為 08cms,規則其實很好理解,這是指紋識別的核心。
在做指紋識別的時候,如果一個目標一個目標的去做全面的指紋探測,那么在短時間內,會對目標進行多次訪問,很容易觸發網站的安全策略,由于我們需要指紋識別的網站數量比較大,所以,可以將訪問的請求打亂,將同一網站的訪問請求頻率降低。
首先提取出 cms 規則中的所有路徑,然后以路徑列表作為第一層循環,然后以目標列表作為第二層循環,這樣進入隊列中的順序就是亂的,每探測一輪路徑才會請求一次目標網站,這樣的訪問,在目標看來不是短時間多次,而是每隔一段時間一次。
最后結合多線程,實現快速掃描,最終獲得想要的結果,最后我掃描四萬多個目標,用了四五天的樣子,開的一百個線程,結果如下:

因為訪問一次網站也不容易,所以在指紋識別的同時,將頁面中鏈接提取出來,進入下一步的漏洞探測階段,漏洞探測階段采用的是 xray 的被動掃描,編寫一個調用 firefox 的腳本,使用 xray 啟動的代理,自動訪問,自動漏洞掃描,效果還是不錯的。