
Descripción
This lab uses a serialization-based session mechanism and loads the Apache Commons Collections library. Although you don’t have source code access, you can still exploit this lab using pre-built gadget chains.
To solve the lab, use a third-party tool to generate a malicious serialized object containing a remote code execution payload. Then, pass this object into the website to delete the morale.txt
file from Carlos’s home directory.
You can log in to your own account using the following credentials: wiener:peter
Exploiting Java deserialization with Apache Commons writeup
Iniciamos sesión en ‘My account’ con el usuario ‘wiener’ y la contraseña ‘peter’. Capturamos la petición al recargar la página y examinamos la cookie de sesión:

Sabemos que la cookie posee objetos en Java por dos potivos:
- Comienza con ‘rO0ABXNy’.
- Si en el ‘Repeater’ borramos parte de ella y forzamos un error nos saldrá ‘java.io.EOFException’:

Para generar una nueva cookie que borre el archivo usaremos ysoserial en una máquina virtual Linux. Nos la descargaremos del siguiente enlace.
El principal problema que tendremos con esta herramienta es que no funciona a partir de Java 17, puesto que fue creada para Java 1.8. Tendremos entonces 2 opciones:
- Hacer funcionar ysoserial en Java 17 (o superior).
- Instalar Java 1.8 y correr ysoserial en él.
Después de intentar varias veces la primera opción, opté por la segunda.
Cómo instalar Java 1.8 en Debian 10 o superior
Usaremos para ello ‘SDKMAN’:
curl -s "https://get.sdkman.io" | bash
Lo añadiremos al path:
source "$HOME/.sdkman/bin/sdkman-init.sh"
E instalaremos Java 8:
sdk install java 8.0.275.hs-adpt
Formatear la salida de ysoserial
Ahora, si ejecutamos ysoserial, nos dará una salido con saltos de línea, para ello emplearemos el siguiente comando:
java -jar ysoserial-all.jar CommonsCollections4 'rm /home/carlos/morale.txt' | base64 | tr -d '\n'
ysoserial se ejecutará predefinidamente con Java 8, con lo cual nos dará una salida correcta. El resultado nos lo llevaremos a una petición del ‘Repeater’ y allí lo codificaremos como URL con Click derecho -> Convert selection -> URL -> URL-encode all characters:

Al enviar la petición y volver al laboratorio lo habremos completado:
