pwncat-cs
TAG -> herramientas | explotación
Last updated
TAG -> herramientas | explotación
Last updated
pwncat-cs
es una herramienta avanzada de post-explotación y manejo de sesiones que permite la creación y manipulación de shells en conexiones remotas. Es una utilidad potente para quienes realizan auditorias de seguridad y pruebas de penetración, pues facilita la ejecución de comandos, subida y descarga de archivos, y escalación de privilegios. También tiene características de persistencia en conexiones, lo cual lo convierte en una herramienta versátil en el análisis de seguridad.
La forma básica de usar pwncat-cs
es escribiendo solo su nombre en la terminal, pero también podríamos ponernos en escucha de una vez de la siguiente manera, la ejecución de pwncat-cs :1234
indica que pwncat-cs
se está utilizando en modo servidor en el puerto 1234
. En este caso, se está configurando para recibir una conexión en una dirección IP en el puerto especificado.
Para salir de una sessions
o back
lo recomendable es hacer Ctrl + d
para que no se muera dicha sessions
.
pwncat-cs
esta escrito en Python, para descargarlo debemos usar un entornoenv
de Python ypip
.Adicional ->
pwncat-cs
:Interfaz interactiva: Proporciona una interfaz CLI
(Command Line Interface) interactiva que facilita el control de las sesiones remotas y la ejecución de comandos.
Escalación de privilegios: Integra un módulo para intentar escalar privilegios automáticamente en la sesión actual (escalate
).
Manejo de sesiones: Soporte para gestionar múltiples sesiones a través de comandos como sessions
y listeners
.
Módulos integrados: Permite cargar y ejecutar módulos personalizados para realizar tareas específicas. Los módulos pueden ser usados para enumerar información, explotar vulnerabilidades, o realizar tareas de limpieza.
Persistencia: Puedes configurar mecanismos de persistencia en sistemas comprometidos para mantener el acceso después de la explotación inicial.
Transferencia de archivos: Comandos como upload
y download
permiten transferir archivos entre el host local y el remoto de forma sencilla.
Aliases personalizados: Ofrece la posibilidad de crear aliases para comandos, facilitando la automatización y personalización de flujos de trabajo.
Lo primero que are es activar el entorno virtual de Python y ejecutar pwncat-cs
sin argumentos, esto nos dará una linea de comandos del mismo pwncat-cs
, el cual ejecutaremos el comando help
, el cual nos mostrara el panel de ayuda.
Podemos apreciar una lista de comandos útiles, veamos algunos de ellos.
Abre un listener en el puerto especificado para que la víctima pueda conectarse.
Ejemplo:
Inicia un listener en el puerto 1234
de la máquina atacante, para conexiones con victimas Linux en este caso, también puede usar -h
para ver mas opciones.
Cuando se abre múltiples
listeners
generalmente es para entornos de Pivoting ya que si solo es para conectarnos una Reverse Shells se suele usar el siguiente comandoEl cual ya se pone en escucha en el puerto
1234
configurado para plataformas Linux.
Podemos ver la lista de listeners
usando esta palabra como comando, abriremos el puerto 123
también como ejemplo.
Para tener una victima debemos inyectar un comando como el siguiente.
Ahora en la terminal de pwncat-cs
veremos lo siguiente.
Vemos que en la parte inferior nos muestra la Session activa, con la IP victima y el puerto de la victima.
En la parte superior nos mostrara la misma información, más el listener que se uso y hora en que se entablo la conexión.
Ahora aremos lo mismo con el otro listener en el puerto 1234
.
Si quisiéramos ver más información de las 2 victimas, podemos usar el siguiente comando:
o
Como podemos ver, nos muestra el ID asociado al listener, el usuario victima que se le inyecto el comando, el Host ID, la plataforma victima en este caso Linux, el tipo de conexión e información de la IP y puerto victima, el *
en la columna ID nos indica en que session estamos, para cambiar de session, vasta con usar el mismo comando y el numero de session al que queremos migrar.
En este caso pasamos de la session 1 a la 0.
También podemos matar una session usando el parámetro --kill
y el número de session.
El listener mantendrá activo el puerto, para recibir futuras Reverse Shells, solo cambiara el ID de la sesion.
Soporta plataformas Windows
Ejemplo: En la siguiente imagen tenemos todos los tipos de sessiones que podemos encontrar en pwncat-cs
.
Ahora bien, si queremos interactuar con la maquina victima, mediante la Reverse Shells, podemos usar el siguiente comando:
En la línea de comando el mismo pwncat-cs
nos dice al principio en paréntesis si estamos en local o remote, luego de ejecutar back
vemos como se nos abre una bash
podemos ejecutar comandos como whoami
, pwd
, id
, etc, al ser una Reverse Shells usando bash
también, se nos exportara sus alias
, aunque hay veces que por ejemplo el Ctrl + l
no funciona, lo recomendable que después de usa back
le agreguemos la variable xterm
a la bash.
De este modo ya podremos hacer Ctrl + l
y Ctrl + c
e interactuar de mejor manera con la terminal, para salir de esta shell sin perderla, usamos la combinación de teclas Ctrl + d
.
Hay que tener en cuenta que no podemos usar Ctrl + d
mientras algo se esta ejecutando.
Ejemplo: Tenemos un sleep
de 30
segundos, al presionar Ctrl + d
no pasara nada hasta terminar ese proceso, cuando termine ese proceso, entonces nos mandara a la línea de comandos de pwncat-cs
, si queremos dejar algo corriendo y salir, debemos aprovecharnos de las tareas en segundo plano usando &
al final del comando, de esta manera podemos dejar herramientas como Chisel o socat que son herramientas esenciales a la hora de hacer Pivoting.
connect
permite conectar con una víctima específica si no se usa listen
.
Ejemplo: Podemos conectarnos vía ssh
, Bind Shells o Forward Shells siempre y cuando sepamos la contraseña del usuario victima en caso de ssh
o tengamos alguna llave privada, la sintaxis es la siguiente.
connect
-> Comando de conexión.
ssh:
-> Protocolo que se va a usar.
//victor
-> Nombre del usuario victima.
:123456*
-> Contraseña del usuario victima.
@172.17.0.4
-> IP del servidor victima.
:22
-> Puerto del servicio al cual nos vamos a conectar.
Aunque no es estrictamente necesario seguir ese patrón, ya que podemos omitir algunas cosas, ejemplo: Por default el protocolo es ssh
, veamos algunos ejemplos:
Podemos comprobar la conexión usando el comando:
Como podemos apreciar en el tipo de conexión muestra que es de tipo ssh.
Hagamos otro ejemplo esta ves de tipo Bind Shells, el comando que debemos inyectar en la maquina victima es el siguiente:
Ahora en la terminal de pwncat-cs
ejecutamos lo siguiente:
Vemos que se nos registra la nueva session, y en la terminal de la victima se vería así:
Podemos usar el comando sessions
y veremos el tipo de conexión (connect
) osea Forward Shells.
Sube un archivo desde la máquina local a la máquina de la víctima.
Ejemplo:
Supongamos que tenemos este archivo:
Este archivo lo tenemos en nuestra maquina local, vamos a hacer una Reverse Shells y subamos este archivo.
Reverse Shells
Subida de archivo
Con esto podemos subir una gran cantidad de archivos, en casa de problemas lo recomendable es comprimir lo que queramos subir al servidor, ademas hay que tener en cuenta que debemos poner en la ruta de destino el nombre del archivo que estamos subiendo -> /destino/en/la/victima/archivo.txt
.
Permite descargar archivos desde la máquina de la víctima a la máquina local.
Ejemplo:
Esto descarga el archivo especificado en la carpeta de trabajo actual de la máquina atacante, vamos a crear un archivo en el servidor.
Descarga del archivo
Esta shell de
pwncat-cs
es capas de auto completar las palabras o nombre de archivos que estén en el servidor o en local.
Ejecuta comandos en la máquina local sin afectar la sesión remota.
Ejemplo:
Esto listará archivos en el directorio actual de la máquina atacante sin interactuar con la máquina víctima.
Ahora bien, si usamos comandos como cd
no funcionara, veamos que pasa:
Si queremos movernos entre directorios, el comando que debemos usar es lcd
.
Tampoco afecta en nada a las sessiones que tengamos, estos comandos son útiles por ejemplo, cuando queremos subir algún archivo y no esta en el directorio donde estamos, nos podemos mover a ese directorio con este comando.
Es un comando que simplemente nos muestra donde estamos, es como la abreviación de hacer local pwd
.
pwncat-cs
tiene varios módulos muy útiles para Escalada de privilegios (post-explotación), este comando nos permite ver la descripción sobre un grupo o un modulo en especifico.
La sintaxis básica es search modulo
, veamos un ejemplo, el grupo más grande de módulos en pwncat-cs
es de enumeración:
Por ultimo tenemos estos 2 módulos:
Podemos leer cada descripción de estos módulos y usarlos adecuadamente para una Escalada de privilegios exitosa.
Pero que pasa si no nos queda claro como usar un módulo, o si un módulo necesita argumentos específicos, para eso tenemos el siguiente comando.
Si tenemos dudas sobre un módulo, podemos usar el comando info
que nos da un mejor panorama del modulo y nos brinda información sobre el modulo o argumentos que necesite, aunque la gran mayoría están configurados correctamente por default.
Ejemplo
Y así podemos hacer con cualquier módulo para obtener la mayor información posible antes de usarlo.
Permite configurar variables de tiempo de ejecución en pwncat-cs
. Por ejemplo, podríamos definir el password de un usuario o también podemos ver las variables globales.
Lista de variables que podemos usar:
Variables globales
Tampoco necesita muchas configuraciones adicionales.
Ejecuta un modulo especifico o que este en uso.
Ejemplo: tenemos 2 sesiones de Reverse Shells, busquemos binarios SUID en una de esas sesiones.
Podemos usar Tab
para auto completar o sugerir un modulo.
Resultado
De este modo podemos enumerar cómodamente el targeted, otros ejemplos:
Podemos tener un modulo definido e ir cambiando de sessiones y solo presionar run
para ejecutar dicho modulo.
Como podemos ver, ahora donde decía local dice el nombre del modulo que queremos usar.
Ahora con solo cambiar de session podemos ejecutar el mismo modulo usando el comando run
.
Otros ejemplos:
Intenta obtener privilegios elevados (root o administrador) en el sistema remoto.
Recomendable ejecutar run enumerate
antes del comando escalate
.
Ejemplo:
pwncat
escaneará métodos de escalación disponibles y aplicará uno, si es posible.
Primero listamos si hay posibles vulnerabilidades a explotar (list
).
Verificamos el usuario de la session, que es victor
.
Nos aprovechamos del binario xdd
que es SUID.
Volvemos a verificar el usuario de la session ahora es root.
Con el comando
leave
podemos retornar al usuario victor, osea el usuario con que empezamos la Reverse Shells.
Si ejecutamos antes run enumerate
veamos como cambia la lista de opciones de escalación de privilegios.
enumerate
Veamos la salida y la basta información que nos brinda el modulo enumerate
El modulo
report
también nos brinda información útil, aunque es más directo e intenta poner información más especifica.
La persistencia en una sesión de pwncat-cs
puede lograrse configurando una Reverse Shells persistente que se reinicie automáticamente o creando tareas que se ejecuten al iniciar el sistema remoto. Aquí está uno de varios métodos comunes para lograr persistencia:
En la .bashrc del usuario debemos agregar lo siguiente:
Luego, para activar el Backdoor actualizamos el .bashrc con el siguiente comando:
Luego de seguir estos pasos, se creara una tarea en el sistema víctima donde nc se pondrá en escucha por el puerto 12345 y cada 30 segundos verificara si este proceso está activo, en caso de no estarlo creará el proceso de nuevo, para conectarnos solo basta con usar el comando connect de pwncat-cs junto con la IP víctima y el puerto 12345.