KaliLinux無線滲透測試入門指南第九章無線滲透測試方法論

apachecn_飛龍發表於2016-10-27

第十章 WPS 和 探針

作者:Vivek Ramachandran, Cameron Buchanan

譯者:飛龍

協議:CC BY-NC-SA 4.0

太陽底下無新事。

– 諺語

這一章由新的技巧組成,包括攻擊 WPS 和探針監控,也包含了使無線測試更簡單的 pineapple 工具。這些攻擊和工具在本書第一版的釋出過程中出現,我們要確保這本書儘可能全面。

10.1 WPS 攻擊

無線保護設定(WPS)在 2006 年被引入,用於幫助沒有無線知識的使用者保護網路。其原理是它們的 WIFI 擁有單一隱藏的硬編碼值,它可以允許金鑰記憶來訪問。新的裝置可以通過按下 WIFI 路由上的按鈕來驗證。在房子外面的人不能解除裝置,就不能獲得訪問權。所以這個問題被降解為記住 WPA 金鑰或者設定更短的金鑰。

2011 年末,爆破 WPS 驗證系統的安全漏洞被公開。協商 WPS 交換所需的流量易於被一篇,並且 WPS Pin 本身只有 0~9 的 8 個字元。最開始,這可以提供 100,000,000 中可能性,與之相比,8 個字元的 azAZ09 密碼擁有 218,340,105,584,896 種組合。

但是,這裡存在進一步的漏洞:

  • 在 WPS Pin 的八個字元中,最後一個是前七個的校驗和,所以它可以預測,選擇就只剩下 10,000,000 種了。

  • 此外,前四個和後三個字元分別驗證,這意味著一共有 11,000 種選擇。

雖然驗證機制中要判斷兩次,但是我們已經從 100,000,000 個可能的組合降到了 11,000。這相當於爆破演算法時的六個小時的差異。這些判斷使 WPS 更易受攻擊。

在下一個實驗中,我們會使用 Wash 和 Reaver 識別和攻擊 WPS 漏洞配置。

實戰時間 – WPS 攻擊

遵循以下指南來開始:

  1. 在我們攻擊開啟了 WPS 的接入點之前:我們首先要建立它。我們所使用的 TP-LINK 擁有這個也行,預設開啟,它非常麻煩還是便捷。為了再三檢查它,我們可以登入我們的路由並點選 WPS。它看起來是這樣:

  2. 現在我們確認它準備好了。我們需要啟動我們的目標。我們需要配置我們的測試環境。我們打算使用 Wash 工具,並且 Wash 需要監控器介面來生效。就像我們之前做的那樣,我們需要使用下列命令來啟動:

    airmon-ng start wlan0

    輸出是這樣:

  3. 我們擁有了監控介面,設定為mon0,我們可以使用下列命令呼叫 Wash:

    wash --ignore-fcs -i mon0

    ignore fcs選項是由於wash導致的已知請求格式的問題:

  4. 我們會展示所有附近 支援 WPS 的裝置。以及它們是否開啟或解鎖了 WPS,以及它們的版本:

  5. 我們可以看到Wireless Lab支援 WPS。它使用版本 1 並且沒有鎖住。太好了。我們注意到 MAC 地址,它在我這裡是E8:94:F6:62:1E:8E,這會作為下一個工具reaver的目標。

  6. Reaver 嘗試爆破給定 MAC 地址的 WPS Pin。啟動它的語法如下:

    reaver -i mon0 -b <mac> -vv

    輸出是這樣:

  7. 啟動之後,這個工具執行所有可能的 WPS 組合,並嘗試驗證。一旦它完成了,它會返回 WPS 碼和密碼,像這樣:

  8. 得到 WPA-PSK 之後,我們可以正常驗證了。我把匹配 WPS Pin 的預設的 WPA-PSK 留給我的裝置,你可以通過在reaver中指定 Pin 來實現,使用下列命令:

    reaver -i mon0 -b <mac> -vv -p 88404148

    將我的 Pin 換成你的。

剛剛發生了什麼?

我們使用 Wash 成功識別了帶有 WPS 漏洞例項的無線網路。之後我們使用 Reaver 來恢復 WPA 金鑰和 WPS Pin。使用這個資訊,我們之後能夠驗證網路並繼續網路滲透測試。

試一試 – 速率限制

在之前的聯絡中,我們攻擊了整個未加密的 WPS 安裝。我們可以使用多種方法來進一步探索安全的安裝,不需要移除 WPS。

嘗試將 WPS Pin 設定為任意值並再次嘗試,來看看 Reaver 是否能夠快速破解。

獲得允許你限制 WPS 嘗試速率的路由器。嘗試和調整你的攻擊來避免觸發鎖定。

10.2 探針嗅探

我們已經談到了探針,以及如何使用它們來識別隱藏的網路,和執行有效的偽造接入點攻擊。它們也可以將個體識別為目標,或者在大範圍內以最少的努力識別它們。

當裝置打算連線網路是,它會傳送探測請求,包含它自己的 MAC地址和想要連線的網路名稱。我們可以使用工具,例如airodump-ng來跟蹤它們。但是,如果我們希望識別個體是否在特定位置特定時間內出現,或者在 WIFI 使用中發現趨勢,我們就需要不同的方式。

這一節中,我們會使用 tshark 和 Python 來收集資料。你會收到程式碼和完成了什麼的解釋。

實戰時間 – 收集資料

