Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Stowaway — Strumento proxy multi-hop per penetration tester che consente il routing del traffico attraverso più nodi, tunneling SOCKS5/SSH, port forwarding, shell remota e comunicazione crittografata tra nodi. | Kitploit
Strumenti/GitHubGitHub/ph4ntonn/stowaway
Strumenti di Crittografia/DecrittografiaMovimento LateraleControllo Accesso RetePenetration TestingCommand and ControlRed Teaming
GitHubph4ntonn/stowaway

Stowaway

Strumento proxy multi-hop per penetration tester che consente il routing del traffico attraverso più nodi, tunneling SOCKS5/SSH, port forwarding, shell remota e comunicazione crittografata tra nodi.

Vedi Repository
3.4k4425 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

stowaway.png

Stowaway

GitHub issues GitHub forks GitHub stars GitHub license

English

Stowaway è uno strumento proxy multi-livello sviluppato in Go, progettato specificamente per i penetration tester.

Gli utenti possono utilizzare questo programma per instradare il traffico esterno attraverso più nodi proxy verso la rete interna, bypassando le restrizioni di accesso alla rete, costruendo una rete di nodi ad albero e gestendola facilmente.

Grazie a tutti per le stelle, e benvenuti a segnalare problemi e bug dopo l'uso 😘

Si prega di leggere attentamente le istruzioni e le note alla fine del documento prima di utilizzarlo.

Dichiarazione

Questo progetto è destinato esclusivamente alla ricerca sulla sicurezza informatica e a scopi didattici. È severamente vietato utilizzarlo per scopi illegali. Assicurati di avere l'autorizzazione esplicita del sistema di destinazione prima di eseguire qualsiasi test con questo strumento e di rispettare rigorosamente le leggi e i regolamenti pertinenti del tuo paese/regione. Qualsiasi conseguenza diretta o indiretta derivante dall'uso di questo strumento (incluse ma non limitate a: perdita di dati, danni al sistema, responsabilità legali) è a carico dell'utente. L'autore del progetto non si assume alcuna responsabilità per abusi o responsabilità legali derivanti da tali abusi. L'utilizzo di questo strumento implica che hai letto, compreso e accettato tutti i termini di questa dichiarazione di esclusione di responsabilità.

Caratteristiche

  • Interfaccia di amministrazione più user-friendly, con completamento dei comandi e cronologia
  • Gestione chiara della struttura ad albero dei nodi
  • Visualizzazione dettagliata delle informazioni sui nodi
  • Connessione diretta/inversa tra nodi
  • Riconnessione tra nodi
  • Connessione tramite proxy socks5/http tra nodi
  • Connessione tramite tunnel SSH tra nodi
  • Traffico tra nodi selezionabile tra TCP/HTTP/WS
  • Proxy di traffico socks5 multi-livello, supporto UDP/TCP, IPv4/IPv6
  • Accesso SSH a host remoti tramite nodo
  • Shell remota
  • Caricamento e download di file
  • Port forwarding locale/remoto
  • Riutilizzo delle porte sui nodi
  • Attivazione/disattivazione libera di vari servizi
  • Autenticazione reciproca tra nodi
  • Crittografia del traffico tra nodi con TLS/AES-256-GCM
  • Rispetto a v1.0, la dimensione del file è ridotta del 25%
  • Supporto per varie piattaforme (Linux/Mac/Windows/MIPS/ARM)

Compilazione e demo

  • Usa make per compilare direttamente il programma completo per più piattaforme, oppure consulta il Makefile per compilare un programma specifico
  • Chi non vuole compilare può usare direttamente i programmi compilati nella sezione release
  • Video demo: YouTube

Istruzioni

Ruoli

Stowaway include due ruoli:

  • admin: il controller principale usato dal penetration tester
  • agent: il nodo controllato distribuito dal penetration tester

Definizioni dei termini

  • Nodo: si riferisce a admin || agent
  • Modalità attiva: il nodo corrente si connette attivamente a un altro nodo
  • Modalità passiva: il nodo corrente rimane in ascolto su una porta in attesa che un altro nodo si connetta
  • Upstream: il traffico tra il nodo corrente e il suo nodo padre
  • Downstream: il traffico tra il nodo corrente e tutti i suoi nodi figli

Avvio rapido

I comandi seguenti avviano rapidamente l'istanza più semplice di Stowaway:

  • admin: ./stowaway_admin -l 9999
  • agent: ./stowaway_agent -c <IP_di_stowaway_admin>:9999

Parametri

  • admin
root@kitploit:~
Parametri:
-l Indirizzo di ascolto in modalità passiva [ip]:<porta>
-s Chiave di crittografia della comunicazione tra nodi (admin && agent devono corrispondere)
-c Indirizzo del nodo di destinazione in modalità attiva
--socks5-proxy Indirizzo del server proxy SOCKS5
--socks5-proxyu Nome utente del server proxy SOCKS5 (opzionale)
--socks5-proxyp Password del server proxy SOCKS5 (opzionale)
--http-proxy Indirizzo del server proxy HTTP
--down Protocollo downstream, default: traffico TCP grezzo, opzioni: HTTP/WS
--tls-enable Abilita TLS per la comunicazione tra nodi. Se abilitato, la crittografia AES viene disattivata
--domain Specifica il dominio TLS SNI/WebSocket, se vuoto, default: indirizzo del nodo di destinazione
--heartbeat Abilita i pacchetti heartbeat
  • agent
root@kitploit:~
Parametri:
-l Indirizzo di ascolto in modalità passiva [ip]:<porta>
-s Chiave di crittografia della comunicazione tra nodi
-c Indirizzo del nodo di destinazione in modalità attiva
--socks5-proxy Indirizzo del server proxy SOCKS5
--socks5-proxyu Nome utente del server proxy SOCKS5 (opzionale)
--socks5-proxyp Password del server proxy SOCKS5 (opzionale)
--http-proxy Indirizzo del server proxy HTTP
--reconnect Intervallo di riconnessione in secondi
--rehost Indirizzo IP da riutilizzare per il riutilizzo delle porte
--report Porta da riutilizzare per il riutilizzo delle porte
--up Protocollo upstream, default: traffico TCP grezzo, opzioni: HTTP/WS
--down Protocollo downstream, default: traffico TCP grezzo, opzioni: HTTP/WS
--cs Codifica della shell della piattaforma in esecuzione, default: utf-8, opzione: gbk
--tls-enable Abilita TLS per la comunicazione tra nodi. Se abilitato, la crittografia AES viene disattivata
--domain Specifica il dominio TLS SNI/WebSocket, se vuoto, default: indirizzo del nodo di destinazione

Utilizzo dei parametri

-l

Questo parametro ha lo stesso uso per admin && agent, applicabile solo in modalità passiva

Se non si specifica un indirizzo IP, l'ascolto avviene su 0.0.0.0

  • admin: ./stowaway_admin -l 9999 oppure ./stowaway_admin -l 127.0.0.1:9999

  • agent: ./stowaway_agent -l 9999 oppure ./stowaway_agent -l 127.0.0.1:9999

-s

Questo parametro ha lo stesso uso per admin && agent, applicabile sia in modalità attiva che passiva

Opzionale: se omesso, la comunicazione non sarà crittografata; altrimenti verrà crittografata con la chiave fornita dall'utente

  • admin: ./stowaway_admin -l 9999 -s 123

  • agent: ./stowaway_agent -l 9999 -s 123

-c

Questo parametro ha lo stesso uso per admin && agent, applicabile solo in modalità attiva

Rappresenta l'indirizzo del nodo a cui connettersi

  • admin: ./stowaway_admin -c 127.0.0.1:9999

  • agent: ./stowaway_agent -c 127.0.0.1:9999

--socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy

