> For the complete documentation index, see [llms.txt](https://beafn28.gitbook.io/beafn28/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beafn28.gitbook.io/beafn28/web-security/bscp-cheat-sheet/insecure-deserialization.md).

# Insecure deserialization

## Lab 1: Modificación de objetos serializados

1. La aplicación utiliza una cookie de sesión que contiene un objeto PHP serializado, codificado en Base64 y URL, el cual define atributos de control como el estado administrativo del usuario.
2. Al decodificar el objeto, se observa el atributo admin configurado como b:0. Al modificarlo a b:1 y reenviar la petición, el servidor confía ciegamente en el objeto modificado, otorgando privilegios de administrador.
3. Con acceso al panel de administración, es posible realizar acciones privilegiadas, como eliminar al usuario objetivo (carlos), demostrando cómo una validación deficiente de objetos serializados puede derivar en una escalada de privilegios crítica.

## Lab 2: Modificación de tipos de datos serializados

1. La aplicación almacena la sesión en una cookie que contiene un objeto PHP serializado. Al interceptarla, se identifica un campo access\_token y el nombre de usuario, ambos utilizados para validar la identidad del usuario.
2. Se modifica el tipo de dato de access\_token, cambiándolo de cadena a entero (i:0), y se reemplaza el nombre de usuario por administrator, ajustando correctamente la longitud del valor serializado para mantener la coherencia del objeto.
3. El servidor acepta el objeto manipulado y interpreta la sesión como administrativa, permitiendo el acceso al panel de control y la eliminación del usuario carlos, evidenciando una grave falta de validación de tipos en la deserialización.

## Lab 3: Explotación vía funciones de la aplicación

1. La aplicación almacena en la cookie de sesión un objeto PHP serializado que incluye, entre otros atributos, la ruta del archivo de avatar del usuario (avatar\_link).
2. Aprovechando la funcionalidad legítima de eliminar cuenta, se modifica el valor de avatar\_link para que apunte a /home/carlos/morale.txt, manteniendo la estructura válida del objeto serializado.
3. Al eliminar la cuenta, el servidor confía en el valor proporcionado por el objeto deserializado y borra el archivo indicado, eliminando así morale.txt en lugar del avatar y resolviendo el laboratorio.

## Lab 4: Inyección de objetos arbitrarios en PHP

1. Al analizar el código fuente, se detecta una clase PHP que implementa el método mágico \_\_destruct(), el cual elimina el archivo especificado en el atributo lock\_file\_path cuando el objeto es destruido.
2. Se crea manualmente un objeto PHP serializado en el que lock\_file\_path apunta a /home/carlos/morale.txt. Este objeto se inyecta directamente en la cookie de sesión para forzar su deserialización por el servidor.
3. Al procesarse la petición, el objeto se deserializa y el método \_\_destruct() se ejecuta de forma implícita, provocando el borrado del archivo objetivo y completando el laboratorio.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://beafn28.gitbook.io/beafn28/web-security/bscp-cheat-sheet/insecure-deserialization.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
