
Penelope Manejador de Shell
Penelope es un moderno manejador de shells para pentesters y jugadores de CTF. Proporciona una alternativa más capaz a los oyentes básicos de netcat, añadiendo actualización automática de PTY, gestión de sesiones, registro, transferencias de archivos y módulos auxiliares.
Penelope funciona en sistemas tipo Unix, incluyendo Linux, macOS y FreeBSD, y requiere Python 3.6+.
Penelope está disponible en Kali Linux:
sudo apt update
sudo apt install penelope
Penelope está implementado completamente con la biblioteca estándar de Python, permitiendo ejecutarlo como un script independiente sin dependencias externas:
wget -q https://raw.githubusercontent.com/brightio/penelope/refs/heads/main/penelope.py && python3 penelope.py
Para instalar la última versión upstream directamente desde GitHub:
pipx install git+https://github.com/brightio/penelope
Para una ruta de lanzamiento versionada y más estable, Penelope también está disponible en PyPI:
pipx install penelope-shell-handler
(*) Se puede actualizar manualmente a PTY con el comando upgrade
⚠️ El soporte para Windows es experimental y está en desarrollo activo.
set DisablePayloadHandler True--mcp (HTTP local, autenticado por token), manejando los mismos shells junto a ti

penelope # Escuchando shells inversos en 0.0.0.0:4444
penelope -p 5555 # Escuchando shells inversos en 0.0.0.0:5555
penelope -p 4444,5555 # Escuchando shells inversos en 0.0.0.0:4444 y 0.0.0.0:5555
penelope -i eth0 -p 5555 # Escuchando shells inversos en eth0:5555
penelope -a # Escuchando shells inversos en 0.0.0.0:4444 y mostrando payloads de shell inverso de ejemplo
penelope -c objetivo -p 3333 # Conectarse a un shell bind en objetivo:3333
penelope ssh usuario@objetivo # Obtener un shell inverso desde el objetivo en el puerto local 4444
penelope -p 5555 ssh usuario@objetivo # Obtener un shell inverso desde el objetivo en el puerto local 5555
penelope -i eth0 -p 5555 -- ssh -l usuario -p 2222 objetivo # Obtener un shell inverso desde el objetivo en eth0, puerto local 5555 (usar -- si ssh necesita interruptores)
penelope -s <Archivo/Carpeta> # Compartir un archivo o carpeta vía HTTP

