# Enumerating & Retrieving Password Policies

## Enumerating the Password Policy - from Linux - Credentialed

Como se mencionó en la sección anterior, podemos obtener la política de contraseñas del dominio de varias maneras, dependiendo de la configuración del dominio y de si contamos con credenciales de dominio válidas. Con credenciales de dominio válidas, la política de contraseñas también puede obtenerse remotamente mediante herramientas como [CrackMapExec](https://github.com/byt3bl33d3r/CrackMapExec) o `rpcclient`.

```sh
crackmapexec smb <ip> -u <user> -p <pass> --pass-pol
```

## Enumerating the Password Policy - from Linux - SMB NULL Sessions

Sin credenciales, podríamos obtener la política de contraseñas mediante una sesión SMB NULL o un enlace anónimo LDAP. El primero es mediante una sesión SMB NULL. Las sesiones SMB NULL permiten a un atacante no autenticado obtener información del dominio, como una lista completa de usuarios, grupos, equipos, atributos de cuenta de usuario y la política de contraseñas del dominio. Las configuraciones incorrectas de las sesiones SMB NULL suelen deberse a actualizaciones de controladores de dominio heredados, lo que conlleva configuraciones inseguras, que existían por defecto en versiones anteriores de Windows Server.

Al crear un dominio en versiones anteriores de Windows Server, se concedía acceso anónimo a ciertos recursos compartidos, lo que permitía la enumeración del dominio. Una sesión SMB nula se puede enumerar fácilmente. Para la enumeración, podemos usar herramientas como `enum4linux`, `CrackMapExec`, `rpcclient`, etc.

Podemos utilizar [rpcclient](https://www.samba.org/samba/docs/current/man-html/rpcclient.1.html) para verificar un controlador de dominio en busca de acceso a sesión SMB NULL.

Una vez conectado, podemos emitir un comando RPC para `querydominfo`obtener información sobre el dominio y confirmar el acceso a la sesión NULL.

### Using rpcclilent

```sh
rpcclient -U "" -N <ip>-c "querydominfo"
```

También podemos obtener la política de contraseñas. Vemos que es relativamente débil, permitiendo una contraseña mínima de 8 caracteres.

### **Obtaining the Password Policy using rpcclient**

```sh
rpcclient -U "" -N <ip> -c "querydominfo"
```

Probemos esto con [enum4linux](https://labs.portcullis.co.uk/tools/enum4linux) . `enum4linux`Es una herramienta basada en el [conjunto de herramientas Samba](https://www.samba.org/samba/docs/current/man-html/samba.7.html) `nmblookup` , `net`y `rpcclient`que `smbclient`se utiliza para la enumeración de hosts y dominios de Windows. Está preinstalada en muchas distribuciones de pruebas de penetración, incluyendo Parrot Security Linux. A continuación, se muestra un ejemplo de salida que muestra la información que puede proporcionar `enum4linux`. A continuación, se muestran algunas herramientas de enumeración comunes y los puertos que utilizan:

<table><thead><tr><th width="193.5">Tool</th><th>Ports</th></tr></thead><tbody><tr><td>nmblookup</td><td>137/UDP</td></tr><tr><td>nbtstat</td><td>137/UDP</td></tr><tr><td>net</td><td>139/TCP, 135/TCP, TCP and UDP 135 and 49152-65535</td></tr><tr><td>rpcclient</td><td>135/TCP</td></tr><tr><td>smbclient</td><td>445/TCP</td></tr></tbody></table>

### Using enum4linux

```sh
enum4linux -P <ip>
```

La herramienta [enum4linux-ng](https://github.com/cddmp/enum4linux-ng) es una reescritura de `enum4linux`Python, pero ofrece funciones adicionales, como la posibilidad de exportar datos como archivos YAML o JSON, que posteriormente pueden utilizarse para procesarlos o alimentarlos a otras herramientas. También admite salida en color, entre otras funciones.

### Using enum4linux-ng

```sh
enum4linux-ng -P <ip> -oA ilfreight
```

Enum4linux-ng nos proporcionó una salida un poco más clara y una salida JSON y YAML útil usando la `-oA`bandera.

## Enumerating Null Session - from Windows

Es menos común realizar este tipo de ataque de sesión nula desde Windows, pero podríamos usar el comando `net use \\host\ipc$ "" /u:""`para establecer una sesión nula desde una máquina Windows y confirmar si podemos realizar más de este tipo de ataques.

### **Establish a null session from windows**

```sh
C:\htb> net use \\DC01\ipc$ "" /u:""
The command completed successfully.
```

También podemos usar una combinación de nombre de usuario y contraseña para intentar conectarnos. Veamos algunos errores comunes al intentar autenticarse:

### **Error: Account is Disabled**

```sh
C:\htb> net use \\DC01\ipc$ "" /u:guest
System error 1331 has occurred.

This user can't sign in because this account is currently disabled.
```

### **Error: Password is Incorrect**

```sh
C:\htb> net use \\DC01\ipc$ "password" /u:guest
System error 1326 has occurred.

The user name or password is incorrect.
```

### **Error: Account is locked out (Password Policy)**

```sh
C:\htb> net use \\DC01\ipc$ "password" /u:guest
System error 1909 has occurred.

The referenced account is currently locked out and may not be logged on to.
```

## Enumerating the Password Policy - from Linux - LDAP Anonymous Bind

[Los enlaces anónimos de LDAP](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) permiten a atacantes no autenticados obtener información del dominio, como una lista completa de usuarios, grupos, equipos, atributos de cuentas de usuario y la política de contraseñas del dominio. Esta configuración es heredada y, a partir de Windows Server 2003, solo los usuarios autenticados pueden iniciar solicitudes LDAP. Esta configuración aún se observa ocasionalmente, ya que un administrador puede haber tenido que configurar una aplicación específica para permitir enlaces anónimos y haber otorgado más acceso del previsto, otorgando así a los usuarios no autenticados acceso a todos los objetos de AD.

Con un enlace anónimo de LDAP, podemos usar herramientas de enumeración específicas de LDAP, como `windapsearch.py`, `ldapsearch`, `ad-ldapdomaindump.py`, etc., para extraer la política de contraseñas. Con [ldapsearch](https://linux.die.net/man/1/ldapsearch) , puede ser un poco engorroso, pero factible. Un ejemplo de comando para obtener la política de contraseñas es el siguiente:

### Using ldapsearch

```sh
ldapsearch -h <ip> -x -b "<base de dominio>" -s sub "*" | grep -m 1 -B 10 pwdHistoryLength
```

Aquí podemos ver que la longitud mínima de la contraseña es 8, el umbral de bloqueo es 5 y la complejidad de la contraseña está establecida ( `pwdProperties`establecida en `1`).

## Enumerating the Password Policy - from Windows

Si podemos autenticarnos en el dominio desde un host Windows, podemos usar los binarios integrados de Windows, por ejemplo, `net.exe`para recuperar la política de contraseñas. También podemos usar diversas herramientas como PowerView, CrackMapExec adaptado a Windows, SharpMapExec, SharpView, etc.

Usar comandos integrados es útil si accedemos a un sistema Windows y no podemos transferirle herramientas, o si el cliente nos asigna un sistema Windows, pero no tenemos forma de transferirle herramientas. Un ejemplo con el binario net.exe integrado es:

### Using net.exe

```sh
net accounts
```

Aquí podemos obtener la siguiente información:

* Las contraseñas nunca caducan (la edad máxima de la contraseña se establece en Ilimitada)
* La longitud mínima de la contraseña es de 8, por lo que es probable que se utilicen contraseñas débiles.
* El umbral de bloqueo es de 5 contraseñas incorrectas
* Las cuentas permanecieron bloqueadas durante 30 minutos

Esta política de contraseñas es excelente para la pulverización de contraseñas. El mínimo de ocho caracteres permite probar contraseñas débiles comunes como \[nombre del `Welcome1`usuario]. El límite de bloqueo de 5 caracteres permite de 2 a 3 intentos (por seguridad) cada 31 minutos sin riesgo de bloquear ninguna cuenta. Si una cuenta ha sido bloqueada, se desbloqueará automáticamente (sin intervención manual del administrador) después de 30 minutos, pero debemos evitar bloquear `ANY`cuentas a toda costa.

PowerView también es bastante útil para esto:

### Using PowerView

```powershell
import-module .\PowerView.ps1
```

```powershell
Get-DomainPolicy
```

PowerView nos dio el mismo resultado que nuestro `net accounts`comando, solo que en un formato diferente, pero también reveló que la complejidad de la contraseña está habilitada ( `PasswordComplexity=1`).

Al igual que con Linux, disponemos de numerosas herramientas para recuperar la política de contraseñas en un sistema Windows, ya sea nuestro sistema de ataque o uno proporcionado por el cliente. PowerView/SharpView son siempre una buena opción, al igual que CrackMapExec, SharpMapExec y otras. La elección de las herramientas depende del objetivo de la evaluación, las consideraciones de sigilo, cualquier antivirus o EDR instalado y otras posibles restricciones en el host objetivo. Veamos algunos ejemplos.

## Analyzing the Password Policy

Hemos revisado la política de contraseñas de varias maneras. Analicemos la política del dominio INLANEFREIGHT.LOCAL paso a paso.

* La longitud mínima de la contraseña es de 8 (8 es muy común, pero hoy en día, vemos que cada vez más organizaciones exigen una contraseña de 10 a 14 caracteres, lo que puede eliminar algunas opciones de contraseña para nosotros, pero no mitiga por completo el vector de pulverización de contraseñas)
* El umbral de bloqueo de la cuenta es 5 (no es raro ver un umbral inferior, como 3, o incluso ningún umbral de bloqueo establecido)
* La duración del bloqueo es de 30 minutos (puede ser mayor o menor dependiendo de la organización), por lo que si bloqueamos accidentalmente (¡evitemos!) una cuenta, se desbloqueará después de que pase la ventana de 30 minutos.
* Las cuentas se desbloquean automáticamente (en algunas organizaciones, el administrador debe desbloquear la cuenta manualmente). Nunca queremos bloquear cuentas mientras se rocía contraseñas, pero sobre todo queremos evitar bloquear cuentas en una organización donde un administrador tendría que intervenir y desbloquear cientos (o miles) de cuentas manualmente o mediante un script.
* La complejidad de la contraseña está habilitada, lo que significa que un usuario debe elegir una contraseña con 3/4 de los siguientes: una letra mayúscula, una letra minúscula, un número, un carácter especial ( `Password1`o `Welcome1`que satisfaga el requisito de "complejidad" aquí, pero que aún sean contraseñas claramente débiles).

La política de contraseña predeterminada cuando se crea un nuevo dominio es la siguiente, y ha habido muchas organizaciones que nunca cambiaron esta política:

<table data-header-hidden><thead><tr><th width="547.5"></th><th></th></tr></thead><tbody><tr><td>Política</td><td>Valor predeterminado</td></tr><tr><td>Hacer cumplir el historial de contraseñas</td><td>24 días</td></tr><tr><td>Edad máxima de la contraseña</td><td>42 días</td></tr><tr><td>Edad mínima de la contraseña</td><td>1 día</td></tr><tr><td>Longitud mínima de la contraseña</td><td>7</td></tr><tr><td>La contraseña debe cumplir con los requisitos de complejidad</td><td>Activado</td></tr><tr><td>Almacenar contraseñas usando cifrado reversible</td><td>Desactivado</td></tr><tr><td>Duración del bloqueo de la cuenta</td><td>No establecido</td></tr><tr><td>Umbral de bloqueo de cuenta</td><td>0</td></tr><tr><td>Restablecer el contador de bloqueo de cuenta después</td><td>No establecido</td></tr></tbody></table>

## Next steps

Ahora que tenemos la política de contraseñas en la mano, necesitamos crear una lista de usuarios objetivo para nuestro ataque de rociado de contraseñas. Recuerde que, en ocasiones, no podremos obtener la política de contraseñas si realizamos un rociado de contraseñas externo (o si estamos en una evaluación interna y no podemos recuperarla mediante ninguno de los métodos que se muestran aquí). En estos casos, `MUST`extremamos la precaución para no bloquear las cuentas. Siempre podemos solicitar a nuestro cliente su política de contraseñas si el objetivo es una evaluación lo más completa posible. Si solicitar la política no se ajusta a las expectativas de la evaluación o el cliente no desea proporcionarla, deberíamos realizar uno o dos intentos de rociado de contraseñas (independientemente de si somos internos o externos) y esperar más de una hora entre intentos si decidimos intentar dos. Si bien la mayoría de las organizaciones tienen un umbral de bloqueo de 5 intentos de contraseña incorrectos, una duración de bloqueo de 30 minutos y las cuentas se desbloquean automáticamente, no siempre podemos dar por sentado que esto sea normal. He visto muchas organizaciones con un umbral de bloqueo de 3, que requieren la intervención de un administrador para desbloquear las cuentas manualmente.
