Modifying serialized objects
Laboratorio de Portswigger sobre Insecure Deserialization
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio utiliza un mecanismo de sesión basado en serialización y es vulnerable a una escalada de privilegios como resultado. Para resolver el laboratorio, debemos editar el objeto serializado en la cookie de sesión para explotar esta vulnerabilidad y obtener privilegios de administrador. Luego, debemos eliminar al usuario carlos. Podemos iniciar sesión en nuestra propia cuenta utilizando las credenciales wiener:peter
Guía de insecure deserialization
Antes de completar este laboratorio es recomendable leerse esta guía de insecure deserialization https://justice-reaper.github.io/posts/Insecure-Deserialization-Guide/
Resolución
Al acceder a la web nos sale esto
Pulsamos sobre My account y nos logueamos utilizando las credenciales wiener:peter
Si recargamos la página web y capturamos la petición con Burpsuite veremos esta petición
Vemos que el parámetro session contiene una cadena en base64
Si intentamos acceder a https://0a00005a030ce63981dbf2dc00f30060.web-security-academy.net/admin nos dice que no podemos debido a que no somos administradores
Este es el objeto serializado, el cual tiene dos atributos, username y admin. Cada uno de estos atributos tiene un valor, el valor de username es wiener y el valor de admin es 0
1
O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:0;}
- O:4:”User”
- O:
Indicaque es unobjeto - 4: La
longituddelnombredelobjeto(en este caso “User”) - “User”: El
nombredelobjeto
- O:
- 2
- Indica que el
objetotiene2 atributos
- Indica que el
- {s:8:”username”;s:6:”wiener”;s:5:”admin”;b:0;}
- Los atributos dentro del objeto están representados entre llaves {}
Primer atributo
- s:8:”username”
- s:
Indicaque elvalores unstring - 8: La
longituddelstringes8 caracteres - “username”: El
nombredelatributo
- s:
- s:6:”wiener”
- s:
Indicaque elvalores unstring - 6: La
longituddelstringes6 caracteres - “wiener”: El
valor asignadoalatributo username
- s:
Segundo atributo
- s:5:”admin”
- s:
Indicaque elvalores unstring - 5: La
longituddelstringes5 caracteres - “admin”: El
nombredelatributo
- s:
- b:0
- b:
Indicaque elvalores unbooleano - 0: El
valordelatributo adminesfalse, indicando que el usuario no es un administrador
- b:
Desde Burpsuite cambiamos el valor de admin de 0 a 1
Hacemos una petición a /admin transmitiendo el nuevo objeto modificado y vemos que tenemos acceso al panel administrativo
No copiamos session Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czo1OiJhZG1pbiI7YjoxO30%3d, nos vamos al navegador, pulsamos Ctrl + Shift + i y sustituimos el valor de session por el modificado
Refrescamos la página con F5 y ya podemos eliminar al usuario carlos









