天天看點

企業自研掃描器之路:資訊收集子產品

随着甲方的安全工作進入了軌道,要提高工作效率以及減少重複工作的次數,迸發出了弄個工具的想法,主要是想弄個掃描器,而現有的wvs、appscan等這類工具,由于種種原因和環境,并不能滿足我們的需求,是以隻能走入自研之路。

然後對于一個沒有做過開發的人來說,體驗開發的過程無疑是痛苦的,而對于自己本身又是需求者和設計者,無疑更痛苦。但經過與朋友的溝通和參考一些巨頭公司同行流出的思路,于是拆分成下面的幾個大的部分:

企業自研掃描器之路:資訊收集子產品

如今我們一直在資訊收集子產品奮鬥中,不過我們也終于是見到了曙光,于是就先分享一下資訊收集子產品的思路和實作的步驟。

對于資訊收集子產品的設計,如下:

企業自研掃描器之路:資訊收集子產品

其實剛開始隻考慮到爬蟲,但是後期的交流才發現自己的落伍,原來流量鏡像才是王道,使用流量鏡像進行收集的話,好處很多,除了收集資訊之外,其實還有許多好處,例如可以負責監控有沒有新的産品和應用的上線等等。

不過流量鏡像的收集有些被動,是以也就繼續加入了爬蟲子產品,之後有朋友說他們公司的測試用了webdriver,于是又研究了一些webdriver,發現webdriver的一個特點實作模拟點選,也就解決了我對爬蟲如何取ajax的請求值的問題了(其實爬蟲也可以實作ajax的取值,例如開源的heritrix中就有)。

爬蟲的初步實作,比較容易,思路就是不斷周遊新的位址,隻不過在這個過程中需要考慮邊界的問題,和防止重複爬去的問題,于是在設計的時候就加入了白名單和黑名單的設計:

企業自研掃描器之路:資訊收集子產品

首先是請求包的實作,這個直接采用了httpclient.jar來實作,可以直接實作http和https的請求,隻需要考慮是get還是post方式,擷取其實請求方式,可以加入method字段進行判斷:

企業自研掃描器之路:資訊收集子產品

之後是資料的提取,很多位址字段中的可能是相對路徑,是以需要在處理的時候就加入域名和請求協定,在這個過程中,也可以進行黑白名單的檢測,例如字尾的檢測,以從href和src中提取為例:

僅供參考

而去重的實作,這裡直接就是用hashset進行去重:

企業自研掃描器之路:資訊收集子產品

至于實際的處理,入庫前還有一步去重的檢測.

webdriver的自動化測試,并不像我開始想的那麼美好,開始以為直接給一個位址,他就開始自動的周遊,自動的點選,然而實際的操作并不如我想的那樣,每一個頁面的元素都有一個位置,你需要告訴webdriver位置在哪,以及對于這個位置的元素應該做什麼操作,這就需要使用xpath來實作了,而webdriver在查找元素位置的時候,如果頁面重新整理了,就算是前進一步然後回退,之前定位的元素後所生成的webelement值也會改變,就需要重新去比對了,是以這對我之前的周遊造成了很大的困難,因為當我通路一個位址的時候,比如需要點選操作,而如果點選的是超連結,而這個超連結是本地标簽打開的話,那我想繼續操作下一個元素,就會出現異常,為了解決這個問題,我想了一個笨辦法,就是一旦需要打開或者點選操作,我就建立一個标簽,在重新打開頁面,在新的頁面上進行操作,操作完成後就關閉此頁面,這樣就不影響我對目前頁面的操作了。

企業自研掃描器之路:資訊收集子產品

目前我實作的webdriver的提取元素的規則,主要針對a、input、button以及onclick事件,規則如下:

而提取後的操作,也需要自己設定,比如input标簽的操作:

企業自研掃描器之路:資訊收集子產品

流量鏡像的資料的提取,之前一直沒有思路,好在同僚ripz提供了一個httpcap工具,直接就實作了對cap資料庫中http資料的提取,之後其實就是對有效資料的提取了,我設計的時存儲的幾個字段:方法、url、host、還有post資料的data,是以就是如何從解析後的http資料包中提取有效的字段,并且規律存儲,為此我們稍微修改了一下httpcap工具包,使得他輸出的格式能夠滿足我們的需要,并且屏蔽了response資料的輸出,同時我們要設計了白名單和黑名單,以下是提取字段的規則實作:

企業自研掃描器之路:資訊收集子產品

是以流量中提取資料也由最困難的部分成為了最簡單的部分了。

經過上面的三種方法對位址的收集,之後的就是入庫的操作,其實入庫的操作很簡單,問題是如果篩選資料,并且真正的去重,上面的資料隻是簡單的去重,但是并沒有達到真正可以入庫的标準,比較之前的hashset去重,考慮的是全部比對後去重,例如參數的問題,id=1和id=2的hash結果就不一樣,但是對于我們來說,id就是一個參數,應該就記錄一次就行了。

是以針對我考慮的問題,我決定生成md5值,進行比較,而針對哪些資料進行md5值的生成,我們進行了規劃:

企業自研掃描器之路:資訊收集子產品

具體的實作,僅供參考:

企業自研掃描器之路:資訊收集子產品

以上的東西,零碎的消耗了我們2個季度的時間,從最初的懵懂,到如今的呈現,再次感受到一個想法要實作成為成果的過程的艱辛,期間,随着不斷的參考和尋找開源的工具,一次次的推翻了原有的設計和代碼的實作,最終到達了調試的階段,而在資訊收集子產品的後期的調試的過程中肯定有更多的問題,最明顯的肯定是性能問題,而且前期忽略了的點以及沒有考慮到的盲區的問題,肯定也會一一的出現,最後貼一張測試效果圖:

企業自研掃描器之路:資訊收集子產品