Questi quattro parametri hanno lo stesso uso per admin && agent, applicabili solo in modalità attiva

--socks5-proxy specifica l'indirizzo del server proxy SOCKS5; --socks5-proxyu e --socks5-proxyp sono opzionali

--http-proxy specifica l'indirizzo del server proxy HTTP, utilizzato come il SOCKS5

Senza nome utente/password:

  • 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

Con nome utente/password:

  • 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

--up/--down

Questi due parametri hanno lo stesso uso per admin && agent, applicabili sia in modalità attiva che passiva

Nota: admin non ha il parametro --up

Opzionali: se omessi, il traffico upstream/downstream sarà TCP grezzo

Per utilizzare traffico HTTP/WS upstream/downstream, impostare questi parametri su http o ws

  • admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws

  • agent: ./stowaway_agent -c 127.0.0.1:9999 --up ws oppure ./stowaway_agent -c 127.0.0.1:9999 --up ws --down ws

Inoltre, due punti da notare:

  1. Quando si imposta il protocollo upstream/downstream di un nodo su TCP/HTTP/WS, il nodo padre/figlio corrispondente deve avere il protocollo downstream/upstream corrispondente, come segue:
  • admin: ./stowaway_admin -c 127.0.0.1:9999 --down ws

  • agent: ./stowaway_agent -l 9999 --up ws

In questo caso, l'agent deve impostare --up su ws, altrimenti si verificherà un errore di rete.

Lo stesso vale tra agent.

Supponiamo che agent-1 stia ascoltando sulla porta 127.0.0.1:10000 in attesa di connessioni figlio, con --down ws

Allora anche agent-2 deve impostare --up su ws, altrimenti errore di rete.

  • agent-2: ./stowaway_agent -c 127.0.0.1:10000 --up ws
  1. Poiché HTTP è un protocollo half-duplex, non è molto adatto alla comunicazione full-duplex di Stowaway. Qui HTTP implementa solo il formato dei messaggi HTTP, non un flusso di lavoro HTTP completo. Puoi comunque usare questo protocollo, ma il traffico tra Stowaway in formato messaggio HTTP non può essere inoltrato tramite nginx. Questa parte di codice e funzionalità è mantenuta per l'uso di HTTP in alcune circostanze speciali e anche come modello per personalizzare il traffico.

Se devi utilizzare reverse proxy come nginx, usa il protocollo WS con TLS.

--reconnect

Questo parametro si applica solo all'agent, e solo in modalità attiva

Opzionale: se non impostato, il nodo non tenterà di riconnettersi dopo che la connessione di rete si interrompe. Se impostato, il nodo tenterà di riconnettersi al nodo padre ogni x (secondi specificati) secondi.

  • admin: ./stowaway_admin -l 9999

  • agent: ./stowaway_agent -c 127.0.0.1:9999 --reconnect 10

Nell'esempio sopra, se la connessione tra agent e admin si interrompe, l'agent tenterà di riconnettersi a admin ogni 10 secondi.

Lo stesso vale tra agent.

Inoltre, --reconnect può essere usato insieme a --socks5-proxy/--socks5-proxyu/--socks5-proxyp/--http-proxy: l'agent tenterà di riconnettersi attraverso il proxy specificato all'avvio.

--rehost/--report

Questi due parametri sono speciali, usati solo sul lato agent. Vedere la sezione sul riutilizzo delle porte di seguito per i dettagli.

--cs

Questo parametro si applica solo all'agent, sia in modalità attiva che passiva

Serve principalmente per risolvere il problema della codifica nel comando 'shell'. Quando l'agent viene eseguito su una piattaforma con codifica console gbk (ad esempio Windows tipicamente) e l'admin su una piattaforma con codifica utf-8, è necessario impostare questo parametro su 'gbk'.

  • Windows: ./stowaway_agent -c 127.0.0.1:9999 -s 123 --cs gbk

--tls-enable

