
Plataforma de post-explotación que automatiza la enumeración, escalada de privilegios, persistencia y operaciones C2 mediante shells reversos/enlazados con soporte multiplataforma para Linux y Windows.
pwncat es una plataforma de post-explotación para objetivos Linux. Comenzó como un envoltorio alrededor de shells básicos bind y reverse y ha crecido desde entonces. Agiliza las operaciones comunes del equipo rojo mientras prepara código desde tu máquina atacante, no desde el objetivo.
pwncat solía soportar solo Linux, pero ha habido mucho trabajo recientemente para soportar múltiples plataformas. Actualmente, hay soporte alpha para objetivos Windows. Consulte la [documentación] más reciente para detalles sobre cómo usar pwncat con un objetivo Windows.
pwncat intercepta la comunicación bruta con un shell remoto y permite al usuario realizar acciones automatizadas en el host remoto, incluyendo enumeración, instalación de implantes e incluso escalada de privilegios.
Después de recibir una conexión, pwncat configurará algunas configuraciones comunes para trabajar con shells remotos.
which)pwncat sabe cómo generar pty's con algunos métodos diferentes y cruzará las referencias de los métodos con los ejecutables previamente enumerados. Después de generar un pty, configurará el terminal de control en modo raw, para que puedas interactuar de manera similar a ssh.
pwncat también sincronizará la configuración del pty remoto (como filas, columnas, variable de entorno TERM) con tu configuración local para asegurar que el shell se comporte correctamente con aplicaciones interactivas como vim o nano.
John Hammond y yo presentamos pwncat en GRIMMCon. Nuestra presentación, que se puede encontrar en YouTube aquí. Este video muestra una versión temprana de la API y la interfaz. ¡Por favor, consulte la documentación para el uso actualizado y la documentación de la API!
pwncat documentation se está desarrollando en Read the Docs. ¡Dirígete allí para la documentación más reciente de uso y desarrollo!
pwncat requiere Python 3.9+ en Linux
pwncat solo depende de un entorno de desarrollo Python funcional ejecutándose en Linux. Para instalar algunos de los paquetes requeridos con pip, probablemente necesitarás el paquete "Python Development" de tu distribución. En sistemas basados en Debian, esto es python-dev. Para Arch, los archivos de desarrollo se envían con el repositorio principal de Python. Para Enterprise Linux, el paquete se llama python-devel.
pwncat se publica en PyPI bajo el nombre pwncat-cs, y se puede instalar con pip de la siguiente manera:
pip install pwncat-cs
Sin embargo, se recomienda instalar pwncat desde un entorno virtual.
python3 -m venv pwncat-env
source pwncat-env/bin/activate
pip install pwncat-cs
Para un entorno de desarrollo, pwncat usa Python Poetry. Puedes clonar el repositorio localmente y usar poetry para configurar un entorno de desarrollo.
# Setup pwncat inside a poetry-managed virtual environment
git clone [email protected]:calebstewart/pwncat.git
cd pwncat
poetry install
# Enter the virtual environment
poetry shell
Debido al conflicto de nombres con pwncat de Cytopia, he decidido renombrar el paquete a pwncat-cs. Esto incluye renombrar el punto de entrada para que no haya conflictos directos con el proyecto de Cytopia. Si estás actualizando desde v0.4.*, el nombre del comando habrá cambiado, y las variantes pcat y pc han sido eliminadas. Consulta las notas de la versión más reciente para más detalles.
El beneficio adicional de este movimiento es que el proyecto ahora está en PyPI para una instalación/actualización más fácil en el futuro.
pwncat ahora admite conexiones desde objetivos Windows a partir de v0.4.0a1. La plataforma Windows utiliza una biblioteca C2 basada en .Net que se carga automáticamente. Los objetivos Windows deben conectarse con un shell cmd.exe o powershell.exe, y pwncat se encargará del resto.
Las bibliotecas que implementan el C2 están implementadas en pwncat-windows-c2. Los DLLs para el C2 se descargarán automáticamente desde la versión objetivo por ti. Si no tienes conectividad a internet en tu máquina objetivo, puedes indicarle a pwncat que prepare previamente los DLLs usando el argumento --download-plugins. Si estás ejecutando una versión de lanzamiento de pwncat, también puedes descargar un tarball de todos los plugins integrados desde la página de lanzamientos.
Los plugins se almacenan por defecto en ~/.local/share/pwncat, sin embargo esto es configurable con la configuración plugin_path. Si descargas el conjunto empaquetado de plugins desde la página de lanzamientos, debes extraerlo en la ruta señalada por plugin_path.
Además de los DLLs principales del C2, otros plugins pueden estar disponibles. Actualmente, los únicos plugins predeterminados proporcionados son el C2 y una implementación de BadPotato. pwncat puede cargar reflectivamente binarios .Net para usarlos como plugins para el C2. Para más información sobre plugins C2 de Windows, consulte la [documentación].
Recientemente, la arquitectura del framework pwncat fue rediseñada para incorporar una estructura genérica de "módulos". Toda la funcionalidad ahora se implementa como módulos. Esto incluye enumeración, persistencia y escalada de privilegios. Interactuar con módulos es similar a la mayoría de las otras plataformas de post-explotación. Puedes utilizar los comandos familiares run, search e info y entrar en contextos de módulos con el comando use. Consulte la documentación para más información.
La instalación en BlackArch es tan simple como:
pacman -Syu pwncat-caleb
Los parámetros de línea de comandos para pwncat intentan ser flexibles y aceptar una variedad de sintaxis de conexión común. Específicamente, intentará aceptar sintaxis común similar a netcat y ssh. Los siguientes son todos válidos:
# Connect to a bind shell
pwncat-cs connect://10.10.10.10:4444
pwncat-cs 10.10.10.10:4444
pwncat-cs 10.10.10.10 4444
# Listen for reverse shell
pwncat-cs bind://0.0.0.0:4444
pwncat-cs 0.0.0.0:4444
pwncat-cs :4444
pwncat-cs -lp 4444
# Connect via ssh
pwncat-cs ssh://user:[email protected]
pwncat-cs [email protected]
pwncat-cs user:[email protected]
pwncat-cs -i id_rsa [email protected]
# SSH w/ non-standard port
pwncat-cs -p 2222 [email protected]
pwncat-cs [email protected]:2222
# Reconnect utilizing installed persistence
# If reconnection fails and no protocol is specified,
# SSH is used as a fallback.
pwncat-cs reconnect://[email protected]
pwncat-cs reconnect://user@c228fc49e515628a0c13bdc4759a12bf
pwncat-cs [email protected]
pwncat-cs c228fc49e515628a0c13bdc4759a12bf
pwncat-cs 10.10.10.10
Por defecto, pwncat asume que la plataforma objetivo es Linux. Para conectarse a un shell reverse o bind de Windows, debes pasar el argumento --platform/-m:
pwncat-cs -m windows 10.10.10.10 4444
pwncat-cs -m windows -lp 4444
Para más información sobre la sintaxis y manejo de argumentos, consulta la ayuda con pwncat-cs --help o visita la [documentación].
El método de instalación recomendado es un entorno virtual de Python. Esto proporciona el uso diario más fácil de pwncat. Sin embargo, ha habido interés en usar pwncat desde una imagen de docker, por lo que he proporcionado un Dockerfile que proporciona una instalación funcional de pwncat. Para construir la imagen usa:
docker build -t pwncat .
Esto construirá la imagen docker de pwncat con la etiqueta "pwncat". El directorio de trabajo dentro del contenedor es /work. El punto de entrada para el contenedor es el binario pwncat. Se puede usar de la siguiente manera:
# Connect to a bind shell at 10.0.0.1:4444
docker run -v "/some/directory":/work -t pwncat 10.0.0.1 4444
En este ejemplo, solo los archivos en /some/directory están expuestos al contenedor. Obviamente, para subir/descargar, el contenedor solo podrá ver los archivos expuestos a través de cualquier directorio montado.
pwncat proporciona dos características principales. En su núcleo, su objetivo es configurar automáticamente un pseudo terminal remoto (pty) que permite la interacción con el host remoto muy similar a una sesión SSH completa. Cuando se opera en un pty, puedes usar características comunes de tu shell remoto, como historial, edición de línea y aplicaciones de terminal gráficas.
La otra mitad de pwncat es un framework que utiliza tu shell remoto para realizar tareas automatizadas de enumeración, persistencia y escalada de privilegios. El prompt local de pwncat proporciona varias características útiles para pruebas de penetración estándar, incluyendo:
pwncat también ofrece la capacidad de revertir estas "modificaciones" remotas automáticamenteEl framework subyacente para interactuar con el host remoto tiene como objetivo abstraer el shell subyacente y el método de conexión tanto como sea posible, permitiendo que los comandos y plugins interactúen sin problemas con el host remoto.
Puedes aprender más sobre cómo interactuar con pwncat y sobre el framework subyacente en la [documentación]. Si tienes una idea para un nuevo método de escalada de privilegios o método de persistencia, por favor echa un vistazo a la documentación de la API específicamente. ¡Las solicitudes de extracción son bienvenidas!
Debido a que pwncat intenta interactuar abstractamente con cualquier shell con dependencias mínimas del sistema remoto, hemos encontrado algunos casos límite. Donde los encontramos, hacemos todo lo posible para tenerlos en cuenta y ocultarlos al usuario. Sin embargo, algunos se han escapado y se han observado en la naturaleza. Cuando esto sucede, pwncat hará todo lo posible para preservar tu terminal, pero puede que te encuentres con alguna salida peculiar o fallos de comandos.
Aunque BSD es un kernel basado en Unix, en la práctica sus herramientas de userland son notablemente diferentes de sus contrapartes de Linux. Debido a esto, muchas de las características automatizadas de pwncat no funcionarán o fallarán por completo cuando se ejecuten contra un objetivo basado en BSD. He intentado capturar todos los errores o casos límite, sin embargo es probable que haya algunos contratiempos que no han sido completamente probados contra BSD. En cualquier caso, el shell estabilizado debería funcionar dentro de un entorno BSD, pero no ofrezco ninguna garantía.
Si encuentro tiempo más adelante, podría intentar estabilizar pwncat en BSD, pero por ahora mi enfoque está en las distribuciones basadas en Linux. Si te gustaría contribuir a que pwncat se comporte mejor en BSD, eres más que bienvenido a contactar o simplemente bifurcar el repositorio. Como siempre, ¡las solicitudes de extracción son bienvenidas!