-s)Penelope también se puede usar como un servidor de archivos HTTP rápido.
penelope -s archivo.txt # Servir un solo archivo en 0.0.0.0:8000
penelope -s /ruta/a/directorio # Servir una carpeta completa
penelope -s a.sh b.elf notas.txt # Servir varios elementos a la vez
penelope -s . -p 80 # Servir el directorio actual en el puerto 80
penelope -s secreto.txt -prefix xk9 # Ocultar detrás de un prefijo de URL: /xk9/secreto.txt
penelope -s -u # Modo subida: aceptar PUT/POST en el directorio de trabajo actual
penelope -s -u -ud /tmp/botín # Modo subida, almacenar archivos recibidos en /tmp/botín
Al iniciar, Penelope imprime un enlace listo para usar por interfaz (y una pista de subida
cuando se usa -u), para que puedas copiar y pegar directamente en el shell del objetivo.
Como se muestra en el video a continuación, en solo unos segundos podemos:
https://github.com/brightio/penelope/assets/65655412/7295da32-28e2-4c92-971f-09423eeff178
Algunas notas:
F12 para desacoplar el shell PTY e ir al Menú Principal. Si la actualización no fue posible y terminaste con un shell básico, puedes desacoplarlo con Ctrl+C. Esto también evita la eliminación accidental del shell.interact 1 puedes escribir simplemente i 1.
argumentos posicionales:
args Argumentos para los modos -s/--serve y shell inverso SSH
opciones:
-p, --ports Puertos (separados por comas) para escuchar/conectar/servir, según las opciones -i/-c/-s
(Por defecto: 4444/5555/8000)
¿Shell inverso o Bind?:
-i, --interface Interfaz/IP local para escuchar. (Por defecto: 0.0.0.0)
-c, --connect Host del shell Bind
-j, --jump Puntos finales de salto para shell inverso
Pistas:
-a, --payloads Mostrar payloads de shell inverso de ejemplo para los Oyentes activos
-l, --interfaces Listar interfaces de red disponibles
-h, --help mostrar este mensaje de ayuda y salir
Registro de sesión:
-L, --no-log Deshabilitar archivos de registro de sesión
-T, --no-timestamps Deshabilitar marcas de tiempo en los registros
-CT, --no-colored-timestamps Deshabilitar marcas de tiempo coloreadas en los registros
Varios:
-M, --menu Iniciar en el Menú Principal
-m, --maintain Mantener N sesiones por objetivo
-S, --single-session Aceptar solo la primera sesión creada
-ms, --max-sessions Máximo de sesiones activas por host (por defecto 5, 0 = rechazar todas las nuevas)
-C, --no-attach No adjuntar automáticamente a nuevas sesiones
-U, --no-upgrade Deshabilitar la actualización automática del shell
-H, --keep-history Mantener el historial del shell del objetivo (no establecer HISTFILE=/dev/null)
-O, --oscp-safe Habilitar modo seguro para OSCP
--no-disk Mantener todo el estado en RAM (tmpfs); nada persiste en disco
MCP:
--mcp Habilitar el servidor MCP sobre HTTP local
--mcp-host Host/IP al que vincular (por defecto: 127.0.0.1)
--mcp-port Puerto al que vincular (por defecto: puerto guardado, o un puerto libre aleatorio persistido en ~/.penelope/mcp.json)
--mcp-token Token Bearer (por defecto: token guardado, o auto-generado y persistido)
Servidor de archivos:
-s, --serve Ejecutar modo servidor de archivos HTTP
-prefix, --url-prefix Prefijo de ruta URL
-u, --upload Habilitar subida de archivos (PUT/POST) al servidor
-ud, --upload-dir Directorio para almacenar subidas (por defecto: directorio de trabajo actual)
Depuración:
-N, --no-bins Simular binarios faltantes en el objetivo (separados por comas)
-v, --version Imprimir versión y salir
-d, --debug Habilitar salida de depuración
-dd, --dev-mode Habilitar modo desarrollador
-cu, --check-urls Revisar la salud de las URLs codificadas y salir
Penelope está diseñado para proporcionar una interacción directa y flexible con shells remotos. Ten en cuenta lo siguiente al usarlo:
Secuencias de escape de terminal: Penelope reenvía la salida del terminal desde sistemas remotos directamente a tu emulador de terminal. Los procesos remotos maliciosos pueden usar secuencias de escape de terminal para manipular la pantalla, crear enlaces engañosos o interactuar con funciones como el portapapeles. Esta exposición es inherente a cualquier herramienta que retransmita un shell remoto al terminal local (como SSH, telnet, netcat) y no es específica de Penelope. Utiliza un terminal con configuraciones de seguridad adecuadas al conectarte a sistemas no confiables.
Registros de sesión: Los registros de sesión pueden contener credenciales, tokens, comandos y otra información sensible recibida del objetivo. Almacénalos de forma segura y usa --no-log cuando no se requiera registro.
Conexiones no cifradas: Las conexiones estándar de shell inverso y bind no están cifradas. Evita usarlas en redes no confiables a menos que el tráfico esté protegido por un túnel seguro o VPN.
Servidor MCP (--mcp): Cuando está habilitado, el servidor MCP otorga control total sobre cada sesión activa (ejecución de comandos, transferencia de archivos) a cualquier cliente que posea el token Bearer, el cual se almacena en ~/.penelope/mcp.json (0600). Se vincula a 127.0.0.1 y está autenticado por token. Mantén el token en secreto y evita exponer el servidor en redes no confiables.
⚖️ Aviso de exención de responsabilidad: Penelope está destinado únicamente para pruebas de seguridad autorizadas, fines educativos y de investigación. No lo uses contra sistemas sin permiso explícito.
cat puede parecer corrupto. Filtrar estas secuencias de escape está previsto para que la salida del registro sea más fluida.Las funciones principales de manejo de shell de Penelope no realizan explotación automática, lo que las hace adecuadas para el estilo OSCP. Sin embargo, las reglas del examen pueden cambiar, así que siempre verifica las reglas oficiales actuales de OffSec antes de usar cualquier herramienta durante un examen.
Algunos módulos requieren precaución adicional:
Si deseas evitar violaciones accidentales de las reglas, usa el interruptor -O / --oscp-safe.
Depende del tipo de actualización de shell en uso:
F12Ctrl-D)Ctrl-C)En cualquier caso, la tecla correcta siempre se muestra al adjuntarte a una sesión. Por ejemplo:

Ver peneloperc
Esto generalmente significa que abriste un nuevo shell interactivo, posiblemente bajo un usuario diferente. El agente de Penelope solo rastrea el directorio del shell inicial y mantiene los permisos del usuario de ese primer shell. La mejor solución es hacer cd /tmp antes de abrir un nuevo shell, o, si cambiaste de usuario, genera un nuevo shell inverso como el nuevo usuario.
¡Tus contribuciones son invaluables! Si deseas ayudar, por favor reporta errores, comportamientos inesperados o comparte nuevas ideas. También puedes enviar pull requests, pero evita hacer commits desde IDEs que impongan PEP8 y reestructuren involuntariamente todo el código base.
Penélope fue la esposa de Odiseo y es conocida por su lealtad y paciencia mientras esperaba su regreso. La herramienta lleva su nombre porque fue construida para ser un manejador de shell fiel y estable para flujos de trabajo que van más allá de un oyente básico.
| Característica | Objetivo tipo Unix | Objetivo Windows |
|---|
| Actualización automática de shell | PTY | readline(*) |
| Redimensión de terminal en tiempo real | ✅ | ❌ |
| Registro de actividad del shell | ✅ | ✅ |
| Descargar archivos/carpetas remotos | ✅ | ✅ |
| Subir archivos/carpetas locales/HTTP | ✅ | ✅ |
| Ejecución de scripts locales/HTTP en memoria con descarga de salida en tiempo real | ✅ | ❌ |
| Reenvío de puertos local | ✅ | ❌ |
| Generar shells en múltiples pestañas y/o hosts | ✅ | ❌ |
| Mantener automáticamente N shells activos por host (re-generar al morir) | ✅ | ❌ |