Low-level logic flaw writeup

Descripción

This lab doesn’t adequately validate user input. You can exploit a logic flaw in its purchasing workflow to buy items for an unintended price. To solve the lab, buy a «Lightweight l33t leather jacket».

You can log in to your own account using the following credentials: wiener:peter

Low-level logic flaw writeup

Añadiremos el producto al carrito e interceptaremos la petición:

Esta petición envía como parámetro la cantidad de productos ‘quantity=1’. Realizaremos un ataque añadiendo 99 productos varias veces para provocar un bit overflow y conseguir un precio negativo.

Nota: Usaremos 99 porque la aplicación no permite usar un número superior, probablemente para que utilicemos el Intruder.

Llevaremos esta petición al ‘Intruder’ con Ctrl + I o Click derecho -> Send to Intruder. Usaremos la siguiente configuración:

Como debemos de añadir el símbolo del payload, lo pondremos detrás del 99 (sin nada entre las SS). Así podremos elegir el tipo de payload. En este caso usaremos ‘Null payloads’, debido a que no hay que modificar nada de la petición. También seleccionamos la opción de ‘Continue indefinitely’.

Luego en la ‘Resource pool’ usaremos esta configuración:

Debido a que sólo queremos que se envíe una petición a la vez, para controlar cuando se produce el overflow, y queremos ir actualizando la página para detenerlo cuando suceda, por lo que necesitamos un delay. En algún momento del ataque tendremos un número negativo:

Ahora, como no podemos comprar cosas con un precio negativo, calcularemos cuántas peticiones de 99 objetos tenemos que hacer para acercar el número a 0 lo máximo posible. Tomaremos el valor, lo dividiremos entre 1337 y el resultado entre 99. El número resultante lo pondremos en ‘Payloads’ -> ‘Generate’.

Una vez que estemos cerca de 0, añadiremos al carrito otro objeto que cueste menos, para poder llevar el número a uno positivo, pero menor que 100. En mi caso con 11 ‘Caution Sign’ fue suficiente:

Completando así el laboratorio:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *