
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
| 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) | ✅ | ❌ |
(*) 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