TCP ACK подмена

Я пишу программу, которая подделывает TCP-запросы и собирает данные для хранения в локальном буфере. Для этого в системе, подключенной к клиенту, я настроил iptables для хранения всех входящих пакетов в очереди перед маршрутизацией. Затем я использую библиотеку netfilter для чтения пакетов из очереди. После этого с помощью сокетов RAW я отправляю поддельные TCP-пакеты клиенту. Благодаря этому я могу подделать пакет SYN/ACK в ответ на запрос SYN от клиента.

Но проблема возникает, когда я пытаюсь подделать ACK для клиента в ответ на входящие данные. В этом случае реальный ip источника приходит в пакете, а не в фальшивом. Пожалуйста, смотрите седьмой след ниже, отмеченный ">>>". При этом исходный ip отображается как 192.168.10.10, где он должен быть 212.58.246.81. На 4-й трассировке (то есть SYN/ACK-пакет) показывается нормально.

3  0.073852000  192.168.10.100  212.58.246.81  TCP  38307 > http [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=502233100 TSER=0 WS=6
4  0.103102000  212.58.246.81  192.168.10.100  TCP  http > 38307 [SYN, ACK] Seq=0 Ack=1 Win=31744 Len=0
5  0.103147000  192.168.10.100  212.58.246.81  TCP  38307 > http [ACK] Seq=1 Ack=1 Win=5840 Len=0
6  0.103349000  192.168.10.100  212.58.246.81  HTTP  GET /go/rss/int/news/-/sport2/hi/tennis/9519762.stm HTTP/1.1
>>> 7  1.118729000  192.168.10.10  192.168.10.100  TCP  http > 38307 [ACK] Seq=1 Ack=1 Win=31744 Len=0
8  1.118788000  192.168.10.100  192.168.10.10  TCP  38307 > http [RST] Seq=1 Win=0 Len=0
9  3.102627000  192.168.10.100  212.58.246.81  HTTP  [TCP Retransmission] GET /go/rss/int/news/-/sport2/hi/tennis/9519762.stm HTTP/1.1
10  3.148590000  192.168.10.10  192.168.10.100  TCP  [TCP Dup ACK 7#1] http > 38307 [ACK] Seq=1 Ack=1 Win=31744 Len=0
11  3.148606000  192.168.10.100  192.168.10.10  TCP  38307 > http [RST] Seq=1 Win=0 Len=0

Также я опробовал команду "sendip", как показано ниже, чтобы отправить поддельный TCP ACK

sendip -p ipv4 -p tcp -is 212.58.246.81 -id 192.168.10.100 -ts 80 -td 4567 -tfa 1 -tfs 0 -d "Data" 192.168.10.100

здесь tfa и tfs означают флаги ack и syn соответственно. Это также не сработало, как ожидалось, и было показано, что оно начинается с 192.168.10.10 вместо 212.58.246.81. Но если я установлю оба флага (syn и ack) как 1, то он работает нормально.

ОС Ubuntu. Может кто-нибудь, пожалуйста, дайте мне знать, где я иду не так. Большое спасибо за вашу помощь.

0 ответов

Другие вопросы по тегам