🧅Laboratorio: Modificar los tipos de datos en serie

Con base a lo que aprendimos sobre la serialización insegura de objetos basados en la derivación de tipo de datos, podemos entonces proceder a intentar realizar alguna modificación del objeto serializado que está en la cookie de sessión:
Pista:

Como pequeña pista nos dan la peculiaridad de PHP, justo lo que estabamos estudiando, así que con ello en mente vamos a ver la SESSION
Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjY6IndpZW5lciI7czoxMjoiYWNjZXNzX3Rva2VuIjtzOjMyOiJnb2R6c2MycTY2bTBzOWw0bWJ2NXBxZnlmMXlrdTY0ZyI7fQ%3d%3d
Decodificamos la cookie como el anterior Lab. (Decode URL→Decode Base64)
Le metimos un 0 a la cookie en la parte
tokenSession
, devolvió esto:

Encontré el error de porque no me había estado funcionando, basicamente porque si analizamos la estructura de la cookie decodificada:
O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"godzsc2q66m0s9l4mbv5pqfyf1yku64g";}
La key
”s” es la longitud del valor, en este caso si yo le agrego un numero al access_token
para bypassear los controles de acceso como administrador, estoy añadiendo un nuevo elemento el cual es un numero y debo o añadirle s:33
o s:1
porque todo se va a tomar como un entero, una de las dos.
Tal cual como lo dice la pagina de portswigger →

Entonces modifiquemos pues:
O:4:"User":2:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"godzsc2q66m0s9l4mbv5pqfyf1yku64g";}
//Vamos a ponerle primero una longitud de 33 poniendo un 0 delante de todo el access token: y el administrator con la longitud 13
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";s:33:"0godzsc2q66m0s9l4mbv5pqfyf1yku64g";}
//Vamos a ponerle de longitud s:1, por comprobar a ver si la teoría de que se lee el primer caracter y como es numero (vamos a poner el 0 de primero) todo lo demás por consiguiente se vuelve numero entero. y el administrator con la longitud 13
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";s:33:"0godzsc2q66m0s9l4mbv5pqfyf1yku64g";}
//Aqui casí llego a la solución pero, faltaba algo.
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";s:1:"0godzsc2q66m0s9l4mbv5pqfyf1yku64g";}
La primer forma me está tirando un not found, le he estado cambiando el numero del primer valor del access_token pero de igual forma me tira el not found →

Sin embargo quité el directorio de var/www/index.php y recargué para que se fuera al directorio raiz y me devolvió esto:

Según lo que parece: el código parece estar intentando validar que el token actual del usuario coincide con el token esperado almacenado en
$access_tokens
(asociado a ese nombre de usuario). Si no coinciden, se lanza la excepción que indica que el token es inválido para el usuariowiener
.
Encontré algo más válido → entendiendo la estructura del objeto:
Propiedades del objeto
s:8:"username"
s
indica una cadena (string).8
es la longitud del nombre de la propiedadusername
."username"
es el nombre de la propiedad.s:13:"administrator"
es el valor de la propiedadusername
, siendo una cadena de longitud 13 que contiene el valor"administrator"
.
s:12:"access_token"
s
indica nuevamente una cadena (string).12
es la longitud del nombre de la propiedadaccess_token
."access_token"
es el nombre de la propiedad.s:32:"godzsc2q66m0s9l4mbv5pqfyf1yku64g"
es el valor de la propiedadaccess_token
, siendo una cadena de longitud 32 que contiene el token"godzsc2q66m0s9l4mbv5pqfyf1yku64g"
.
S → Es string, ¿entonces que pasa si cambiamos s por un entero, como se representa?
Porque a fin de cuentas realmente nosotros estuvimos haciendo estaba bien sin embargo el token access no se validaba basicamente porque le pasabamos un 0 de primero está bien pero seguía siendo s
:”0-CADENARESTANTE”, s
como muy bien dice el analisis de las propiedades del objeto es string por lo tanto nunca coincidirá, tenía que hacerlo así: i:0
// ASÍ SI LLEGABAMOS A ALGO:
O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}
Ayudita de chatgpt →

Hacemos todo el proceso de codificación base64→urlEncode
y pegamos en la cookie de session y:


Así fue como lo hicimos exitosamente, este laboratorio lo resolví escuchando Las piponas (remix)
Last updated