
Presentación
Forest es una máquina windows que figura como Domain Controller, estaremos realizando enumeración de Directorio Activo, servicios como RPC, SMB, DNS, ataques a kerberos que ya hemos tocado en una que otras ocasiones, además hacemos uso de unas de mis herramientas de pentesting favoritas BloodHoundAD para la enumeración de entorno de Directorio Activos, excelente para Red&Blue Teamers, ruidosa por los logs que genera, eso si!, abusamos del Account Operator Group y finalmente realizamos un ataque de DCSync al momento de escalar privilegios, haciendo uso de secretsdump.py del poderoso impacket.
Reconocimiento
En la fase de reconocimiento para la identificación de puertos y servicios en dos pasos, hacemos uso de la herramienta de RustScan que nos lista los puertos de manera rápida y que también podemos exportar el output en formato grep a un archivo llamado allports:
rustscan -a 10.10.10.161

Ya luego realizamos un escaneo de todos los puertos -p-, -v para que nos represente el output por pantalla a medida que descubre puertos abiertos, -n para que no aplique resolución DNS y -Pn para que asuma que todos los puertos estan arriba (up).
[*] IP Address: 10.10.10.63
[*] Open ports: 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,4701,49666,49671,49664,49665,49667,49677,49684,49703,49958
Puertos y Servicios
Con el fin de conocer un poco más de los servicios que se están ejecutando y lanzar una serie de script básico de reconocimiento para dichos puertos y servicios.
nmap -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,4701,49666,49671,49664,49665,49667,49677,49684,49703,49958 -sCV -A -oN allservices 10.10.10.161
Nmap scan report for 10.10.10.161
Host is up (0.030s latency).
PORT STATE SERVICE VERSION
53/tcp open domain? Simple DNS Plus
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
88/tcp open kerberos-sec Microsoft Windows Kerberos
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: htb.local, Site: Default-First-Site-Name)
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
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: htb.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
9389/tcp open mc-nmf .NET Message Framing
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=10/14%Time=5DA4BD82%P=x86_64-pc-linux-gnu%r(DNS
SF:VersionBindReqTCP,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: 2h27m32s, deviation: 4h02m30s, median: 7m31s
| 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
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 281.19 seconds
Enum DNS puerto 53
Haciendo uso de la herramienta dig podemos enumerar el servicio DNS, como son: name server, mail server e intento de transferencia de zona, y poder identificar v-host en uso para agregarlo al /etc/hosts pero no hay nada que agregar mas que el nombre y dominio de la maquina forest.htb.local.

Enum SMB puerto 445
Crackmapexec nos identifica el hostname de la maquina, la posible version de windows en uso, en este caso Windows Server 2016 Standard x64, el dominio y certificado smb firmados, que impiden ataques como el SMB relay haciendo uso del Responder, pero que presentaré muy pronto 📝.
Si intentamos conectarnos al servicio de SMB haciendo uso de smbmap a través de un null session para nos reporta Authentication error; por lo que necesitaríamos credenciales para listar y enumerar dicho servicio.
smbmap -H 10.10.10.161 -u "null"
smbclient logra un Anonymous login pero no lista ningun share o workgroup available.
smbclient -L //10.10.10.161 -N
Enum RPC
Haciendo uso de la herramienta rpcclient a través de un null session probamos enumerar usuarios del dominio, para luego proceder a validarlo con kerburte.

podemos crear un users list para aplicar un ataque de kerberos un ataque de tipo AS-REP Roasting.

Kerbrute userenum
Con la herramienta kerbrute podemos validar usuarios mediante kerberos, y nos aplica el AS-REP Roasting solicitando un TGTs (Ticket Granting Ticket) para todos los usuarios.

Obtenemos 19 usuarios válidos del dominio, de los 32 listado a través de rpcclient.
AS-REP Roasting
Este ataque lo realizamos en la máquina Active, en el que se identifica usuarios que tienen la casilla de “Do not require Kerberos preauthentication” habilitada.

identificando al usuario svc-alfresco como un AS-REP Roastuser y crackeando el hash con john, obtenemos una contraseña. Mencionar que haciendo uso de GetNPUsers nos da un hash tipo: 7500 Kerberos 5, etype 23, AS-REQ Pre-Auth según hash wiki a diferencia de kerbrute nos da 7500 Kerberos 5, etype 23, AS-REQ Pre-Auth que no me fue posible crackear.

Validación de usuario mediante SMB y WINRM

Nos logueamos a través de WINRM usando evil-winrm, ya que nos marca Pwn3d
Whoami

En la fase de reconocimiento previo a la escalar privilegios, vemos que nuestro usuario forma parte del grupo account operators: Account Operators
The Account Operators group grants limited account creation privileges to a user. Members of this group can create and modify most types of accounts, including accounts for users, Local groups, and Global groups. Group members can log in locally to domain controllers.
Si contamos con este privilegios podemos como bien expresa crear usuarios y agregarlo al grupo que deseemos, y aqui es donde entra BloodHound para identificar el path para escalar privilegios.
BloodHound
Para resumir el WriteUp, dejo el enlace de configuración de BloodHound con John Hammond y nos trasladamos al momento de subir el archivo .zip.
Lo primero al subir la información recolectada es marcar nuestro usuarios que han sido comprometidos.

si damos click en Análisis podemos listar información, como usuario kerberoastables…

Identificando el path para escalar privilegios en BloodHound
BloodHound utiliza gráficos y se auxilia de un colector llamado SharpHound.ps1 que se encuentra en el mismo directorio. A nuestro fines damo click “Analysis”, hago clic en “Find Shorter Paths to Domain Admin”, ruta más corta para convertinos en Administradores del Dominio y obtengo el siguiente gráfico:

1- Nuestro usuario svc-alfresco es miembro del grupo Service Accounts que a su vez es miembro de Privileged it accounts y miembros de Account Operator que ya habiamos indentificado con el comando whoami /all
2- Como miembro de Account Operators y teneiendo Generic All, sobre el grupo de Exchange Windows permissions, podemos crear un usuario y agregar el mismo a dicho grupo, el cual tiene permisos de WriteDacl sobre el dominio htb.local.

Ya formando parte del grupo Exchange Windows permissions y teniendo el permiso de WriteDacl, podemos ver la info en el mismo BloodHound y el Abuse info,q ue nos explica como abusar de este privilegio, como no amarlo!? 💘

Mencionar que los comandos que presentan el abuse info, forman parte de PowerView.ps1 de PowerSploit in github.
Pues cargamos nuestra credenciales de usuarios y el PowerView.ps1 en memoria, para proceder a ejecutar el comando de abuse info, además de agregar el -TargetIdentity en formato CN de ldap ‘DC=htb,DC=local’ y el -PrincipalIdentity que es el usuario que he creado en este caso loduynht, en lugar de como ejemplifica el Abuse Info, como vemos en la siguiente secuencia de comandos.
3-

Una vez otorgado dicho privilegio Rigts DCSync
Con secretsdump:
impacket-secretsdump htb.local\loduynht@10.10.10.161

Puedes ejecutar un Pass The Hash attack y utilizar psexec.py, aqui también tienes el HASH NTLM del usuario krbtgt para un Golden Ticket Attack.
🖱️by: @DaVinciRoot