PWNCAT es una plataforma posterior a la explotación para objetivos de Linux . Comenzó como un envoltorio alrededor de un vínculo básico y conchas inversas y ha crecido a partir de ahí. Redacción de las operaciones comunes del equipo rojo mientras organiza el código de su máquina atacante, no del objetivo.
PWNCAT solía admitir Linux, pero recientemente ha habido mucho trabajo para admitir múltiples plataformas. Actualmente, hay soporte alfa para objetivos de Windows. Consulte la última documentación para obtener detalles sobre cómo usar PWNCAT con un objetivo de Windows.
PWNCAT intercepta la comunicación sin procesar con un shell remoto y permite al usuario realizar acciones automatizadas en el host remoto, incluida la enumeración, la instalación del implante e incluso la escalada de privilegios.
Después de recibir una conexión, PWNCAT configurará algunas configuraciones comunes para trabajar con capas remotas.
which ) pwncat sabe cómo generar Pty con algunos métodos diferentes y referirá los métodos con los ejecutables previamente enumerados. Después de generar un PTY, configurará el terminal de control en modo RAW, por lo que puede interactuar de manera similar a ssh .
pwncat también sincronizará la configuración remota de PTY (como filas, columnas, variable de entorno TERM ) con su configuración local para garantizar 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 demuestra una versión temprana de la API y la interfaz. ¡Consulte la documentación para obtener la documentación de uso actualizado y API!
La documentación de PWNCAT se está construyendo en Read the Docs. ¡Dirígete allí para obtener la última documentación de uso y desarrollo!
PWNCAT requiere Python 3.9+ en Linux
pwncat solo depende de un entorno de desarrollo de Python que funcione en Linux. Para instalar algunos de los paquetes requeridos con pip , es probable que necesite el paquete de "Desarrollo de Python" de su distribución. En los sistemas basados en Debian, este 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 es empujado a Pypi bajo el nombre de pwncat-cs , y se puede instalar con pip así:
pip install pwncat-csSin 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 Use Python Poetry. Puede clonar el repositorio localmente y usar poesía 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 el PWNCAT de Cytopia, he decidido cambiar el nombre del paquete a pwncat-cs . Esto incluye cambiar el nombre del punto de entrada para que no haya conflictos directos con el proyecto de Cytopia. Si está actualizando desde v0.4.* , El nombre del comando ahora habrá cambiado, y se han eliminado el pcat y pc Varianst. Vea las notas de versión más recientes para más detalles.
El beneficio adicional de este movimiento es que el proyecto ahora se lleva a PYPI para una instalación/actualización más fácil en el futuro.
pwncat ahora admite conexiones desde los objetivos de Windows que comienzan en v0.4.0a1 . La plataforma Windows utiliza una biblioteca C2 basada en .NET que se carga automáticamente. Los objetivos de Windows deben conectarse con un cmd.exe o powershell.exe shell, y PWNCAT se encargará del resto.
Las bibliotecas que implementan el C2 se implementan en PWNCAT-Windows-C2. Las DLL para el C2 se descargarán automáticamente de la versión dirigida para usted. Si no tiene conectividad a Internet en su máquina de destino, puede decirle a PWNCAT que pre-etapa las DLL utilizando el argumento --download-plugins . Si está ejecutando una versión de lanzamiento de PWNCAT, también puede descargar un tarball de todos los complementos incorporados desde la página de lanzamientos.
Los complementos se almacenan de forma predeterminada en ~/.local/share/pwncat , sin embargo, esto es configurable con la configuración plugin_path . Si descarga el conjunto de complementos empaquetados de la página de lanzamientos, debe extraerlo a la ruta que se apunta por plugin_path .
Además de las DLL C2 principales, otros complementos también pueden estar disponibles. Actualmente, los únicos complementos predeterminados proporcionados son el C2 y una implementación de Badpotato. PWNCAT puede cargar reflexivamente los binarios de .NET para usar complementos para el C2. Para obtener más información sobre los complementos de Windows C2, consulte la documentación.
Recientemente, la arquitectura del marco PWNCAT se rediseñó para incorporar una estructura genérica de "módulo". Toda la funcionalidad ahora se implementa como módulos. Esto incluye la enumeración, la persistencia y la escalada de privilegios. Interactuar con módulos es similar a la mayoría de las otras plataformas posteriores a la explotación. Puede utilizar los comandos run , search e info familiares e ingresar contextos del módulo con el comando use . Consulte la documentación para obtener más información.
La instalación en Blackarch es tan simple como:
pacman -Syu pwncat-calebLos parámetros de línea de comando para PWNCAT intentan ser flexibles y aceptar una variedad de sintaxis de conexión común. Específicamente, intentará aceptar NetCat y SSH comunes como sintaxis. 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 de destino es Linux . Para conectarse a un shell de reverso o byn de Windows, debe pasar el argumento --platform/-m :
pwncat-cs -m windows 10.10.10.10 4444
pwncat-cs -m windows -lp 4444 Para obtener más información sobre la sintaxis y el manejo de argumentos, consulte la información de ayuda con pwncat-cs --help o visite 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 pwncat en funcionamiento. Para construir el uso de la imagen:
docker build -t pwncat . Esto construirá la imagen pwncat Docker 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 así:
# 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 cargar/descargar, el contenedor solo podrá ver los archivos expuestos a través de cualquier directorios montados.
pwncat proporciona dos características principales. En su núcleo, su objetivo es configurar automáticamente un pseudoterminal remoto (PTY) que permite la interacción con el host remoto como una sesión SSH completa. Cuando opera en un PTY, puede usar características comunes de su carcasa remota, como historia, edición de línea y aplicaciones de terminal gráficas.
La otra mitad de pwncat es un marco que utiliza su shell remoto para realizar tareas de escalada de enumeración, persistencia y privilegio automatizadas. El mensaje local pwncat proporciona una serie de características útiles para pruebas de penetración estándar que incluyen:
pwncat también ofrece la capacidad de revertir estas "manipulaciones" remotas automáticamenteEl marco subyacente para interactuar con el host remoto tiene como objetivo abstraer el método subyacente de la cubierta y la conexión tanto como sea posible, lo que permite que los comandos y complementos interactúen sin problemas con el host remoto.
Puede obtener más información sobre la interacción con pwncat y sobre el marco subyacente en la documentación. Si tiene una idea para un nuevo método de escalada de privilegios o método de persistencia, eche un vistazo a la documentación de la API específicamente. ¡Las solicitudes de extracción son bienvenidas!
A Pwncat le gustaría ser una navaja de ejército suizo del equipo rojo. Con suerte, pronto se agregarán más características.
Debido a que pwncat está tratando de interactuar de manera abstracta con cualquier shell con dependencias mínimas del sistema remoto, hay algunos casos de borde que hemos encontrado. Donde los encontramos, hacemos todo lo posible para darles cuenta de ellos y esconderlos del usuario. Sin embargo, algunos se han deslizado a través de las grietas y han sido observados en la naturaleza. Cuando esto sucede, pwncat hará todo lo posible para preservar su terminal, pero puede ser recibido con algunas fallas de salida o comando peculiares.
Si bien BSD es un kernel basado en UNIX, en la práctica, sus herramientas de usuarios son notablemente diferentes de sus homólogos de Linux. Debido a esto, muchas de las características automatizadas de pwncat no funcionarán o fallarán directamente cuando se ejecutarán contra un objetivo basado en BSD. He tratado de atrapar todos los errores o casos de borde, sin embargo, es probable que hay algunos problemas que no se han probado completamente contra BSD. En cualquier caso, el caparazón estabilizado debe funcionar dentro de un entorno BSD, pero no proporciono ninguna garantía.
Si encuentro algún tiempo después en el camino, puedo intentar estabilizar pwncat en BSD, pero por ahora mi enfoque está en las distribuciones basadas en Linux. Si desea contribuir a hacer que pwncat se comporte mejor en BSD, es más bienvenido a comunicarse con el repositorio. Como siempre, ¡las solicitudes de extracción son bienvenidas!