Questo parametro ha lo stesso uso per admin && agent, applicabile sia in modalità attiva che passiva

Impostando questa opzione, il traffico tra nodi viene crittografato con TLS

Esempio:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c localhost:10000 --tls-enable -s 123

Nota: quando questo parametro è abilitato, la crittografia AES viene disattivata per impostazione predefinita; il parametro -s sarà utilizzato solo per l'autenticazione reciproca tra nodi e la funzione di riutilizzo delle porte.

Inoltre, quando questo parametro è abilitato, assicurarsi che tutti i nodi della rete (incluso admin) lo abbiano abilitato.

--domain

Questo parametro ha lo stesso uso per admin && agent, applicabile solo in modalità attiva

Impostando questa opzione, è possibile specificare l'opzione SNI per la negoziazione TLS o l'Host di destinazione per WebSocket

Esempio:

  • admin: ./stowaway_admin -l 10000 --tls-enable -s 123
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:10000 --tls-enable -s 123 --domain xxx.com

--heartbeat

Questo parametro si applica solo all'admin, sia in modalità attiva che passiva

Impostando questa opzione, admin invierà continuamente pacchetti heartbeat al primo nodo, mantenendo la connessione persistente anche quando c'è un reverse proxy in mezzo.

Supponiamo che ci sia un reverse proxy come nginx tra admin e agent, che fa da proxy dalla porta 8080 alla porta 8000. Esempio:

  • admin: ./stowaway_admin -l 8000 --tls-enable -s 123 --down ws --heartbeat
  • agent: ./stowaway_agent -c xxx.xxx.xxx.xxx:8080 --tls-enable -s 123 --domain xxx.com --up ws

Meccanismo di riutilizzo delle porte

Attualmente Stowaway offre il riutilizzo delle porte basato sulle funzionalità SO_REUSEPORT e SO_REUSEADDR, e il riutilizzo basato su IPTABLES.

  • Su Linux, può riutilizzare la maggior parte delle porte dei servizi.
  • Su Windows, non può riutilizzare le porte IIS o RDP; può riutilizzare le porte di MySQL, Apache, ecc.

Modalità di riutilizzo

  • Modalità SO_REUSEPORT e SO_REUSEADDR

    Supponiamo che l'agent utilizzi il riutilizzo per la porta 80.

    In questo caso, l'agent deve impostare i parametri --rehost, --report e -s.

    • --rehost: indirizzo IP da riutilizzare, non può essere 0.0.0.0, di solito è l'indirizzo esterno della scheda di rete.
    • --report: porta da riutilizzare.
    • -s: chiave di comunicazione.

    Supporto principalmente per ambienti Windows e Mac; Linux funziona ma con più limitazioni.

    • admin: ./stowaway_admin -c 192.168.0.105:80 -s 123
    • agent: ./stowaway_agent --report 80 --rehost 192.168.0.105 -s 123
  • Modalità IPTABLES

    Supponiamo che l'agent utilizzi il riutilizzo per la porta 22.

    In questo caso, l'agent deve impostare i parametri -l, --report e -s.

Note

  • Gli esempi sopra mostrano solo connessioni tra admin e agent; le connessioni tra agent e agent sono identiche.

  • Se l'agent viene terminato con ctrl-c o kill, il programma pulirà automaticamente le regole iptables. Tuttavia, se viene ucciso con kill -9, non viene eseguita la pulizia automatica.

    Per evitare che l'agent esca in modo anomalo senza pulire le regole iptables, causando l'inaccessibilità del servizio riutilizzato,

    quando è necessario chiudere, esegui: python reuse.py --stop --rhost xxx.xxx.xxx.xxx --rport xxx

    Questo disattiverà le regole di forward, consentendo l'accesso normale al servizio originale.

  • Se si utilizza la modalità IPTABLES per il riutilizzo delle porte, l'ascolto sarà forzato su 0.0.0.0, non è possibile specificare un IP con il parametro -l.

