Ja. Angenommen, Ihr Netzwerk sieht folgendermaßen aus:
Sie möchten SSH von A nach B ausführen. Sie haben sshd auf B ausgeführt. es lauscht auf tcp: //127.0.0.1: 22.
B$ pwnat -s 0.0.0.0 2022 127.0.0.1:22
pwnat on B lauscht jetzt auf udp: //0.0.0.0: 2022 und ist so konfiguriert, dass Verbindungen zu tcp: //127.0.0.1: 22 zugelassen werden. Es sendet auch periodische ICMP-Echoanforderungen an 3.3.3.3 (fest codierte IP).
A$ pwnat -c 127.0.0.1 3022 104.16.111.208 2022 127.0.0.1 22
pwnat on A hört jetzt auf tcp: //127.0.0.1: 3022.
pwnat on A sendet ein ICMP-Zeitüberschreitungspaket an 104.16.111.208, dessen Nutzlast mit den ausgehenden ICMP-Echoanforderungen von NAT B übereinstimmt. NAT B erkennt, dass die Nutzlast mit den ausgehenden ICMP-Echoanforderungen übereinstimmt, und leitet das ICMP-Zeitüberschreitungspaket an B weiter Der IP-Header für das ICMP-Zeitüberschreitungspaket enthält die IP-Adresse 151.101.193.69 von NAT A als Quelladresse.
pwnat on B sendet ein UDP-Paket an udp: //151.101.193.69: 2022 mit dem Quellport 2022. NAT B fügt einen Eintrag in seine Tabelle ein, sodass es in Zukunft alle von udp: //151.101.193.69 empfangenen UDP-Pakete weiterleitet : 2022 at udp: //104.16.111.208: 2022 to udp: //192.168.2.10: 2022. Beachten Sie, dass viele NATs einen anderen Port auf der externen Schnittstelle zuweisen. In diesem Fall funktioniert pwnat nicht .
pwnat on A sendet ein UDP-Paket an udp: //104.16.111.208: 2022 mit dem Quellport 2022. NAT A fügt einen Eintrag in seine Tabelle ein, sodass es in Zukunft alle von udp: //104.16.111.208 empfangenen UDP-Pakete weiterleitet : 2022 at udp: //151.101.193.69: 2022 to udp: //192.168.1.10: 2022.
NAT A empfängt das von B gesendete UDP-Paket, ordnet es seiner Tabelle zu und leitet es an A weiter. NAT B empfängt das von A gesendete UDP-Paket, ordnet es seiner Tabelle zu und leitet es an B weiter. A und B können jetzt kommunizieren frei über UDP.
A$ ssh -p 3022 127.0.0.1
pwnat on A, das auf tcp: //127.0.0.1: 3022 lauscht, akzeptiert die Verbindung von ssh. pwnat on A sendet eine Anfrage an pwnat on B (über UDP), um einen Tunnel nach tcp: //127.0.0.1: 22 zu öffnen. Da dies als zulässiges Host / Port-Paar aufgeführt war, als pwnat auf B gestartet wurde, wird die Verbindung hergestellt. Der Tunnel ist jetzt fertig:
ssh on A --[tcp]--> pwnat on A --[udp]--> pwnat on B --[tcp]--> sshd on B
Wenn pwnat keine Fehler aufweist, ist dies sicherheitstechnisch nicht anders, als sshd der Welt auf einem Server zur Verfügung zu stellen, der sich nicht hinter einem NAT befindet. Beim Blick durch den Quellcode scheint pwnat jedoch irgendwie zusammengehackt zu sein, und ich würde mich nicht darauf verlassen, dass es sicher ist. Das schlimmste Szenario wäre die Ausführung von willkürlichem Code auf A und B als Benutzer, der pwnat ausführt.