Как подделать IP-адрес в UDP-пакете с помощью scapy - PullRequest
1 голос
/ 01 октября 2019

Я тестирую инфраструктуру безопасности на своем сервере, запускаю приложение, которое принимает UDP-трафик через порт 7777. Для этого я хочу отправлять UDP-пакеты для запроса информации о приложении, но с использованием поддельного IP-адреса. source.

Вот пакет, который я пытаюсь отправить:

https://i.stack.imgur.com/kmUPx.png

Я пытался сделать это с scapy, но похоже, что пакетне получен на другой стороне, где у меня tcpdump прослушивает UDP-пакеты на порту 7777.

Это код, который я пробовал:

from scapy.all import *
import random

D = 7777 # destination port
opcode = 'd'
target_ip = "1.1.1.1"
ips = target_ip.split('.'); # Target IP

payload = "SAMP{0}{1}{2}{3}{4}{5}{6}".format(chr(int(ips[0])), chr(int(ips[1])), chr(int(ips[2])), chr(int(ips[3])), chr(D & 0xFF), chr(D » 8 & 0xFF), opcode)

ip1 = 84
ip2 = random.randint(1,255)
ip3 = random.randint(1,255)
ip4 = random.randint(1,255)

A = str(ip1) + "." + str(ip2) + "." + str(ip3) + "." + str(ip4)

send(IP(src=A, dst=target_ip)/UDP(dport=D)/Raw(load=payload))

Когда я запускаю, он говорит "«Отправлено 1 пакет», однако я не вижу пакетов на другой стороне при использовании tcpdump следующим образом:

tcpdump -t -n -v -B 99999 -i gre1 -XX udp dst port 7777

Я пробовал использовать два разных целевых IP-адреса, оба открыли порт 7777.

Полезная нагрузка, которую я хочу отправить, в основном 53 41 4D 50 C0 A8 C8 67 61 1E 69, от поддельного IP-адреса.

1 Ответ

1 голос
/ 01 октября 2019

К вашему сведению, вы можете создать шаблон пакета, это будет намного проще. Что-то вроде

class YourPacket(Packet):
    fields_desc = [
        StrFixedLenField("head", "SAMP", 4),
        IPField("ip", "0.0.0.0"),
        ShortField("port", 0),
        ByteField("opcode", 0)
    ]

Затем убедитесь, что вы отправляете его в правильном интерфейсе. Вы можете добавить iface=... к send().

Демо:

>>> x = YourPacket(ip="192.168.200.103", port=7777, opcode=ord(b"i"))
>>> x
<YourPacket  ip=192.168.200.103 port=7777 opcode=105 |>
>>> hexdump(x)
0000  53 41 4D 50 C0 A8 C8 67 1E 61 69                 SAMP...g.ai
>>> send(IP()/UDP(dport=7777)/x)
...