Come creare una rete multilivello?

Dagli esempi precedenti, abbiamo visto solo admin e un agent.

La rete multilivello è il cuore.

In Stowaway, per creare una rete multilivello è necessario utilizzare i comandi listen, connect, sshtunnel nell'admin.

Facciamo un semplice esempio:

  • admin: ./stowaway_admin -l 9999 -s 123

A questo punto agent-1 è già connesso a admin.

  • agent-1: ./stowaway_agent -c 127.0.0.1:9999 -s 123

Ora l'utente vuole connettere anche agent-2, come segue:

  • agent-2: ./stowaway_agent -l 10000 -s 123

Allora l'utente può, tramite admin, digitare use 0 -> connect <IP di agent-2>:10000 per aggiungerlo alla rete come figlio di agent-1.

Supponiamo ora che l'utente voglia connettere un altro nodo agent-3, ma agent-1 non può raggiungere agent-3.

Allora l'utente può, tramite admin, digitare use 0 -> listen -> selezionare 1.Normal Passive -> inserire 10001 e così far sì che agent-1 sia in ascolto sulla porta 10001 in attesa di connessioni figlio.

Dopo che l'admin ha completato l'operazione, agent-3 viene avviato come segue:

  • agent-3: ./stowaway_agent -c 127.0.0.1:10001 -s 123

In questo modo, agent-3 viene aggiunto come un altro figlio di agent-1.

Per una descrizione dettagliata di listen e sshtunnel, vedere la sezione dei comandi di seguito.

Come riconnettersi?

Stowaway supporta attualmente diverse modalità di riconnessione, riassunte di seguito:

Innanzitutto, quando un nodo padre cade, solo un tipo di nodo terminerà attivamente: quelli che erano stati avviati in modalità attiva e senza riconnessione.

Se è stata impostata la riconnessione, il nodo tenterà di riconnettersi all'intervallo specificato.

Inoltre, tutti i nodi avviati in modalità passiva non termineranno attivamente, ma rimarranno in ascolto sulla porta specificata in base ai parametri di avvio. A questo punto l'utente può ancora utilizzare i comandi connect o sshtunnel per riconnettere questi nodi alla rete.

Note

  1. Se a causa di fluttuazioni di rete o caduta di un nodo intermedio, un ramo si disconnette, quando si tenta di riconnettersi attivamente, è necessario connettersi al nodo testa della catena mancante. Ad esempio: admin, poi node1, node1 si divide in due rami: node1->node2->node3->node4 e node1->node5->node6. Se node2 cade, node3 e node4 non cadranno, ma rimarranno attivi. A questo punto l'utente ha due opzioni per riconnettere node3 e node4: una è, se node1 può raggiungere direttamente node3, l'utente può in qualsiasi momento riconnettere node3 alla rete da node1 usando il comando connect o sshtunnel (nota: anche se node1 può raggiungere anche node4, non connettere direttamente node4, ma connettere il nodo testa della catena mancante (node3->node4), cioè node3). In questo modo, node3 e node4 verranno riconnessi alla rete. L'altra opzione è, se node1 non può raggiungere direttamente node3 (cioè deve passare attraverso node2), allora prima riavvia node2 e connettilo alla rete, poi su node2 usa connect o sshtunnel per connettere node3, aggiungendo così node3 e node4 alla rete.

  2. Quando un nodo cade, tutti i servizi socks, backward e forward associati a quel nodo e ai suoi figli verranno forzatamente interrotti.

Comandi

Nella console admin, l'utente può usare il tasto TAB per completare i comandi e i tasti freccia per la cronologia/spostamento del cursore.

La console admin ha due livelli. Il primo è il pannello principale, con i seguenti comandi:

  • help: mostra le informazioni di aiuto del pannello principale
