Doc 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-06-01 03:21 EDT
Nmap scan report for 192.168.5.33
Host is up (0.00077s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    nginx 1.18.0
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: nginx/1.18.0
|_http-title: Online Traffic Offense Management System - PHP
MAC Address: 08:00:27:8A:A8:D3 (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 6.94 seconds

Veremos que solo tenemos un puerto 80 que aloja una pagina web, por lo que vamos a meternos dentro a ver que nos encontramos.

Nada mas entrar vemos que no carga muy bien, esto se debe a que requiere de un dominio, el cual si le damos al login directamente nos pide el dominio llamado doc.hmv vamos añadirlo a nuestro archivo hosts.

Lo guardamos y volvemos a cargar la pagina, pero esta vez desde el dominio.

Ahora veremos que si nos carga de forma correcta todo, si nos vamos a login probaremos algunas credenciales por defecto, pero veremos que no nos deja, por lo que vamos a probar con un SQLi super basico a ver si funciona.

Escalate user www-data

Veremos que si nos deja, por lo que vamos a explorar el panel en el que hemos entrado a ver que nos encontramos.

Despues de buscar un rato, si nos vamos al apartado de My Account veremos una foto de perfil en el que podemos subir una imagen, vamos a probar a subir un .php directamente y si lo bloqueara intentamos Bypassearlo.

shell.php

Ahora vamos a darle al boton de subir imagen, seleccionamos el archivo PHP y veremos que funciona aparentemente, ahora nos pondremos antes a la escucha.

Ahora volvemos a la pagina y le damos al boton llamado update, echo esto si volvemos a donde tenemos la escucha veremos lo siguiente:

Vemos que ha funcionado, por lo que vamos a sanitizar la shell.

Sanitización de shell (TTY)

Escalate user bella

Si leemos el archivo de configuracion de la pagina llamado initialize.php veremos lo siguiente:

Info:

Veremos las credenciales del usuario llamado bella vamos a probarlas de la siguiente forma:

Metemos como contraseña be114yTU y vemos que somo dicho usuario, por lo que vamos a leer la flag del usuario.

user.txt

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar el binario doc como el usuario root, por lo que vamos a investigar que hace dicho binario.

Si vemos los strings de dicho binario veremos esto.

Info:

Vemos que esta realizando un:

Vamos a ver que puerto es ese de esta forma:

Info:

Vemos que no lo encontramos, por lo que deducimos que si nosotros ejecutamos dicho binario puede ser que se habra un servidor local desde la carpeta en la que me encuentre, vamos a probar lo siguiente.

Info:

Veremos que se nos despliega el servidor en dicho puerto, pero nos mete en un meterpreter, vamos a salirnos y volveremos a ejecutarlo pero antes recibiendo una segunda shell en otra terminal.

Antes de ejecutarlo nos pondremos a la escucha.

Ahora si lo ejecutamos veremos que obtuvimos una segunda shell, vamos a sanitizarla de nuevo.

Sanitización de shell (TTY)

Info:

Ahora vamos en la primera terminal a ejecutar el doc de nuevo, de esta forma.

Ahora en la segunda terminal vamos a ejecutar el binario socat que ya esta en el sistema.

Ahora en la maquina host en el navegador tendremos que poner lo siguiente para acceder al puerto de la pagina web.

Info:

Veremos que esta funcionando, pilla los scripts que se crean en dichas rutas, por lo que vamos a crear un script .py de esta forma:

root.py

Ahora volvemos a ejecutar el socat y veremos que esta nuestro script llamado root.py de forma correcta, vamos a ejecutarlo pinchando en dicho script.

Pero no nos va a ejecutar nada, simplemente nos mostrara las funciones y todo lo que hace el script, pero si le damos a donde pone /tmp/root.py veremos lo siguiente:

Vemos que esta leyendo el archivo .py por lo que vamos a cambiar esa ruta y vamos a probar con la clave privada de root.

Info:

Veremos que ha funcionado, pero no tenemos SSH por lo que vamos a probar a leer directamente la flag del usuario root.

root.txt

Last updated