遵循下列指南來開始:

  1. 首先,我們需要尋找多個網路的裝置。通常,普通的安卓或者 iPhone 智慧收集就足夠了。桌上型電腦通常不是良好的目標,因為它們只能待在一個地方。新的 iPhone 或安卓裝置可能禁用了探測請求,或者不清楚,所以在你放棄之前檢查一下。

  2. 一旦你搞定了裝置,確保開啟了 WIFI。

  3. 之後啟動你的監控介面,像之前那樣。

  4. 下面要完成的事情就是使用tshark尋找探測請求,通過下列命令:

    tshark -n -i mon0 subtype probereq

    命令的截圖如下:

  5. 你這裡的輸出會有些混亂,因為tshark的預設輸出沒有為可讀而涉及,只是儘可能展示很多資訊。它看起來應該是這樣:

  6. 你已經可以看到 MAC 地址和探測請求的 SSID。但是,輸出還可以更好。我們可以使用下列命令來使其更加可讀取:

    tshark –n –i mon0 subtype probereq –T fields –e separator= -e wlan.sa –e wlan_mgt.ssid

    命令的截圖如下:

  7. 輸出會變得更加可讀:

  8. 所以現在我們獲得了可讀格式的輸出,下面呢?我們要建立 Python 指令碼,執行命令並記錄輸出用於之後的分析。在執行程式碼之前,你需要確保你準備好了監控介面,並在目錄中建立了results.txt檔案。Python 指令碼如下:

    import subprocess 
    import datetime 
    results = open("results.txt", "a") 
    while 1: 
        blah = subprocess.check_output(["tshark –n –i mon0 subtype probereq –T fields –e separator= -e wlan.sa –e wlan_mgt.ssid –c 100"], shell=True) 
        splitblah = blah.split("
    ") 
        for value in splitblah[:-1]: 
            splitvalue = value.split("	") 
            MAC = str(splitvalue[1]) 
            SSID = str(splitvalue[2]) 
            time = str(datetime.datetime.now()) 
            Results.write(MAC+" "+SSID+" "+time+"
    ")

    讓我們簡單看一看 Python 指令碼:

    • import subproces庫和datetime庫:這允許我們引用子程式和日期時間庫。subprocess允許我們從 Linux 命令列監控介面,而datetime庫允許我們獲得準確時間和日期。

    • while 1:這行程式碼在停止之前一直執行。

    • results = open("results.txt", "a"):這使用附加模式開啟了檔案,並將其賦給results。附加模式只允許指令碼新增檔案的內容,這會防止檔案被覆寫。

    • blah = subprocess.check_output(["tshark –n –I mon0 subtype probereq –T fields –e separator= -e wlan.sa –e wlan_mgt.ssid –c 100"], shell=True):這開啟了 shell 來執行我們之前側事故的tshark命令。這次唯一的區別就是-c 100。這個選項所做的就是將命令限制為 100 個查詢。這允許我們將節骨哦返回給我們自己,而不需要停止程式。因為我們說過在寫入結果之後永遠執行,這個指令碼會再次啟動。

    • 這行程式碼從 shell 獲得輸出,並將其賦給變數blah

    • splitblah = blah.split("
      ")
      :接收變數blah並按行分割。

    • for value in splitblah[:-1]:對輸入的每一行重複下面的操作,忽略包含頭部的第一行。

    • splitvalue = value.split(" "):將每一行拆分成更小的片段,使用tab字元作為分隔符。

    • 下面的三行接收每個文字段並將其賦給變數:

      MAC = str(splitvalue[1]) 
      SSID = str(splitvalue[2]) 
      time = str(datetime.datetime.now()
    • results.write(MAC+" "+SSID+" "+time+"
      ")
      :接收所有這些值,將其寫到檔案中,由空格分隔,為了整潔最後附帶回車和換行符。

寫到檔案的輸出是整潔的文字行。

剛剛發生了什麼?

我們從探測請求接收輸入,並將其使用 Python 輸出到檔案中。

你可能會問自己它的目的是什麼。這可以僅僅通過執行原始的tshark命令並新增>> results.txt來完成。你是對的,但是,我們建立了整合其它工具,視覺化平臺,資料庫,以及服務的框架。

例如,使用 WiGLE 資料庫,將 SSID 對映為位置,你就可以新增新的程式碼行接受 SSID 變數並查詢 WIGLE 資料庫。

作為替代,你也可以建立 MySQL 資料庫並將輸出儲存到這裡來執行 SQL 命令。

這一節向你提供了建立你自己的探測監控攻擊的第一步。通過這個實驗,並使用這個簡單的程式碼作為第一步,就可以建立多數實用的工具。

試一試 – 擴充套件概念

研究什麼工具可用於視覺化和資料分析,並易於整合到 Python。例如 Maltego 的工具擁有免費版本,可以用於繪製資訊。

為你自己建立 MySQL資料庫來記錄資料和重新調整之前的 Python 指令碼,將結果輸出到資料庫。之後,構建另一個指令碼(或在相同檔案中)來獲得資料並輸出到 Maltego。

重新調整指令碼來查詢 WIGLE,之後從探測請求中收集地理位置資料。通過 Maltego 來輸出資料。

嘗試通過 Flask、Django 或 PHP 建立 Web 前端來展示你的資料。為展示資料研究現有的解決方案,並嘗試通過與它們的建立者交談來模擬和改進它們。

總結

這一章中,我們談論了針對 WPS 的攻擊,它在本書第一版的釋出過程中出現。同時也初步嘗試了將無線工具使用 Python 整合。我們已經到達了本書的末尾,我希望它充實而又有趣。七年後的第三版再見吧。


相關文章