bah HackMyVM (Easy - Linux)
Escaneo de puertos
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>nmap -sCV -p<PORTS> <IP>Info:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 03:18 EDT
Nmap scan report for 192.168.5.32
Host is up (0.0050s latency).
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.18.0
|_http-server-header: nginx/1.18.0
|_http-title: qdPM | Login
3306/tcp open mysql MariaDB 5.5.5-10.5.11
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.5.11-MariaDB-1
| Thread ID: 32
| Capabilities flags: 63486
| Some Capabilities: Support41Auth, SupportsCompression, Speaks41ProtocolOld, FoundRows, DontAllowDatabaseTableColumn, IgnoreSigpipes, LongColumnFlag,
ConnectWithDatabase, InteractiveClient, Speaks41ProtocolNew, SupportsTransactions, SupportsLoadDataLocal, ODBCClient, IgnoreSpaceBeforeParenthesis,
SupportsMultipleResults, SupportsAuthPlugins, SupportsMultipleStatments
| Status: Autocommit
| Salt: L0Ll]l'zVz)VX8N_sFCZ
|_ Auth Plugin Name: mysql_native_password
MAC Address: 08:00:27:70:7F:B6 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.45 secondsVeremos que hay un puerto 80 y un MySQL por lo que primero vamos a ver que encontramos en el puerto 80 ya que parece ser que aloja una pagina web, si entramos veremos una pagina web con un login en el que no tenemos las credenciales, por lo que vamos a realizar un poco de fuzzing a ver que encontramos.
Gobuster
Info:
Vemos que nos muestra muchas cosas interesantes, pero tambien sabemos que esta utilizando una tecnologia que es publica y si todo lo ha dejado por defecto podremos ver las rutas de carpetas desde un repositorio de GitHub que tenga alojado este Software de pagina web.
Si buscamos qdpm.net GitHub en Google veremos el siguiente repositorio:
URL = Repo GitHub qdpm
Si nos fijamos tiene la misma estructura que lo que nos muestra Gobuster por lo que vamos a investigar a ver que nos interesa, en principio estamos en busca de credenciales para el login o la DDBB que esta en el puerto de MySQL.
SI investigamos el repo veremos la siguiente ruta:

Vemos que hay un databases.yml.sample, vamos a probar dicha ruta en la pagina web.
Veremos que efectivamente nos lo esta descargando, por lo que vamos a ver que encontramos dentro:
Veremos que es lo que viene por defecto como en el GitHub, vamos a probar a quitar .sample a ver si tuvieran una real que se esta utilizando.
Veremos que efectivamente nos descarga otro archivo y contiene lo siguiente:
Vemos ya credenciales que pueden ser validas para la conexion de MySQL vamos a probarlas de la siguiente manera.
Escalate user qpmadmin
Info:
Con esto ya estaremos dentro, una vez dentro vamos a listar las DDBBs de MySQL.
Info:
Vamos a listar la de hidden.
Info:
Ahora vamos a listar la de url y users.
Tabla url
Info:
Tabla users
Info:
Vemos varias cosas interesantes, vamos a probar cual de esas urls es la correcta, vamos añadir todas esas urls a nuestro archivo /etc/hosts de esta forma:
Lo guardamos y vamos probando uno por uno a ver cual es el que contiene algo diferente, si probamos con el llamado party.bah.hmv veremos lo siguiente:

Veremos como una especie de login vamos a probar con las credenciales que encontramos para conectarnos por MySQL.
Con esto estaremos dentro:

Ahora vamos a generarnos una reverse shell para poder tener una shell mucho mejor de la que tenemos mediante la pagina web.
Ahora desde la maquina host haremos lo siguiente:
Ahora si enviamos dicho comando desde la pagina web y volvemos a donde tenemos la escucha veremos lo siguiente:
Vemos que ha funcionado, por lo que sanitizaremos la shell.
Sanitización de shell (TTY)
Escalate user rocio
Si recordamos antes, vimos credenciales en la DDBB de MySQL vamos a probarlas con el usuario rocio ya que es el unico que vemos que este en el sistema.
Info:
Vamos hacer lo siguiente:
Metemos como contraseña Ihaveaflower y veremos que estamos dentro.
Info:
Por lo que leeremos la flag del usuario.
user.txt
Escalate Privileges
Vamos a ver que procesos pasan por la maquina con un binario llamado pspy64 el cual nos vamos a pasar a nuestra maquina victima.
Una vez que nos hayamos descargado el binario, nos lo pasaremos con un servidor de python3 desde el host y en la maquina victima con un wget en la carpeta /tmp una vez echo esto, vamos a ejecutarlo.
Info:
Vemos que en esta parte de aqui:
Hace esto de forma desglosada.
-q
Modo silencioso (quiet).
--background=...
Crea un archivo PID para el demonio.
-c /var/lib/shellinabox
Directorio base para configuración.
-p 4200
Expone el servicio en el puerto 4200.
-u shellinabox -g shellinabox
Ejecuta como el usuario y grupo shellinabox.
--disable-ssl
No usa HTTPS (¡peligroso si accesible remotamente!).
--localhost-only
Solo acepta conexiones locales (127.0.0.1).
-s /:LOGIN
Crea un endpoint / que muestra una terminal de login normal.
-s /devel:root:root:/:/tmp/dev
Crea un endpoint /devel que abre una terminal como root en /tmp/dev.
Esta claro que el mas interesante aqui es en el que crea un endpoint como el usuario root, por lo que vamos hacer lo siguiente:
Lo guardamos y nos ponemos a la escucha en la maquina host.
Ahora teniendo todo, para ejecutar en endpoint tendremos que visitar dicho endpoint que se encuentra en /devel.
Ahora si todo ha salido bien, cuando volvamos a donde tenemos la escucha veremos lo siguiente:
Con esto veremos que ha funcionando, por lo que ya seremos root y leeremos la flag de root.
root.txt
Last updated