Business Logic Vulnerabilities Lab 5
Skills
- Low-level logic flaw
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
no valida adecuadamente la entrada del usuario
. Podemos explotar un fallo lógico
en su flujo de compra
para adquirir artículos
por un precio no previsto
. Para resolver
el laboratorio, debemos comprar
una chaqueta de cuero ligera l33t
. Podemos iniciar sesión
en nuestra propia cuenta utilizando las credenciales wiener:peter
Resolución
Al acceder
a la web
vemos esto
Pulsamos sobre My account
y nos logueamos
utilizando las credenciales wiener:peter
Una vez logueados vemos que tenemos 100$ disponibles
para gastar
Pulsamos sobre View details
sobre el artículo Lightweight l33t leather jacket
, pulsamos en Add to cart
y capturamos
la petición
mediante Burpsuite
Enviamos
la petición
al Repeater
, vamos probando el número máximo
de artículos
que podemos añadir
de una vez. En este caso si queremos añadir más de dos cifras no podemos, el máximo
sería 99
Mandamos
esta petición
al Intruder
En la pestaña de Payloads
señalamos el tipo de payload Null payloads
y en Payload settings
seleccionamos Continue indefinitely
En la pestaña Resource pool
debemos hacer que las peticiones se envíen de una en una
para asegurarnos
de que el servidor recibe todas las peticiones
Iniciamos
el ataque
y vamos recargando
la ruta https://0aa5006b048f12c387bb7f2b00ec0003.web-security-academy.net/cart
hasta que veamos que se vuelve negativo el valor de la compra
, una vez hecho eso debemos asignar
un número
de payloads
estimado en Burpsuite
e ir bajando
hasta dar con el número correcto
. Después de hacerlo varias veces he descubierto que mandando 162 peticiones añadiendo una cantidad de 99 productos desde el Intruder el número se torna negativo
. Debemos tener en cuenta que el Intruder envía peticiones desde el 0 hasta el 162 por lo tanto serían 163 peticiones totales
Sin embargo, este no es el primer valor que hace que se torne negativo
, para eso debemos enviar 161 peticiones con una cantidad de 99 desde el Intruder y 1 petición una cantidad de 24 desde el Repeater
El número
se torna negativo
debido a que estamos ante un signed integer
de 32 bits
. Un signed integer
puedes ser tanto negativo
como positivo
, mientras que un unsigned integer
solo puede ser positivo
Esto ocurre porque el rango de valores posibles se divide en dos partes iguales
, un rango de valores negativos de -2,147,483,648 a -1 (usando el primer bit como 1)
y un rango de valores positivos de 0 a 2,147,483,647 (usando el primer bit como 0)
Para poder comprar el producto debemos seguir sumándole números, para ello vamos a mandar 161 peticiones añadiendo una cantidad de 99 de producto desde el Intruder
y 1 petición con una cantidad de 23 artículos desde el Repeater
Eso nos dará como resultado
esta cantidad
Si le sumamos
un artículo más
nos daría un precio de 115.04$
, lo cual no nos interesa
Para poder comprar el artículo debemos enviar 323 peticiones añadiendo una cantidad de 99 artículos desde el Intruder y 1 petición añadiendo una cantidad de 47 artículos desde el Repeater
, esto haría una cantidad total de 324 peticiones añadiendo una cantidad de 99 artículos y 1 petición añadiendo 47 artículos
. Para poder comprar el artículo Lightweight "l33t" Leather Jacket
vamos a añadir 13 artículos
de The lazy dog
para que el precio
sea positivo
Pulsamos sobre Place order
y compramos
todos los artículos