🧤Laboratorio: Explotación de una vulnerabilidad de asignación masiva

Por aqui vemos cosas interesantes:

Hey todo gracias a discover content:

Con base en ello tomaremos en cuenta ambos que obtuvimos de la API:

//Chosen Discount: 
{
  "description": String, // defaults to: null
  "discount_id": String, // defaults to: null
  "percentage": Integer  // defaults to: 0
}
//Chosen Product: 
{
  "product_id": String,
  "name": String,        // defaults to: null
  "quantity": Integer,
  "item_price": Integer  // defaults to: 0
}

Veo que el endpoint POST para comprar la chaqueta dandole a place order, tiene en su request el JSON que analizaba arriba de la doc de la api, asi:

Tiene una estructura muy similar al JSON chosen Product Con base en esto mi pensamiento hacker es, “Le podemos entonces añadir uno de los valores de chosen product a la request?” ¿en este caso cual es el valor que me beneficia? EXACTO: “item_price”, entonces va a quedar así:

{
	"chosen_products":[	
	  {
			"product_id":"1",
			"quantity":1,
			"item_price": Integer //le voy a poner 0
		}
	]
}

Dos cosas pasaron:

  1. No acepta strings.

  2. Hubo un problema por mas que le ponia valores enteros a item_price, me seguía dando que fondos insuficientes:

Asi que me puse a ver los metodos http permitidos con OPTIONS y encontré que realmente solo aceptaba POST Y GET, bien hasta ahí todo bien pero que pasa, en la request GET me devolvió un JSON con todo la estructura tanto de chosen products como de chosen discount así:

{
"chosen_discount":{
	"percentage":0
},
"chosen_products":[
	]
}
//Con esto presente, decidí crear todo y enviarlo junto con discount pero con un percentage de 100 claro :)

Así: cambiando de GET a POST (Claro)

Y obtuvimos:

Efectivamente así solucioné y pude comprar la chaqueta con 100% de descuento je 🙂

Eso es todo, gracias por verme, por leerme, por analizarme, por entenderme, hasta la proxima.

Last updated