root@kitploit:~
(admin) >> help
  help                                     		Show help information
  detail                                  		Display connected nodes' detail
  topo                                     		Display nodes' topology
  use        <id>                          		Select the target node you want to use
  exit                                     		Exit Stowaway
  • detail: mostra i dettagli dei nodi online
root@kitploit:~
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • topo: mostra le relazioni padre-figlio dei nodi online
root@kitploit:~
(admin) >> topo
Node[0]'s children ->
Node[1]

Node[1]'s children ->
  • use: usa un agente specifico
root@kitploit:~
(admin) >> use 0
(node 0) >>
  • exit: esce da Stowaway
root@kitploit:~
(admin) >> exit
[*] Do you really want to exit stowaway?(y/n): y
[*] BYE!

Quando l'utente seleziona un agente con il comando use, entra nel pannello del nodo (secondo livello), con i seguenti comandi:

  • help: mostra le informazioni di aiuto del pannello del nodo
root@kitploit:~
(node 0) >> help
  help                                            Show help information
  status                                          Show node status,including socks/forward/backward
  listen                                          Start port listening on current node
  addmemo    <string>                             Add memo for current node
  delmemo                                         Delete memo of current node
  ssh        <ip:port>                            Start SSH through current node
  shell                                           Start an interactive shell on current node
  socks      <lport> [username] [pass]            Start a socks5 server
  stopsocks                                       Shut down socks services
  connect    <ip:port>                            Connect to a new node
  sshtunnel  <ip:sshport> <agent port>            Use sshtunnel to add the node into our topology
  upload     <local filename> <remote filename>   Upload file to current node
  download   <remote filename> <local filename>   Download file from current node
  forward    <lport> <ip:port>                    Forward local port to specific remote ip:port
  stopforward                                     Shut down forward services
  backward    <rport> <lport>                     Backward remote port(agent) to local port(admin)
  stopbackward                                    Shut down backward services
  shutdown                                        Terminate current node
  back                                            Back to parent panel
  exit                                            Exit Stowaway 
  • status: mostra lo stato di socks/forward/backward del nodo corrente
root@kitploit:~
(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: comanda all'agente di ascoltare su una porta e attendere la connessione di un nodo figlio
root@kitploit:~
(node 0) >> listen
[*] MENTION! If you choose IPTables Reuse or SOReuse, you MUST CONFIRM that the node was initially started in the corresponding way!
[*] When you choose IPTables Reuse or SOReuse, the node will use the initial config(when node started) to reuse port!
[*] Please choose the mode(1.Normal passive / 2.IPTables Reuse / 3.SOReuse): 1
[*] Please input the [ip:]<port> : 10001
[*] Waiting for response......
[*] Node is listening on 10001

Nota: listen è un comando speciale. Ha tre modalità:

  1. Normal passive: l'agente ascolta sulla porta di destinazione in modo normale e attende la connessione di un nodo figlio.
  2. IPTables Reuse: l'agente riutilizza una porta con il metodo IPTables Reuse e attende la connessione di un nodo figlio.
  3. SOReuse: l'agente riutilizza una porta con il metodo SOReuse e attende la connessione di un nodo figlio.

La prima modalità è la più comune. Se il nodo padre ascolta in questo modo, il nodo figlio necessita solo di -c <ip del padre>:<porta> per unirsi alla rete.

La seconda e terza modalità sono speciali. Se l'utente sceglie la seconda o la terza, deve assicurarsi che il nodo corrente sia stato avviato a sua volta con il riutilizzo delle porte, altrimenti queste modalità non funzioneranno.

Nella seconda e terza modalità, l'utente non deve inserire alcuna informazione; il nodo utilizzerà automaticamente i parametri con cui è stato avviato per riutilizzare la porta e prepararsi ad accettare connessioni figlio.

Inoltre, listen accetta una sola connessione figlio alla volta. Se sono necessarie più connessioni figlio, eseguire il comando listen più volte.

  • addmemo: aggiunge un memo al nodo corrente
root@kitploit:~
(node 0) >> addmemo test
[*] Memo added!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:  test
  • delmemo: elimina il memo del nodo corrente
root@kitploit:~
(node 0) >> delmemo
[*] Memo deleted!
(node 0) >> exit
(admin) >> detail
Node[0] -> IP: 127.0.0.1:10000  Hostname: ph4ntoms-MBP.lan  User: ph4ntom
Memo:
  • ssh: comanda al nodo di connettersi in SSH a un host di destinazione
root@kitploit:~
(node 0) >> ssh 127.0.0.1:22
[*] Please choose the auth method(1.username&&password / 2.certificate): 1
[*] Please enter the username: ph4ntom
[*] Please enter the password: *****
[*] Waiting for response.....
[*] Connect to target host via ssh successfully!
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:03:56]
$ whoami
ph4ntom
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:04:16]
$

