Soccer - Hack The Box - WriteUp

soccer-logo

Portscan

Nmap scan report for soccer.htb (10.10.11.194)                                                                                                                                                                    
Host is up (0.063s latency).                                                                                                                                                                                      
Not shown: 65532 closed tcp ports (reset)                                                                                                                                                                         
PORT     STATE SERVICE         VERSION                                                                                                                                                                            
22/tcp   open  ssh             OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)                                                                                                                       
| ssh-hostkey:                                                                                                                                                                                                    
|   3072 ad:0d:84:a3:fd:cc:98:a4:78:fe:f9:49:15:da:e1:6d (RSA)                                                                                                                                                    
|   256 df:d6:a3:9f:68:26:9d:fc:7c:6a:0c:29:e9:61:f0:0c (ECDSA)                                                                                                                                                   
|_  256 57:97:56:5d:ef:79:3c:2f:cb:db:35:ff:f1:7c:61:5c (ED25519)                                                                                                                                                 
80/tcp   open  http            nginx 1.18.0 (Ubuntu)                                                                                                                                                              
|_http-title: Soccer - Index                                                                                                                                                                                      
|_http-server-header: nginx/1.18.0 (Ubuntu)                                                                                                                                                                       
9091/tcp open  xmltec-xmlmail?                                                                                                                                                                                    
|......
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Website

La página principal de la web no tiene información relevante y no hay ningún enlace que nos redirija a otra página. Vamos a usar un buscador de directorios como puede ser dirsearch para ver si encontramos algo:

dirsearch-command

El programa ha encontrado un directorio llamado “tiny” que contiene una página de login.

Tiny Exploitation

La apliación web Tiny File Manager es opensource y el código fuente se puede encontrar en GitHub. Gracias a ellos sabemos que por defecto la aplicación viene con dos usuarios, admin y user. Usando las credenciales encontradas en el código fuente conseguimos acceder al panel del control de la aplicación.

User shell

Ya tenemos acceso a la aplicación de gestión de ficheros cuya versión es 2.4.3. Si buscamos exploits para TinyFileManager encontramos que esta versión es vulnerable a un “path transversal” a través de su función de subir ficheros. Dado que tenemos la cuenta de administrador, podemos usar esta webshell para subir el fichero, abrirlo y obtener una shell reversa:

user-shell

Tras usar linpeas para encontrar posibles formas de escalar privilegios, encontramos que existe un subodminio dentro de soccer.htb llamado oc-player.soccer.htb. Tras añadir este nuevo dominio a nuestro fichero /etc/hosts observamos que ahora la página web cuenta con nuevas opciones, como match, login y signup.

Procedemos a crear un usuario y hacer login, y nos encontramos con esta nueva página:

ticket

Esta página comprueba un número de ticket y nos indica si es válido o no. Revisando el código fuente observamos que a través de Websockets realiza consultas a una base de datos. Siguiendo los pasos de este artículo para realizar Blind SQL a WebSockets a través de nodejs, podemos obtener el nombre de la base de datos, sus tablas y la información alojada en ellas. Gracias a esto encontramos el usuario player con el que podemos conectar a través de SSH a la máquina.

db-dump

Navegamos al escritorio y encontramos la primera flag.

Privilege escalation

Buscamos archivos que tengan permisos de SUID con el siguiente comando:

find / -perm /4000 2>/dev/null

Observamos que nos sale “doas” y éste nos permite la ejecución de “dstat” con permisos de root

doas

Dstat es vulnerable y nos permite la elevación de privilegios si pudiesemos ejecutarlo con permisos de root, pero nosotros tenemos que ejecutar dstat a través de doas para tener dicho privilegio.

Lo primero es encontrar los directorios sobre los que trabaja dstat

find / -type d -name dstat 2>/dev/null

/usr/share/doc/dstat
/usr/share/dstat
/usr/local/share/dstat

Usaremos el fichero “/usr/local/share/dstat”

Lo segundo que hay que hacer es crear un script en la ruta anterior que se ejecutará con permisos de root, por ejemplo añadir el bit de SUID a una shell:

import os

os.system('chmod +s /usr/bin/bash')

Ahora ejecutamos el script:

dstat-priv-esc

Si ahora ejecutamos una bash, la shel obtenida tendrá privilegios de root y así conseguimos la segunda flag.