Inicio HTB - Validation
Entrada
Cancelar

HTB - Validation

¡Hola! Vamos a resolver de la máquina Validation de dificultad “Fácil” de la plataforma HackTheBox.

Técnicas Vistas:

  • SQLI (Error Based)
  • SQLI to RCE
  • Information Leakage

Preparación Entorno


Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre Antique. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt crearemos cuatro directorios de trabajo nmap, content, exploits y scripts donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.

1
2
3
function mkt(){
    mkdir {nmap,content,exploits,scripts}
}

Reconocimiento


Accedemos al directorio de trabajo nmap e iniciamos nuestra fase de reconocimiento realizando un ping a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl de una traza ICMP.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.11.116
PING 10.10.11.116 (10.10.11.116) 56(84) bytes of data.
64 bytes from 10.10.11.116: icmp_seq=1 ttl=63 time=38.3 ms

--- 10.10.11.116 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 38.334/38.334/38.334/0.000 ms

Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 63 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

1
2
3
4
5
6
7
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.116 -oG allPorts

PORT     STATE SERVICE    REASON
22/tcp   open  ssh        syn-ack ttl 63
80/tcp   open  http       syn-ack ttl 62
4566/tcp open  kwtc       syn-ack ttl 63
8080/tcp open  http-proxy syn-ack ttl 63

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nmap -sCV -p22,80,4566,8080 10.10.11.116 -oN targeted

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 46:3d:6b:cb:a8:19:eb:6a:d0:68:86:94:86:73:e1:72 (ECDSA)
|_  256 70:32:d7:e3:77:c1:4a:cf:47:2a:de:e5:08:7a:f8:7a (ED25519)
80/tcp   open  http    Apache httpd 2.4.48 ((Debian))
|_http-title: Site doesn t have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.48 (Debian)
4566/tcp open  http    nginx
|_http-title: 403 Forbidden
8080/tcp open  http    nginx
|_http-title: 502 Bad Gateway
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Reconocimiento Web


Accedemos al servicio Web y observamos una página de registro. Rellenamos los campos y nos agregan a una lista por países

Procedemos a interceptar petición con BurpSuite. Inyectamos una ' en el campo country y vemos un error en respuesta, ahora sabemos que tenemos SQLI Conditional Error

Probando varios payloads, vemos que con union select logramos listar elementos de la base de datos

Sabemos que la base de datos se llama registration, procedemos a listar tablas de esta BD

Seguimos enumerando columnas de la tabla registration y base de datos registration

Listamos contenido de columnas username y userhash

Los datos mostrados corresponden a usuarios y hashes que hemos creado nosotros haciendo pruebas de inyección por lo que no podemos sacar mucho de aquí. Seguimos a validar si tenemos la capacidad de depositar contenido en una ruta

Paso siguiente tratamos de depositar una instrucción en PHP para que podamos ejecutar comandos

En este punto con la capacidad de RCE ejecutamos onliner para entablar reverse shell. Nos ponemos en escucha en el puerto 443

1
2
3
4
5
6
7
8
❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.40] from (UNKNOWN) [10.10.11.116] 39462
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@validation:/var/www/html$ whoami
whoami
www-data

Escalada Privilegios


Enumerando el contenido de la carpeta /var/www/html/ vemos un archivo config.php y listando su contenido encontramos unas credenciales

1
2
3
4
5
6
7
8
9
10
11
www-data@validation:/var/www/html$ ls
account.php  config.php  css  index.php  js
www-data@validation:/var/www/html$ cat config.php 
<?php
  $servername = "127.0.0.1";
  $username = "uhc";
  $password = "uhc-9qual-global-pw";
  $dbname = "registration";

  $conn = new mysqli($servername, $username, $password, $dbname);
?>

Probamos a ver si hay reutilización de credenciales y logramos acceder a root

1
2
3
4
www-data@validation:/var/www/html$ su root
Password: 
root@validation:/var/www/html# whoami
root

Flags


Tras una búsqueda desde la raíz localizamos las flags en sus respectivos directorios. Con el comando cat nos muestra el contenido.

1
2
3
4
5
#USER
root@validation:/# find / -name user.txt 2>/dev/null
/home/htb/user.txt
root@validation:/# cat /home/htb/user.txt
4e72ed159e5a30d65***************
1
2
3
4
5
#ROOT
root@validation:/# find / -name root.txt 2>/dev/null 
/root/root.txt
root@validation:/# cat /root/root.txt
9044af5fa347efab8***************

Hemos completado la máquina Validation de HackTheBox!! Happy Hacking!!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.