In questa modalità, il tasto TAB è disabilitato.

  • shell: ottiene una shell sul nodo corrente
root@kitploit:~
(node 0) >> shell
[*] Waiting for response.....
[*] Shell is started successfully!

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 questa modalità, il tasto TAB è disabilitato.

  • socks: avvia un servizio SOCKS5 sul nodo corrente
root@kitploit:~
(node 0) >> socks 7777
[*] Trying to listen on 0.0.0.0:7777......
[*] Waiting for response......
[*] Socks start successfully!
(node 0) >>

Nota: la porta 7777 qui non viene aperta sull'agent, ma sull'admin.

Per impostare nome utente e password, modificare il comando in socks 7777 <tuo_nome_utente> <tua_password>.

Per specificare un'interfaccia di ascolto, modificare il comando in socks xxx.xxx.xxx.xxx:7777.

  • stopsocks: ferma il servizio SOCKS5 sul nodo corrente
root@kitploit:~
(node 0) >> stopsocks
Socks Info ---> ListenAddr: 0.0.0.0:7777    Username: <null>    Password: <null>
[*] Do you really want to shut down socks?(yes/no): yes
[*] Closing......
[*] Socks service has been closed successfully!
(node 0) >>
  • connect: comanda al nodo corrente di connettersi a un altro nodo figlio
root@kitploit:~
agent-1: ./stowaway_agent -l 10002
root@kitploit:~
(node 0) >> connect 127.0.0.1:10002
[*] Waiting for response......
[*] New node online! Node id is 1

(node 0) >>
  • sshtunnel: comanda al nodo corrente di connettersi a un altro nodo figlio tramite tunnel SSH
root@kitploit:~
agent-2: ./stowaway_agent -l 10003
root@kitploit:~
(node 0) >> sshtunnel 127.0.0.1:22 10003
[*] Please choose the auth method(1.username&&password / 2.certificate): 1
[*] Please enter the username: ph4ntom
[*] Please enter the password: ******
[*] Waiting for response.....
[*] New node online! Node id is 2

(node 0) >>

In ambienti di rete fortemente limitati, è possibile utilizzare il tunnel SSH per mascherare il traffico di Stowaway come traffico SSH, bypassando così le limitazioni del firewall.

  • upload: carica un file sul nodo corrente
root@kitploit:~
(node 0) >> upload test.7z test.xxx
[*] File transmitting, please wait...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • download: scarica un file dal nodo corrente
root@kitploit:~
(node 0) >> download test.xxx test.xxxx
[*] File transmitting, please wait...
136.07 KiB / 136.07 KiB [-----------------------------------------------------------------------------------] 100.00% ? p/s 0s
  • forward: esegue il forward di una porta locale (admin) su una porta remota
root@kitploit:~
(node 0) >> forward 9000 127.0.0.1:22
[*] Trying to listen on 0.0.0.0:9000......
[*] Waiting for response......
[*] Forward start successfully!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9000
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 👑 [17:19:51]
$
  • stopforward: ferma il servizio di forward sul nodo corrente
