<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tips/5462

                    0x00 前言


                    項目開源地址: https://github.com/manning23/MSpider

                    上篇文章《爬蟲技術淺析》介紹了爬蟲的基本技術,分享了一個動態爬蟲demo。這篇文章主要講解爬蟲技術的實戰效果。 本次介紹的結果如下:

                    0x01 爬蟲的URL聚焦與過濾


                    為什么爬蟲需要URL聚焦與過濾?因為我們需要控制預期結果!

                    舉個例子,如果爬行的目的是爬取烏云已知漏洞列表,那么一般類型的爬蟲是無法滿足的,一般爬蟲會進行如下形式的爬取。爬取的URL是雜亂的。

                    enter image description here

                    聚焦爬蟲爬取的URL是符合預期的。如下圖展示。

                    enter image description here

                    可以看出來,聚焦爬蟲和非聚焦爬蟲都是從www.wooyun.org開始爬取,聚焦爬蟲可以按照一定策略盡量控制URL爬取策略,而非聚焦爬蟲卻完成不了這種特定需求。

                    在爬蟲過濾模塊中,我們需要理解什么是過濾,什么是聚焦。簡單的說,如果過濾關鍵字在url中,則返回False,否則返回True。如果聚焦關鍵字在url中,則返回True,否則返回False。具體可以查看Mspider中的urlfilter.py文件。

                    0x02 URL相似度算法拋磚引玉


                    URL相似度算法在爬蟲里不言而喻,這個算法直接決定著爬蟲的爬行效率,我將講解一下我的算法,算是拋磚引玉。

                    enter image description here

                    這個算法主要是依靠對URL的拆解與對拆解對象的HASH,這個算法適用類似的需求常見。這個算法是將一個URL拆解為三個維度,第一個維度是netloc,第二個維度是path的各項長度,第三個維度是query對象的參數排序后列表。通過一個數據結構對以上三個維度組合,構建一個可hash的對象。

                    enter image description here

                    利用集合數據結構進行去重,這個能大幅減小普通URL相似度算法對于hash后結果沖突的問題。實際效果如下圖。

                    enter image description here

                    當爬取了875個鏈接時,實際相似頁面已達到了269849個,因此對于爬蟲效率來講,是個很好的提升。

                    這個算法只是實際經驗值,實踐后得到良好的實際效果,希望大家也能思考更為優秀的相似度算法。

                    0x03 爬行策略詳解


                    一般爬行策略為廣度優先、深度優先。深度優先搜索通過棧來實現,而廣度優先搜索通過隊列來實現。

                    下面圖中的數字顯示了深度優先搜索頂點被訪問的順序。??

                    enter image description here

                    下面圖中的數字顯示了廣度優先搜索頂點被訪問的順序。

                    enter image description here

                    Mspider中實現爬行策略,這三種搜索方式都是通過對URL隊列的排序方式進行調整,通過隊列中URL結點的深度參數進行調整,來達到需求目的,爬行策略根據不同需求設置,能更快的發現可疑URL鏈接。

                    enter image description here

                    上圖當爬行了810個鏈接時,實際爬行的深度已達到了15層。在實際測試過程中,深度優先爬行能更好的發現可疑鏈接。

                    0x04 Mspider工具使用說明及效果展示


                    Mspider是本人開發的一個以CLI方式運行的爬蟲工具。此爬蟲實現了如下功能。希望大家多多star和fork。也歡迎大家隨時給我郵箱發送郵件提bug。

                    enter image description here

                    CLI下展示如下:

                    enter image description here

                    此爬蟲還可以通過文件的config.py進行更詳細的配置,比如爬行間隔,忽略標簽列表,動靜分配比例,user-agent字典等。

                    enter image description here

                    提供幾個測試場景:

                    爬行烏云白帽子列表

                    命令:

                    #!bash
                    python run.py -u "http://www.wooyun.org" -k "wooyun.org" --focus "whitehats" --similarity 1 --storage 3
                    

                    效果:

                    enter image description here

                    深度優先爬行edu站點,進行url相似度過濾,爬行個數為500個

                    命令:

                    #!bash
                    python -u run.py "http://www.njtu.edu.cn/" -k "edu.cn" --policy 1 --storage 0 --count 500
                    

                    效果:

                    enter image description here

                    爬行聯想域名內連接,域名過濾bbs關鍵字,動態爬行網頁,隨機優先策略

                    命令:

                    #!bash
                    python run.py -u "lenovo" -k "lenovo" --ignore "bbs" --model 1 --policy 2
                    

                    效果:

                    enter image description here

                    0x05 Mspider的頭腦風暴


                    通過改寫Mspider的一些功能,比如頁面分析模塊,URL過濾模塊,數據儲存模塊,可以獲得更深入更有意思的信息。

                    舉個例子,想要獲取烏云中sql注入類型漏洞的SQL注入payload。在聚焦爬蟲中,通過對改寫數據儲存模塊,讓數據庫記錄獲取的dom樹,并儲存,接著對dom樹進行數據挖掘,便可簡單實現。

                    0x06 參考文章


                    基于URL規則的聚焦爬蟲及其應用

                    圖的深度優先和廣度優先搜索

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频