
Multi-Hop-Proxy-Tool für Penetrationstester, das Traffic-Routing durch mehrere Knoten, SOCKS5/SSH-Tunneling, Port-Weiterleitung, Remote-Shell und verschlüsselte Knotenkommunikation ermöglicht.

Stowaway ist ein in Go geschriebener Multi-Level-Proxy-Tool, das speziell für Penetrationstester entwickelt wurde.
Benutzer können mit diesem Programm externen Traffic über mehrere Knoten in interne Netzwerke leiten, Zugriffsbeschränkungen umgehen, baumartige Knotennetzwerke aufbauen und Verwaltungsfunktionen bequem realisieren.
Vielen Dank für eure Sterne, und ich freue mich über Fragen und Bugmeldungen nach der Nutzung 😘
Lest bitte vor der Nutzung sorgfältig die Bedienungsanleitung und die Hinweise am Ende des Dokuments.
Dieses Projekt dient ausschließlich der Netzwerksicherheitsforschung und -lehre. Die Verwendung für illegale Zwecke ist strengstens untersagt. Stellt sicher, dass ihr vor jedem Test mit diesem Tool eine ausdrückliche Genehmigung des Zielsystems eingeholt habt und die einschlägigen Gesetze und Vorschriften eures Landes/Region einhaltet. Jegliche direkten oder indirekten Folgen der Nutzung dieses Tools (einschließlich, aber nicht beschränkt auf Datenverlust, Systemschäden, rechtliche Haftung) trägt der Nutzer selbst. Der Autor dieses Projekts übernimmt keine Verantwortung für Missbrauch oder daraus resultierende rechtliche Konsequenzen. Die Nutzung dieses Tools bedeutet, dass ihr diese Haftungsausschlusserklärung vollständig gelesen, verstanden und zugestimmt habt.
make, oder seht in der Makefile nach, um bestimmte Programme zu kompilieren.Stowaway umfasst zwei Rollen:
admin – Das Steuerungsmodul des Penetrationstesters.agent – Das gesteuerte Modul, das vom Penetrationstester bereitgestellt wird.Die folgenden Befehle starten schnell die einfachste Stowaway-Instanz:
./stowaway_admin -l 9999./stowaway_agent -c <IP_des_stowaway_admin>:9999Parameter:
-l Adresse des passiven Modus [ip]:<port>
-s Verschlüsselungsschlüssel für die Knotenkommunikation – alle Knoten (admin && agent) müssen übereinstimmen
-c Zielknotenadresse im aktiven Modus
--socks5-proxy Adresse des SOCKS5-Proxyservers
--socks5-proxyu Benutzername des SOCKS5-Proxyservers (optional)
--socks5-proxyp Passwort des SOCKS5-Proxyservers (optional)
--http-proxy Adresse des HTTP-Proxyservers
--down Protokolltyp für den Downstream – Standard: reiner TCP-Traffic, optional: HTTP/WS
--tls-enable TLS für die Knotenkommunikation aktivieren – nach Aktivierung wird AES-Verschlüsselung deaktiviert
--domain TLS-SNI/WebSocket-Domain – falls leer, wird standardmäßig die Zielknotenadresse verwendet
--heartbeat Heartbeat-Pakete aktivieren
Parameter:
-l Adresse des passiven Modus [ip]:<port>
-s Verschlüsselungsschlüssel für die Knotenkommunikation
-c Zielknotenadresse im aktiven Modus
--socks5-proxy Adresse des SOCKS5-Proxyservers
--socks5-proxyu Benutzername des SOCKS5-Proxyservers (optional)
--socks5-proxyp Passwort des SOCKS5-Proxyservers (optional)
--http-proxy Adresse des HTTP-Proxyservers
--reconnect Zeitintervall für Wiederverbindung
--rehost IP-Adresse für Port-Reuse
--report Portnummer für Port-Reuse
--up Protokolltyp für den Upstream – Standard: reiner TCP-Traffic, optional: HTTP/WS
--down Protokolltyp für den Downstream – Standard: reiner TCP-Traffic, optional: HTTP/WS
--cs Shell-Kodierungstyp der Laufzeitplattform – Standard: utf-8, optional: gbk
--tls-enable TLS für die Knotenkommunikation aktivieren – nach Aktivierung wird AES-Verschlüsselung deaktiviert
--domain TLS-SNI/WebSocket-Domain – falls leer, wird standardmäßig die Zielknotenadresse verwendet
Dieser Parameter wird von admin && agent gleich verwendet und nur im passiven Modus eingesetzt.
Wenn keine IP-Adresse angegeben wird, lauscht der Knoten standardmäßig auf 0.0.0.0.
admin: ./stowaway_admin -l 9999 or ./stowaway_admin -l 127.0.0.1:9999
agent: ./stowaway_agent -l 9999 or ./stowaway_agent -l 127.0.0.1:9999
Dieser Parameter wird von admin && agent gleich verwendet und kann sowohl im aktiven als auch passiven Modus eingesetzt werden.
Optional; wenn leer, wird die Kommunikation unverschlüsselt übertragen, andernfalls wird sie mit dem vom Benutzer angegebenen Schlüssel verschlüsselt.
admin: ./stowaway_admin -l 9999 -s 123
agent: ./stowaway_agent -l 9999 -s 123
Dieser Parameter wird von admin && agent gleich verwendet und nur im aktiven Modus eingesetzt.
Er gibt die Adresse des Knotens an, mit dem eine Verbindung hergestellt werden soll.
admin: ./stowaway_admin -c 127.0.0.1:9999
agent: ./stowaway_agent -c 127.0.0.1:9999
Diese vier Parameter werden von admin && agent gleich verwendet und nur im aktiven Modus eingesetzt.
--socks5-proxy gibt die Adresse des SOCKS5-Proxyservers an, --socks5-proxyu und --socks5-proxyp sind optional.
--http-proxy gibt die Adresse des HTTP-Proxyservers an, verwendet wie SOCKS5.
Ohne Benutzername/Passwort:
admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx
Mit Benutzername/Passwort:
admin: ./stowaway_admin -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
agent: ./stowaway_agent -c 127.0.0.1:9999 --socks5-proxy xxx.xxx.xxx.xxx --socks5-proxyu xxx --socks5-proxyp xxx
Diese beiden Parameter werden von admin && agent gleich verwendet und können sowohl im aktiven als auch passiven Modus eingesetzt werden.
Beachte, dass admin keinen --up-Parameter hat.
Diese Parameter sind optional; wenn leer, wird der Upstream/Downstream-Traffic als reiner TCP-Traffic übertragen.
Wenn der Upstream/Downstream-Traffic HTTP/WS sein soll, setze die Parameter auf http oder ws.
admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
agent: ./stowaway_agent -c 127.0.0.1:9999 --up ws or ./stowaway_agent -c 127.0.0.1:9999 --up ws --down ws
Zwei wichtige Punkte:
Erstens: Wenn du den Up/Downstream eines Knotens auf TCP/HTTP/WS setzt, müssen die entsprechenden Down/Upstream-Parameter des verbundenen übergeordneten/untergeordneten Knotens übereinstimmen, wie folgt:
admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws
agent: ./stowaway_agent -l 9999 --up ws
In diesem Fall muss agent --up auf ws setzen, sonst kommt es zu Netzwerkfehlern.
Analog bei Agenten untereinander:
Angenommen, Agent-1 lauscht auf Port 127.0.0.1:10000 und hat --down ws gesetzt.
Dann muss Agent-2 ebenfalls --up auf ws setzen, sonst treten Netzwerkfehler auf.
./stowaway_agent -c 127.0.0.1:10000 --up wsZweitens: Da HTTP ein Halbduplex-Protokoll ist, eignet es sich nicht gut für Stowaways Vollduplex-Kommunikation. Daher implementiert das HTTP-Protokoll hier nur das HTTP-Nachrichtenformat, nicht den vollständigen HTTP-Workflow. Du kannst es trotzdem verwenden, aber der Traffic zwischen Stowaway-Knoten im HTTP-Nachrichtenformat kann nicht über nginx weitergeleitet werden. Dieser Code und die Funktion wurden einerseits für spezielle HTTP-Anwendungsfälle beibehalten, andererseits als Vorlage für benutzerdefinierte Protokolle.
Wenn du nginx o.ä. verwenden möchtest, nutze das WS-Protokoll mit TLS.
Dieser Parameter wird nur von agent und nur im aktiven Modus verwendet.
Optional; wenn nicht gesetzt, versucht der Knoten nach einer Netzwerkunterbrechung keine automatische Wiederverbindung. Wenn gesetzt, versucht der Knoten alle x Sekunden (der von dir angegebene Sekundenwert), sich wieder mit dem übergeordneten Knoten zu verbinden.
admin: ./stowaway_admin -l 9999
agent: ./stowaway_agent -c 127.0.0.1:9999 --reconnect 10
In diesem Fall: Wenn die Verbindung zwischen Agent und Admin unterbrochen wird, versucht der Agent alle zehn Sekunden, sich wieder mit dem Admin zu verbinden.
Analog bei Agenten untereinander.
Der Parameter --reconnect kann auch mit --socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy kombiniert werden. Der Agent versucht dann, die Wiederverbindung über den Proxy gemäß den Startparametern herzustellen.
Diese zwei Parameter sind speziell und werden nur auf der Agent-Seite verwendet. Ausführliche Erklärung siehe Abschnitt zur Port-Reuse-Mechanik.
Dieser Parameter wird nur von agent verwendet und kann sowohl im aktiven als auch passiven Modus eingesetzt werden.
Er dient hauptsächlich zur Lösung von Zeichenkodierungsproblemen bei der 'shell'-Funktion. Wenn der Agent auf einer Plattform mit der Konsolenkodierung gbk läuft (z.B. unter Windows) und der Admin auf einer Plattform mit utf-8, setze diesen Parameter unbedingt auf 'gbk'.
./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbkDiese beiden Parameter werden von admin && agent gleich verwendet und können sowohl im aktiven als auch passiven Modus eingesetzt werden.
Durch Setzen dieser Option wird der Traffic zwischen Knoten mit TLS verschlüsselt.
Beispiel:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c localhost:10000 --tls-enable -s 123Beachte: Wenn dieser Parameter aktiviert ist, wird die AES-Verschlüsselung standardmäßig deaktiviert. Der Parameter -s wird dann nur noch für die gegenseitige Authentifizierung und die Port-Reuse-Funktion verwendet.
Außerdem: Wenn dieser Parameter aktiviert ist, muss sichergestellt werden, dass jeder Knoten im Netzwerk (einschließlich admin) diesen Parameter aktiviert hat.
Diese beiden Parameter werden von admin && agent gleich verwendet und sind nur im aktiven Modus verfügbar.
Durch Setzen dieser Option kann die SNI-Option des aktuellen Knotens bei der TLS-Aushandlung oder der Ziel-Host des WebSockets festgelegt werden.
Beispiel:
./stowaway_admin -l 10000 --tls-enable -s 123./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.comDieser Parameter wird nur von admin verwendet und ist sowohl im aktiven als auch passiven Modus verfügbar.
Durch Setzen dieser Option sendet der Admin kontinuierlich Heartbeat-Pakete an den ersten Knoten, um bei dazwischengeschalteten Reverse-Proxys eine lang bestehende Verbindung aufrechtzuerhalten.
Angenommen, zwischen Admin und Agent befindet sich ein Reverse-Proxy (z.B. nginx), der Port 8080 auf Port 8000 weiterleitet, dann sieht das Beispiel wie folgt aus:
./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up wsStowaway bietet derzeit Port-Reuse-Funktionen basierend auf SO_REUSEPORT/SO_REUSEADDR-Eigenschaften und eine Port-Reuse-Funktion basierend auf IPTABLES.
Unter Linux können die meisten Service-Ports wiederverwendet werden.
Unter Windows können IIS- und RDP-Ports nicht wiederverwendet werden, wohl aber Ports von MySQL-, Apache-Diensten.
SO_REUSEPORT/SO_REUSEADDR-Modus
Angenommen, der Agent verwendet den Port-Reuse-Mechanismus, um Port 80 wiederzuverwenden.
Dann muss der Agent die Parameter --rehost, --report und -s setzen.
--rehost: Die IP-Adresse, die wiederverwendet werden soll – darf nicht 0.0.0.0 sein, normalerweise die externe Adresse der Netzwerkkarte.--report: Der Port, der wiederverwendet werden soll.-s: Der Kommunikationsschlüssel.Hauptsächlich unterstützt auf Windows- und macOS-Umgebungen; unter Linux ebenfalls möglich, aber mit vielen Einschränkungen.
./stowaway_admin -c 192.168.0.105:80 -s 123./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123IPTABLES-Modus
Angenommen, der Agent verwendet den Port-Reuse-Mechanismus, um Port 22 wiederzuverwenden.
Dann muss der Agent die Parameter -l, --report und setzen.
Die obigen Beispiele zeigen nur die Verbindung zwischen Admin und Agent. Die Verbindung zwischen Agent und Agent ist identisch.
Wenn der Agent mit Strg-C oder dem kill-Befehl beendet wird, bereinigt das Programm automatisch die IPTABLES-Regeln. Bei Beendigung mit kill -9 wird jedoch keine automatische Bereinigung durchgeführt.
Um zu verhindern, dass nach einem abnormalen Beenden des Agents die IPTABLES-Regeln nicht bereinigt werden und der wiederverwendete Dienst nicht mehr zugänglich ist,
führe zum Schließen aus: python reuse.py --stop --rhost xxx.xxx.xxx.xxx --rport xxx
Damit werden die Weiterleitungsregeln deaktiviert, sodass der ursprüngliche Dienst wieder normal erreichbar ist.
Bei Verwendung des IPTABLES-Port-Reuse-Modus wird die Überwachung erzwungenermaßen auf 0.0.0.0 gesetzt; eine IP-Adresse kann nicht über den Parameter -l angegeben werden.
In den obigen Beispielen traten nur Admin und ein Agent auf.
Das mehrstufige Netzwerk ist jedoch der Kern.
In Stowaway werden mehrstufige Netzwerke mit den Befehlen listen, connect und sshtunnel im Admin erstellt.
Ein einfaches Beispiel:
./stowaway_admin -l 9999 -s 123Agent-1 verbindet sich nun mit dem Admin.
./stowaway_agent -c 127.0.0.1:9999 -s 123Der Benutzer möchte jetzt auch Agent-2 anschließen:
./stowaway_agent -l 10000 -s 123Der Benutzer kann dann über den Admin use 0 -> connect Agent-2-IP:10000 eingeben, um ihn dem Netzwerk als untergeordneten Knoten von Agent-1 hinzuzufügen.
Angenommen, der Benutzer möchte einen weiteren Knoten Agent-3 anschließen, aber über Agent-1 kann Agent-3 nicht erreicht werden.
Der Benutzer kann dann über den Admin use 0 -> listen -> 1.Normal Passive auswählen -> 10001 eingeben, sodass Agent-1 auf Port 10001 lauscht und auf Verbindungen von untergeordneten Knoten wartet.
Nachdem der Admin-Vorgang abgeschlossen ist, wird Agent-3 wie folgt gestartet:
./stowaway_agent -c 127.0.0.1:10001 -s 123Dadurch wird Agent-3 als weiterer untergeordneter Knoten von Agent-1 dem Netzwerk hinzugefügt.
Eine ausführliche Erklärung der listen- und sshtunnel-Befehle findest du im Abschnitt zur Befehlsanalyse.
Stowaway unterstützt derzeit mehrere Arten der Wiederverbindung. Kurz zusammengefasst:
Zunächst: Wenn der übergeordnete Knoten offline geht, beendet sich nur ein Knotentyp von selbst: derjenige, der beim Start im aktiven Modus war und keine Wiederverbindung eingestellt hatte.
Wenn eine Wiederverbindung eingestellt wurde, versucht der Knoten in den angegebenen Zeitabständen, die Verbindung wiederherzustellen.
Außerdem: Alle Knoten, die im passiven Modus gestartet wurden, beenden sich nicht von selbst, sondern lauschen basierend auf den Startparametern weiterhin auf dem angegebenen Port. Der Benutzer kann diese Knoten dann über connect oder sshtunnel wieder in das Netzwerk einbinden.
Wenn aufgrund von Netzwerkschwankungen oder dem Ausfall eines Zwischenknotens ein Zweig getrennt wird, muss bei der aktiven Wiederverbindung unbedingt der Kopfknoten der fehlenden Kette verbunden werden. Beispiel: Auf Admin folgt node1, node1 teilt sich in zwei Zweige: node1 -> node2 -> node3 -> node4 und node1 -> node5 -> node6. Wenn node2 ausfällt, bleiben node3 und node4 aktiv. Der Benutzer hat dann zwei Möglichkeiten: Wenn node1 direkt auf node3 zugreifen kann, kann der Benutzer node3 jederzeit über node1 mit connect oder sshtunnel wieder in das Netzwerk aufnehmen (beachte: auch wenn node1 gleichzeitig node4 erreichen kann, verbinde bitte nicht direkt node4, sondern den Kopfknoten der gesamten fehlenden Kette (node3 -> node4), also node3). Dadurch werden node3 und node4 wieder eingebunden. Die andere Möglichkeit: Wenn node1 nicht direkt auf node3 zugreifen kann (d.h. der Weg führt über node2), starte node2 neu und binde ihn in das Netzwerk ein, und verwende dann auf node2 connect oder sshtunnel, um eine Verbindung zu node3 herzustellen, wodurch node3 und node4 wieder eingebunden werden.
Wenn ein Knoten ausfällt, werden alle mit diesem Knoten und seinen untergeordneten Knoten verbundenen Socks-, Backward- und Forward-Dienste zwangsweise gestoppt.
Im Admin-Controller kann der Benutzer die Tabulatortaste zur Befehlsvervollständigung und die Pfeiltasten zur Historiensuche/Cursorbewegung verwenden.
Der Admin-Controller besteht aus zwei Ebenen. Die erste Ebene ist das Hauptpanel mit den folgenden Befehlen:
help: Zeigt die Hilfeinformationen des Hauptpanels an.(admin) >> help
help Hilfeinformationen anzeigen
detail Details der verbundenen Knoten anzeigen
topo Topologie der Knoten anzeigen
use <id> Zielknoten auswählen, den du verwenden möchtest
exit Stowaway beenden
detail: Zeigt detaillierte Informationen der online befindlichen Knoten an.(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo:
topo: Zeigt die Eltern-Kind-Beziehung der online Knoten an.(admin) >> topo
Node[0]'s children ->
Node[1]
Node[1]'s children ->
use: Einen bestimmten Agent auswählen.(admin) >> use 0
(node 0) >>
exit: Stowaway beenden.(admin) >> exit
[*] Möchten Sie Stowaway wirklich beenden? (y/n): y
[*] BYE!
Wenn der Benutzer mit dem Befehl use einen Agenten auswählt, gelangt er in die zweite Ebene, das Knotenpanel, mit den folgenden Befehlen:
help: Zeigt die Hilfeinformationen des Knotenpanels an.(node 0) >> help
help Hilfeinformationen anzeigen
status Knotenstatus anzeigen (Socks/Forward/Backward)
listen Portüberwachung auf dem aktuellen Knoten starten
addmemo <string> Notiz für den aktuellen Knoten hinzufügen
delmemo Notiz des aktuellen Knotens löschen
ssh <ip:port> SSH über den aktuellen Knoten starten
shell Interaktive Shell auf dem aktuellen Knoten starten
socks <lport> [username] [pass] SOCKS5-Server starten
stopsocks Socks-Dienste beenden
connect <ip:port> Mit einem neuen Knoten verbinden
sshtunnel <ip:sshport> <agent port> SSH-Tunnel verwenden, um einen Knoten in die Topologie aufzunehmen
upload <lokale Datei> <remote Datei> Datei auf den aktuellen Knoten hochladen
download <remote Datei> <lokale Datei> Datei vom aktuellen Knoten herunterladen
forward <lport> <ip:port> Lokalen Port zu einer bestimmten Remote-IP:Port weiterleiten
stopforward Forward-Dienste beenden
backward <rport> <lport> Remote-Port (Agent) auf lokalen Port (Admin) zurückleiten
stopbackward Backward-Dienste beenden
shutdown Aktuellen Knoten beenden
back Zurück zum übergeordneten Panel
exit Stowaway beenden
status: Zeigt den aktuellen Socks/Forward/Backward-Status des Knotens an.(node 0) >> status
Socks status:
ListenAddr: 0.0.0.0:10000 Username: Password:
-------------------------------------------------------------------------------------------
Forward status:
[1] Listening Addr: [::]:20000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
[2] Listening Addr: [::]:30000 , Remote Addr: 192.168.1.1:22 , Active Connections: 0
-------------------------------------------------------------------------------------------
Backward status:
[1] Remote Port: 40000 , Local Port: 50000 , Active Connections: 0
listen: Anweist den Agent, einen bestimmten Port zu überwachen und auf Verbindungen von untergeordneten Knoten zu warten.(node 0) >> listen
[*] ACHTUNG! Wenn Sie IPTables Reuse oder SOReuse wählen, MÜSSEN Sie bestätigen, dass der Knoten ursprünglich auf die entsprechende Weise gestartet wurde!
[*] Wenn Sie IPTables Reuse oder SOReuse wählen, verwendet der Knoten die anfängliche Konfiguration (beim Knotenstart) zum Wiederherstellen des Ports!
[*] Bitte wählen Sie den Modus (1. Normal passive / 2. IPTables Reuse / 3. SOReuse): 1
[*] Bitte geben Sie [ip:]<port> ein: 10001
[*] Warte auf Antwort......
[*] Knoten lauscht auf Port 10001
Beachte: listen ist ein etwas spezieller Befehl. Wie zu sehen, hat listen drei Modi:
Normal passive: Dieser Modus bedeutet, dass der Agent auf normale Weise auf dem Zielport lauscht und auf Verbindungen von untergeordneten Knoten wartet.IPTables Reuse: Dieser Modus bedeutet, dass der Agent den Port im IPTables-Reuse-Modus wiederverwendet und auf Verbindungen von untergeordneten Knoten wartet.SOReuse: Dieser Modus bedeutet, dass der Agent den Port im SOReuse-Modus wiederverwendet und auf Verbindungen von untergeordneten Knoten wartet.Der erste Modus ist der häufigste. Wenn der übergeordnete Knoten in diesem Modus lauscht, muss sich der untergeordnete Knoten nur mit -c <IP:Port des übergeordneten Knotens> verbinden.
Der zweite und dritte Modus sind speziell. Wenn der Benutzer den zweiten oder dritten Modus wählt, muss er sicherstellen, dass der aktuell bearbeitete Knoten selbst im Port-Reuse-Modus gestartet wurde, sonst können diese Modi nicht verwendet werden.
Im zweiten und dritten Modus muss der Benutzer keine Informationen eingeben; der Knoten verwendet automatisch seine eigenen Startparameter, um den Port wiederzuverwenden und auf Verbindungen von untergeordneten Knoten zu warten.
Außerdem: listen kann jeweils nur einen untergeordneten Knoten verbinden. Wenn mehrere untergeordnete Knoten verbunden werden sollen, führe den Befehl listen entsprechend oft aus.
addmemo: Fügt eine Notiz für den aktuellen Knoten hinzu.(node 0) >> addmemo test
[*] Notiz hinzugefügt!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo: test
delmemo: Löscht die Notiz des aktuellen Knotens.(node 0) >> delmemo
[*] Notiz gelöscht!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000 Hostname: ph4ntoms-MBP.lan User: ph4ntom
Memo:
ssh: Verbindet den Knoten per SSH mit einem entfernten Rechner.(node 0) >> ssh 127.0.0.1:22
[*] Bitte wählen Sie die Authentifizierungsmethode (1. Benutzername&&Passwort / 2. Zertifikat): 1
[*] Bitte geben Sie den Benutzernamen ein: ph4ntom
[*] Bitte geben Sie das Passwort ein: *****
[*] Warte auf Antwort.....
[*] Verbindung zum Zielhost per SSH erfolgreich!
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:03:56]
$ whoami
ph4ntom
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:04:16]
$
In diesem Modus ist die Tabulatortaste deaktiviert.
shell: Startet eine Shell auf dem aktuellen Knoten.(node 0) >> shell
[*] Warte auf Antwort.....
[*] Shell erfolgreich gestartet!
bash: no job control in this shell
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ whoami
ph4ntom
bash-3.2$
In diesem Modus ist die Tabulatortaste deaktiviert.
socks: Startet einen SOCKS5-Dienst auf dem aktuellen Knoten.(node 0) >> socks 7777
[*] Versuche, auf 0.0.0.0:7777 zu lauschen......
[*] Warte auf Antwort......
[*] SOCKS erfolgreich gestartet!
(node 0) >>
Beachte: Der Port 7777 wird nicht auf dem Agent, sondern auf dem Admin geöffnet.
Wenn ein Benutzername/Passwort gesetzt werden soll, ändere den Befehl zu socks 7777 <dein Benutzername> <dein Passwort>.
Wenn eine bestimmte Schnittstelle zum Lauschen angegeben werden soll, ändere den Befehl zu socks xxx.xxx.xxx.xxx:7777.
stopsocks: Beendet den SOCKS5-Dienst auf dem aktuellen Knoten.(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777 Username: <null> Password: <null>
[*] Möchten Sie Socks wirklich beenden? (yes/no): yes
[*] Schließe......
[*] SOCKS-Dienst wurde erfolgreich geschlossen!
(node 0) >>
connect: Weist den aktuellen Knoten an, sich mit einem anderen untergeordneten Knoten zu verbinden.agent-1: ./stowaway_agent -l 10002
(node 0) >> connect 127.0.0.1:10002
[*] Warte auf Antwort......
[*] Neuer Knoten online! Knoten-ID ist 1
(node 0) >>
sshtunnel: Weist den aktuellen Knoten an, sich über einen SSH-Tunnel mit einem anderen untergeordneten Knoten zu verbinden.agent-2: ./stowaway_agent -l 10003
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] Bitte wählen Sie die Authentifizierungsmethode (1. Benutzername&&Passwort / 2. Zertifikat): 1
[*] Bitte geben Sie den Benutzernamen ein: ph4ntom
[*] Bitte geben Sie das Passwort ein: ******
[*] Warte auf Antwort.....
[*] Neuer Knoten online! Knoten-ID ist 2
(node 0) >>
In stark eingeschränkten Netzwerkumgebungen kann der SSH-Tunnel verwendet werden, um den Stowaway-Traffic als SSH-Traffic zu tarnen und so Firewall-Beschränkungen zu umgehen.
upload: Lädt eine Datei auf den aktuellen Knoten hoch.(node 0) >> upload test.7z test.xxx
[*] Datei wird übertragen, bitte warten...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
download: Lädt eine Datei vom aktuellen Knoten herunter.(node 0) >> download test.xxx test.xxxx
[*] Datei wird übertragen, bitte warten...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
forward: Leitet einen Port auf dem Admin an einen entfernten Port weiter.(node 0) >> forward 9000 127.0.0.1:22
[*] Versuche, auf 0.0.0.0:9000 zu lauschen......
[*] Warte auf Antwort......
[*] Forward erfolgreich gestartet!
(node 0) >>
$ ssh 127.0.0.1 -p 9000
Password:
# ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
stopforward: Beendet die Weiterleitung des aktuellen Knotens.(node 0) >> stopforward
[0] Alle
[1] Listening Addr : [::]:9000 , Remote Addr : 127.0.0.1:22 , Active Connections : 1
[*] Möchten Sie Forward wirklich beenden? (yes/no): yes
[*] Bitte wählen Sie einen zum Schließen aus: 1
[*] Schließe......
[*] Forward-Dienst wurde erfolgreich geschlossen!
backward: Leitet einen Port auf dem Agent an den lokalen Port des Admin zurück.(node 0) >> backward 9001 22
[*] Versuche, den Knoten anzuweisen, auf 0.0.0.0:9001 zu lauschen......
[*] Warte auf Antwort......
[*] Backward erfolgreich gestartet!
(node 0) >>
$ ssh 127.0.0.1 -p 9001
Password:
# ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
stopbackward: Beendet die Rückwärts-Weiterleitung des aktuellen Knotens.(node 0) >> stopbackward
[0] Alle
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] Möchten Sie Backward wirklich beenden? (yes/no): yes
[*] Bitte wählen Sie einen zum Schließen aus: 1
[*] Schließe......
[*] Backward-Dienst wurde erfolgreich geschlossen!
shutdown: Weist den aktuellen Knoten an, offline zu gehen.(node 1) >> shutdown
(node 1) >>
[*] Knoten 1 ist offline!
back: Zurück zum Hauptpanel.(node 1) >> back
(admin) >>
exit: Stowaway beenden.(node 1) >> exit
[*] Möchten Sie Stowaway wirklich beenden? (y/n): y
[*] BYE!
ansicon.exe -i aus. Andernfalls kann es auf der Admin-Seite zu Zeichenkodierungsproblemen kommen.UDP ASSOCIATE gemäß RFC1928. Achte bei der Verwendung des SOCKS5-UDP-Proxys (z.B. mit Scannern) darauf, dass das Paket gemäß RFC1928 aufgebaut ist, und behandle Paketverluste eigenständig.
Stowaway ist jetzt Teil der 404 StarLink Initiative
Dank an folgende Meister und Projekte für ihre Hilfe bei der Entwicklung von Stowaway:
-s-l: Der Port, der normalerweise nicht erreichbar ist – also der Port, auf dem der Agent wirklich lauschen und Verbindungen annehmen soll.--report: Der Port, der wiederverwendet werden soll.-s: Der Kommunikationsschlüssel.Nur unter Linux unterstützt; der Agent ändert automatisch die IPTABLES-Regeln, Root-Rechte erforderlich.
Agent-Seite: ./stowaway_agent --report 22 -l 10000 -s 123
Nachdem der Agent gestartet wurde, verwende das Skript reuse.py aus dem script-Verzeichnis.
Setze zuerst den Wert von SECRET (der Wert von SECRET ist der bei Start der Knoten festgelegte Kommunikationsschlüssel).
Führe dann aus: python reuse.py --start --rhost xxx.xxx.xxx.xxx --rport xxx
--rhost: Die Adresse des Agents.--rport: Der wiederzuverwendende Port, in diesem Beispiel 22.Jetzt kann der Admin eine Verbindung herstellen: ./stowaway_admin -c 192.168.0.105:22 -s 123