區域網內實現ARP攻擊
一、ARP工作原理
網路中每臺主機都會在自己的ARP緩衝區中建立一個 ARP列表,以表示各主機IP地址和其MAC地址的對應關係。當源主機需要將一個資料包要傳送到目的主機時,會首先檢查自己 ARP列表中是否存在該 IP地址對應的MAC地址,如果有﹐則在傳送資料包中設定目的乙太網地址和目的IP地址為表中對應地址。
如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的MAC地址。此ARP請求資料包裡包括源主機的IP地址、硬體地址、以及目的主機的IP地址。網路中所有的主機收到這個ARP請求後,會檢查資料包中的目的IP是否和自己的IP地址一致。
如果不相同就忽略此資料包;如果相同,該主機首先將傳送端的MAC地址和IP地址新增到自己的ARP列表中,如果ARP表中已經存在該IP的資訊,則將其覆蓋,然後給源主機傳送一個ARP響應資料包,告訴對方自己是它需要查詢的MAC地址;源主機收到這個ARP響應資料包後,將得到的目的主機的IP地址和MAC地址新增到自己的ARP列表中,並利用此資訊開始資料的傳輸。
當然,若該網段沒有目標主機對應的IP地址,則將該資料包傳送給該網段的路由器,路由器解析目標IP主機地址,找到目標主機所在網段的路由器,在其網段上進行ARP請求的廣播,找到目標主機。
考慮到當前網路中反ARP攻擊技術已經非常成熟,例如360安全衛士、WINDOWS防火牆等,故本次作業只在3臺電腦組成的區域網內,關掉防火牆進行ARP攻擊實驗。
二、ARP攻擊原理
ARP攻擊分為二種,一種是阻斷乙太網兩臺主機通訊的資料包;另一種是對內網PC的閘道器欺騙,使被欺騙PC不能聯網。
第一種ARP攻擊的原理是——阻斷主機間通訊資料。攻擊機首先得獲得通訊主機IP地址,然後將偽造的MAC地址封裝進資料包,回覆給源主機,並且按照一定的頻率不斷進行,使真實的地址資訊無法通過更新儲存在源主機中。這樣,源主機只會將資料包發給偽造的MAC地址,造成正常PC無法收到資訊。
第二種ARP攻擊的原理是——偽造閘道器。它的原理是建立假閘道器,讓被它欺騙的PC向假閘道器發資料,而不是通過正常的路由器途徑上網。
2.1阻斷主機間通訊
區域網內,一個交換機連線了3臺機器,假設依次是計算機A,B,C。
A的IP地址為192.168.1.1 |
MAC: AA-AA-AA-AA-AA-AA |
B的IP地址為192.168.1.2 |
MAC: BB-BB-BB-BB-BB-BB |
C的IP地址為192.168.1.3 |
MAC: CC-CC-CC-CC-CC-CC |
假設主機A要給C傳送資料,且主機A的arp快取表中有主機C的IP-MAC對映表,主機B為攻擊機。正常情況下在A計算機上執行arp –a查詢ARP快取表應該出現如下資訊:
介面 |
192.168.1.1 |
0xc |
Internet 地址 |
實體地址 |
型別 |
192.168.1.3 |
CC-CC-CC-CC-CC-CC |
動態 |
在計算機B上執行ARP攻擊程式,來傳送ARP欺騙包。B向A傳送一個自己偽造的ARP應答,而這個應答中的資料為傳送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應該是CC-CC-CC-CC-CC-CC,這裡被偽造了)。當A接收到B偽造的ARP應答,就會更新本地的ARP快取(A不知道被偽造了)。而且A不知道其實是從B傳送過來的,A這裡只有192.168.10.3(C的IP地址)和無效的DD-DD-DD-DD-DD-DDMAC地址。
欺騙完畢我們在A計算機上執行arp -a來查詢ARP快取資訊,原來正確的資訊現在已經出現了錯誤。
介面 |
192.168.1.1 |
0xc |
Internet 地址 |
實體地址 |
型別 |
192.168.1.3 |
DD-DD-DD-DD-DD-DD |
動態 |
上面例子中在計算機A上的關於計算機C的MAC地址已經錯誤了,所以即使以後從A計算機訪問C計算機這個192.168.1.3這個地址也會被ARP協議錯誤的解析成MAC地址為DD-DD-DD-DD-DD-DD的,造成兩個主機不能進行通訊。
2.2偽造閘道器
當區域網中一臺機器,反覆向其他機器,特別是向閘道器,傳送這樣無效假冒的ARP應答資訊包時,嚴重的網路堵塞就會開始。由於閘道器MAC地址錯誤,所以從網路中計算機發來的資料無法正常發到閘道器,自然無法正常上網。這就造成了無法訪問外網的問題,另外由於很多時候閘道器還控制著我們的區域網LAN上網,所以這時我們的LAN訪問也就出現問題了。
三、ARP攻擊程式
平時基於Socket的網路程式設計,底層的資料幀格式對於使用者來說是透明的,若想進行底層網路協議開發,需要自己指定幀資料內容。基於捕獲網路資料包並進行分析的開源庫WinPcap,在Windows平臺上,進行以下任務:捕獲原始資料包;在資料包傳送給某應用程式前,根據使用者指定的規則過濾資料包;將原始資料包通過網路傳送出去。
3.1 阻斷主機間通訊
下載和WinPcap相關的開發包WpdPack,安裝WinPcap.exe。C-Free開發環境下,需要匯入WpdPack解壓目錄下的include和lib目錄,加入連線庫wpcap.lib和 packet.lib。不過除錯了半天總是出現ld.exe下找不到wpcap.lib和packet.lib的問題,故直接將lib檔案匯入工程檔案下的Source File檔案中,同時將WpdPack的include和lib目錄複製到C-Free的安裝目錄mingw資料夾下的lib和include目錄下。
阻斷主機間通訊的ARP攻擊步驟為獲取裝置列表-選擇合適介面卡-開啟介面卡-填寫資料幀,併傳送資料包。
Ø 獲取裝置列表
假設攻擊機為主機B,所有操作均在主機B上進行。獲取裝置列表即獲取B上可以使用的網路介面卡,因為所有的資料都是通過它傳送的。可以使用pcap_findalldevs()函式來實現這個功能: 這個函式返回一個pacp_if()結構的連結串列,其內容包括介面卡的名字name和詳細描述descrition等資訊。其有兩個引數,alldevs儲存返回的網路介面卡的資訊, errbuf以字串的形式儲存錯誤資訊。
/* 獲得裝置列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
/* 列印列表 */
for(d= alldevs; d != NULL; d= d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);//列印所有介面卡的詳細資訊
else
printf(" (No description available)\n");
}
if (i == 0)
{
printf("\nNo interfaces found! Make sure WinPcap isinstalled.\n");
return 0;
}
試過之後,在這裡選擇第一個介面卡,因為只有第一個可以捕獲資料。
Ø 開啟介面卡
開啟介面卡以便進行資料包傳送。用到pcap_open_live(a,b,c,d)函式,a表示介面卡名字,可通過獲取裝置列表函式獲得,b為捕獲資料包中的資料長度,最大MTU為1500,在乙太網上只要比它大就行,這裡設定為65535,意為能捕捉到完整資料包。
printf("Enterthe interface number (1-%d):",i);
scanf("%d", &inum);
/* 跳轉到選中的介面卡 */
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
/* 開啟介面卡 */
if ( (adhandle= pcap_open_live(d->name, 65535,1, 1000,errbuf ) )== NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is notsupported by WinPcap\n", d->name);
/* 釋放裝置列表 */
pcap_freealldevs(alldevs);
return -1;
}
Ø 填寫資料幀,傳送資料包
ARP分組格式長度42位元組,乙太網最小長度要求為60位元組,故需要對每一資料幀末尾填充字元。ARP分組如下格式所示:
乙太網目的地址/6 |
乙太網源地址/6 |
幀型別/2 |
硬體型別/2 |
協議型別/2 |
硬體地址長度/1 |
協議地址長度/1 |
Op/2 |
傳送端乙太網地址/6 |
傳送端IP地址/4 |
目的乙太網地址/6 |
目的IP地址4 |
主機A想和C進行通訊,但沒有C的ARP快取表。故先進行全網廣播,想找目的IP地址為C的MAC地址,關鍵ARP分組資料為:
乙太網目的地址:111111(全1表示廣播)
op設定為1,表示ARP請求
目的IP地址:廣播ip地址,192.168.1.255
其餘按TCP/IP詳解(卷1)來設定,最後要在資料包43~60位填充0。
packet[6]=0x0e;
packet[7]=0x07;
packet[8]=0X62;
packet[9]=0x00;
packet[10]=0X01;
packet[11]=0x12;
/* 幀型別,0806表示ARP協議 */
packet[12]=0x08;
packet[13]=0x06;
B和C接收到廣播資料後,進行IP地址比對,B直接忽略,C回覆將自己的MAC地址填充進去,將傳送端地址設定為C,目的地址設定為A,op值設定為2,表示ARP請求回覆。op值為2時,前12個位元組等於分組後面的目的乙太網、目的IP地址。
u_char packet[60];
printf("輸入被攻擊方的MAC地址(如FF-FF-FF-FF-FF-FF則為廣播)\n");
scanf("%2x-%2x-%2x-%2x-%2x-%2x",&packet[0],&packet[1],&packet[2],&packet[3],&packet[4],&packet[5]);
/* 乙太網源地址,當然是假的 */
packet[6]=0x0e;
packet[7]=0x07;
packet[8]=0X62;
packet[9]=0x00;
packet[10]=0X01;
packet[11]=0x12;
/* 幀型別,0806表示ARP協議 */
packet[12]=0x08;
packet[13]=0x06;
在主機A執行arp –a後,會顯示C的ip和mac地址。
主機B攻擊主機A,將傳送端乙太網地址設定為DD-DD-DD-DD-DD-DD,傳送端IP地址為主機C的IP地址,目的乙太網地址和目的IP地址設定為A的,幀型別設定為2,表示ARP請求回覆。
packet[6]=0x0e;
packet[7]=0x07;
packet[8]=0X62;
packet[9]=0x00;
packet[10]=0X01;
packet[11]=0x12;
/* 幀型別,0806表示ARP協議 */
packet[12]=0x08;
packet[13]=0x06;
當A收到B的資料包後,會更新ARP表;在主機A輸入arp -a後,主機A的ARP表進行更新,顯然是錯誤資訊。由於區域網是利用MAC地址進行資料傳輸,故主機A查詢arp表後,只會把資料傳給MAC地址為DD-DD-DD-DD-DD-DD的主機,顯然無法正常傳輸。當把MAC地址改為B的後,資料會傳到B這裡來,而A認為是一直再給C傳。
3.2 偽造閘道器
和阻斷主機間通訊一樣,若目的IP改為閘道器IP地址,目的MAC地址改為B的,這樣主機A一直給B傳送資料,顯然上不去網。
相關文章
- Kali 實現區域網 ARP 欺騙和 ARP 攻擊
- beef區域網內模擬攻擊
- 網路層協議及ARP攻擊協議
- [專業術語]什麼是ARP攻擊?如何防範ARP攻擊?
- 【論文】網路安全與入門-ARP攻擊
- ARP協議介紹與ARP協議的攻擊手法協議
- 網路安全中ARP攻擊最常見的七種方法!
- Python寫ARP區域網主機存活掃描與ARP欺騙工具Python
- ARP欺騙與中間人攻擊
- 通過區域網中間人攻擊學網路第四篇
- 非掃描式定位攻擊域內SQL ServerSQLServer
- 網路攻擊中主動攻擊和被動攻擊有什麼區別?
- 什麼是ARP攻擊?主要分類有哪些?
- Linux下如何實現區域網內網路裝置相互通訊Linux內網
- Web Worker應用之CORS攻擊實現botnet殭屍網路節點攻擊WebCORS
- 【滲透測試培訓】什麼是ARP欺騙攻擊?攻擊方法有哪些?
- 企業網盤實現區域網共享
- 瑞星:“雲攻擊”已成現實
- 前端實現csrf防止攻擊前端
- DNS欺騙:網站克隆實現網站釣魚攻擊DNS網站
- 域委派攻擊詳解
- 攻擊銀行內網,只要三步內網
- 網路攻擊盯上民生領域,應對DDoS和APT攻擊,如何有效防禦?APT
- 【網路安全知識】DDOS攻擊和CC攻擊有什麼區別?
- 內網威脅感知與攻擊溯源系統內網
- XSS攻擊和CSRF攻擊有什麼區別?
- CC攻擊和DD攻擊的區別在哪裡
- 網路攻擊
- 基於Vue實現圖片在指定區域內移動Vue
- JeecgBoot抵禦XSS攻擊實現方案boot
- 區塊鏈安全:實現公鏈雙花攻擊的多種方法區塊鏈
- DDoS攻擊與CC攻擊的區別是什麼?
- 一次攻擊內網rmi服務的深思內網
- 攻擊面管理預防網路攻擊原理?
- 藉助sIoT可以通過手機app實現區域網內的裝置操控。APP
- Ubuntu18.04 安裝opensips,實現區域網內sip語音視訊通話Ubuntu
- .net6+wpf製作指定區域網ip無法上網的arp欺詐工具
- 簡單的區域網內通訊
- virtualbox實現區域網內訪問虛擬機器2-network新增埠轉發虛擬機