
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 .