XUT_ / COURSES / PENETRATION TESTER

Exploitation - Update Properties

Actualizando las Propiedades de un Objeto

En esta tarea exploraremos un ejemplo práctico en PHP, usando una aplicación simple de compartir notas. Nuestra aplicación permite a los usuarios crear, guardar y compartir notas fácilmente. Los usuarios pueden introducir sus notas en la aplicación que son guardadas para referencias futuras. Además, los usuarios pueden compartir sus notas con otros, facilitando la colaboración y el intercambio de información. La aplicación también incluye funcionalidades basadas en suscripción, asegurando que sólo los usuarios suscritos tengan acceso a ciertas funcionalidades como compartir las notas. Puedes acceder a la web en http://IP/case1.

Exploitation - Update Properties

Vamos a ver cómo se ha construído la aplicación.

Definiendo la Clase Notes

La aplicación tiene una clase Notes, representando una nota en nuestra aplicación. Esta clase tiene tres propiedades privadas: user, role y isSubscribed. También tenemos métodos setter y getter para manipular la propiedad isubscribed.

php
class Notes {

    private $user;
    private $role;
    private $isSubscribed;

    public function __construct($user, $role, $isSubscribed) {
        $this->user = $user;
        $this->role = $role;
        $this->isSubscribed = $isSubscribed;
    }

    public function setIsSubscribed($isSubscribed) {
        $this->isSubscribed = $isSubscribed;
    }

    public function getIsSubscribed() {
        return $this->isSubscribed;
 }
}

Guardando la Información de Usuario en Cookies

Cuando un usuario visita niuestra aplicación web por primera vez, configura una cookie serializada que contiene su información. Esto incluye su nombre de usuario, rol y estado de subscripción (isSubscribed). Si el usuario es un miembro suscripto (isSubscribed = true), se les permite compartir notas.

Exploitation - Update Properties

Explotando la Vulnerabilidad

En este paso ilustraremos cómo un atacante puede explotar la vulnerabilidad modificando la cookie serializada para ganar acceso no autorizado a compartir notas.

  • Serialised cookie: Después de decodear el valor base64 encodeado de la cookie, obtenemos la siguiente representación serializada del objeto Notes.
php
O:5:"Notes":3:{s:4:"user";s:5:"guest";s:4:"role";s:5:"guest";s:12:"isSubscribed";b:0;}
  • O:5:"Notes":3: Esto representa un objeto (O) con la clase Notes, la cual tiene 3 propiedades.
  • s:4:"user";s:5:"guest": Esto indica una string (s) con una longitud de 4 caracteres representando a la propiedad user con el valor "guest".
  • s:4:"role";s:5:"guest": Esto similar al de arriba indica que la propiedad role tiene el valor "guest".
  • s:12:"isSubscribed";b:0: Representa un booleano (b) llamado isSubscribed con el valor falso (0).

Explotando la Vulnerabilidad

El el escenario actual, cuando el usuario intenta compartir una nota, le sale el siguiente pop-up:

Exploitation - Update Properties

Y bien, ¿qué está pasando en el backend? El código PHP del backend valida la cookie entrante, la deserializa, y luego valida si el usuario está o no suscrito. Nuestra tarea principal es bypassear eso.

Supón que un atacante intercepta esta cookie serializada y modifica el valor de la propiedad isSubscribed de falso (0) a verdadero (1). El atacante puede manipular el estado de suscripción sin autorización legítima cambiando el valor booleano en la información serializada.

Exploitation - Update Properties

Después de modificarlo, el atacante vuelve a base64 encodearlo y listo.