Wie fälsche ich den Quellport eines TCP-Pakets?

7

Gibt es eine einfache (oder überhaupt mögliche) Möglichkeit, ein TCP-Paket beim Verlassen des Computers neu zu schreiben?
Zum Beispiel, wenn ich renne

telnet binfalse.de 22

Es wird nach einem nicht verwendeten Port gesucht, um das Gerät zu verlassen. In diesem Fall ist es 46576:

root@srv % lsof -i -P -n | grep telnet
telnet    10150   user    3u  IPv4 1159425      0t0  TCP 1.2.3.4:46576->87.118.88.39:22 (ESTABLISHED)

Aber jetzt möchte ich diese Pakete neu schreiben, damit der Server denkt, dass die Anforderungen vom Port stammen 1337, oder ähnlich. Natürlich weiß ich, dass ich in meiner telnetSitzung keine Antwort erwarten muss .

EDIT:
Natürlich 1337hört ein anderes Programm zu, also ist es keine Option , zu sagen telnet, dass man 1337durchsprechen soll ...

binfalse
quelle
4
Sie sollten das Wort Paket anstelle von Paket verwenden
Mike Pennington
4
Wenn Sie IP-Pakete senden möchten, die kein UDP oder eine wohlgeformte TCP-Verbindung sind, müssen Sie root sein (oder über die entsprechenden Funktionen verfügen). Dann könnten Sie IP-Pakete senden, die zufällig TCP-Pakete mit einem falschen Quellport sind. Aber das würde nicht gut funktionieren, da Sie den TCP-Stack neu implementieren müssten (einen großen Teil davon), und Sie würden nicht weit gehen, ohne die ACKs von der anderen Partei empfangen zu können, die zum Abhören gehen würde Programm. Daher müssen Sie die Pakete bei Eingang an einen anderen Port umleiten iptables.
Gilles 'SO - hör auf böse zu sein'
Ok, ich möchte wirklich keine Verbindung herstellen. Ich würde mich freuen, wenn ein einzelnes Paket meinen Computer verlässt und alle Knoten, die einen Blick in das Paket werfen, glauben, dass es von :1337... stammt. Ich kümmere mich nicht um eines Antwort ...
binfalse
2
Wenn dies der Fall ist, sollten Sie einen Paketgenerator wiescapy
Mike Pennington

Antworten:

6

Angenommen, Sie sprechen über Linux, dann iptablesgibt es eine mangleTabelle, die alle möglichen verrückten Dinge für ausgehenden TCP-Verkehr tun kann. iptablesNAT-Funktionen könnten ebenfalls hilfreich sein, da es sich wirklich so anhört, als ob Sie "Portadressübersetzung" oder "manuelles NAT" durchführen möchten.

LawrenceC
quelle
6

Wenn Sie das telnetProtokoll (oder rohe TCP-Streams) wirklich verwenden , können Sie nc -p <source_port>... -tTelnet-Optionen aushandeln. Ich habe einen Terminalserver darunter, der Telnet-Verbindungen akzeptiert, tcp/2015und ich werde von dort beziehentcp/31415

# Window 1
[mpenning@hotcoffee ~]$ nc -p 31415 -t 192.168.12.117 2015
????????????????

8024-1(config-if-Po2)#

Verifizieren...

[mpenning@hotcoffee tshark_wd]$ netstat -an | grep 31415
tcp        0      0 192.168.12.236:31415    192.168.12.117:2015     ESTABLISHED
[mpenning@hotcoffee tshark_wd]$

Dies setzt voraus, dass Sie noch keinen lokalen Socket tcp/31415haben, der abhört. Wenn Sie bereits einen lokalen TCP-Socket haben, der an den gewünschten Port gebunden iptablesist , ist dies Ihre einzige Option.

Mike Pennington
quelle
Leider gibt es ein anderes Programm, das diesen Port abhört. so nc -pist keine Option. Aber trotzdem kann es nicht schlecht sein, es hier aufzulisten, danke ;-)
binfalse
@binfalse, helfen Sie mir zu verstehen ... möchten Sie eine hergestellte TCP-Verbindung oder nur, um einige Pakete von einem bestimmten Quellport zu fälschen (selbst wenn ein anderes Programm denselben Port überwacht)?
Mike Pennington
Ich habe ein Tool, das am Hafen zuhört X. Ich möchte einige Pakete (z. B. mit Telnet oder Netcat oder was auch immer) von demselben Computer an einen Server senden, möchte aber, dass dieser Server auf den Port antwortet X. Da jedoch bereits etwas an den Port gebunden ist, funktioniert XIhr Befehl nc -p X [...]nicht.
binfalse
Ich verstehe, warum ncnicht funktioniert ... Ich versuche herauszufinden, warum Sie nicht einfach einen Paketgenerator
Mike Pennington
Hey, vielen Dank, scapyfunktioniert gut. Noch nie davon gehört!
binfalse