root@kitploit:~
(node 0) >> stopforward
[0] All
[1] Listening Addr : [::]:9000 , Remote Addr : 127.0.0.1:22 , Active Connections : 1
[*] Do you really want to shut down forward?(yes/no): yes
[*] Please choose one to close: 1
[*] Closing......
[*] Forward service has been closed successfully!
  • backward: esegue il backward di una porta remota (agent) sulla porta locale (admin)
root@kitploit:~
(node 0) >> backward 9001 22
[*] Trying to ask node to listen on 0.0.0.0:9001......
[*] Waiting for response......
[*] Backward start successfully!
(node 0) >>
root@kitploit:~
$ ssh 127.0.0.1 -p 9001
Password:
 # ph4ntom @ ph4ntoms-MBP in ~ 🌈 [17:22:14]
$
  • stopbackward: ferma il servizio di backward sul nodo corrente
root@kitploit:~
(node 0) >> stopbackward
[0] All
[1] Remote Port : 9001 , Local Port : 22 , Active Connections : 1
[*] Do you really want to shut down backward?(yes/no): yes
[*] Please choose one to close: 1
[*] Closing......
[*] Backward service has been closed successfully!
  • shutdown: comanda al nodo corrente di andare offline
root@kitploit:~
(node 1) >> shutdown
(node 1) >>
[*] Node 1 is offline!
  • back: torna al pannello principale
root@kitploit:~
(node 1) >> back
(admin) >>
  • exit: esce da Stowaway
root@kitploit:~
(node 1) >> exit
[*] Do you really want to exit stowaway?(y/n): y
[*] BYE!

TODO

  • Correggere bug
  • Supporto TLS
  • Supporto per più nodi startnode

Note

  • Questo programma è stato sviluppato nel tempo libero per apprendimento; la struttura del codice potrebbe non essere rigorosa, potrebbero esserci bug: si prega di essere comprensivi.
  • Quando l'admin non è online, nessun nuovo nodo può essere aggiunto.
  • L'admin supporta solo un nodo agent direttamente connesso; gli agent non hanno questa limitazione.
  • Se l'utente utilizza l'admin su Windows, scarica ansicon, oppure qui. Quindi entra nella cartella corrispondente al numero di bit del sistema ed esegui ansicon.exe -i. Altrimenti, l'admin potrebbe avere problemi di visualizzazione dei caratteri.
  • Questo programma supporta solo UDP ASSOCIATE basato sullo standard RFC1928. Quando si utilizza il proxy SOCKS5 UDP, assicurati che il programma utilizzato (ad esempio scanner) costruisca i pacchetti secondo lo standard RFC1928 e gestisca autonomamente la perdita di pacchetti.

Progetto 404 StarLink

Stowaway è ora parte del Progetto 404 StarLink

Ringraziamenti

Un ringraziamento ai seguenti contributori e progetti per l'aiuto durante lo sviluppo di Stowaway:

  • lz520520
  • SignorMercurio
  • MM0x00
  • r0ck3rt
  • Termite
  • Venom
Scarica lo strumento
  • -l: la porta che non può essere normalmente raggiunta, cioè quella che vuoi che l'agent ascolti e accetti le connessioni.
  • --report: porta da riutilizzare.
  • -s: chiave di comunicazione.

Supporto solo per ambienti Linux; l'agent modificherà automaticamente le regole IPTABLES, necessita di privilegi root.

  • agent: ./stowaway_agent --report 22 -l 10000 -s 123

    Dopo che l'agent è stato avviato, usa reuse.py nella directory script.

    Imposta prima il valore di SECRET (il valore della chiave di comunicazione usata all'avvio dei nodi).

    Poi esegui: python reuse.py --start --rhost xxx.xxx.xxx.xxx --rport xxx

    • --rhost: indirizzo dell'agent
    • --rport: porta riutilizzata, in questo esempio 22
  • A questo punto admin può connettersi: ./stowaway_admin -c 192.168.0.105:22 -s 123