Forest es una maquina en HTB, basada específicamente en AD. Fue una maquina muy divertida y que tenía distintos puntos de ataque. Sin mas que decir, empecemos.
Enumeración:
65514 closed ports
PORT STATE SERVICE VERSION
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2019-12-21 19:15:29Z)
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)
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
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
49698/tcp open msrpc Microsoft Windows RPC
49717/tcp open msrpc Microsoft Windows RPC
Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results
|_smb2-security-mode: SMB: Couldn't find a NetBIOS name that works for the server. Sorry!`
_smb2-time: ERROR: Script execution failed (use -d to debug)
Luego de recibir los resultados del nmap, encontramos que la maquina está corriendo el dominio htb.local. Decidí luego enumerar el SMB con:
enum4linux -U 10.10.10.161
Entre todas las lineas que recibí, los datos importantes fueron estos usuarios:
Bandera de User:
Metí los datos en users.txt y corrí la herramienta de impacket (https://github.com/SecureAuthCorp/impacket), GetNPUsers, para tratar de agarrar algún ticket.
Efectivamente tengo uno para svc-alfresco. En este punto llamé al buen amigo John para que realizara el resto del trabajo:
Teniendo como resultado la contraseña s3rvice
Luego, con Evilwinrm, me conecté con el usuario y las credenciales obtenidas:
Ya adentro, podemos agarrar la bandera del usuario.
Camino a Root
El camino que yo elegí fue correr bloodhound (https://github.com/fox-it/BloodHound.py) en la maquina. Sin embargo, al no poder subir ningún archivo, tuve que correrlo remoto de la siguiente forma:
Luego de obtener los archivos .json, abrí BloodHound y analicé la situación actual de la maquina:
Lo primero que suelo hacer es seleccionar la opción Transitive Object Controller. Luego de hacerlo, tendremos una visualización más limpia y un despliegue de lo que somos dueños y que podemos cambiar.
Acá noté que Alfresco es dueño del usuario Tree, el cual es miembro del grupo Exchange Windows Permissions y de Group Policy Creator. Acá existen distintas formas de proseguir. En mi caso, decidí cambiarle la contraseña al user de Tree y ver qué tipo de enumeración adicional podía realizar.
Así que, ingresé de nuevo a Evilwinrm con el usuario SVC-Alfresco y le cambié la contraseña al usuario Tree por test@123.
Luego, corrí un secretsdump para ver si ahí había algo:
Y efectivamente se encontraba el hash del usuario Administrator.
OJO: Vean como indica el formato del hash domainuid:rid:lmhash:nthash, ya que puede causarles problemas cuando lo quieran usar.
Probé con John y Hashcat y no tuve suerte. Por lo que decidí usar la técnica Pass-The-Hash
Listo, tenemos control del sistema como Administrator y podemos ir directo a conseguir la bandera.
PROTIP: Existen otras opciones. smbexec, wmi o psexec. Como recomendación, prueben siempre primero con smbexec o wmiexec.
PROTIP 2: Se pueden pasar hashes solo cuando son NTLM 1. Hashes NTLM 2, no se pueden pasar.