CSLP by EduardoDesdes

Cyber Security Learning Path in Spanish ewe

$(whoami) Cheat Sheet View on GitHub

Business logic vulnerabilities - PortSwigger

Todos los laboratorios posteriormente expuestos los puedes encontrar para resolverlos en el siguiente link.

https://portswigger.net/web-security/logic-flaws

Índice

1. Lab: Excessive trust in client-side controls

Esta práctica de laboratorio no valida adecuadamente la entrada del usuario. Puede aprovechar una falla lógica en su flujo de trabajo de compras para comprar artículos por un precio no deseado. Para resolver el laboratorio, compre una "Lightweight l33t leather jacket".

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Ahora lo que haremos será hacer clic es el producto que deseamos comprar.

NOTA: NO SE OLVIDE QUE DEBE INICIAR CON SU CUENTA

Y ahora intercpetaremos el paquete al hacer clic en Add to cart.

Como podemos ver, nos encontramos con un parametro llamado price, entonces nos da la idea de poder cambiar el valor del producto antes de generar la compra.

Luego vamos a la seccion del carrito y le damos clic en Place Order.

Y luego podemos ver que se completó satisfactoriamente el laboratorio.

2. Lab: High-level logic vulnerability

Esta práctica de laboratorio no valida adecuadamente la entrada del usuario. Puede aprovechar una falla lógica en su flujo de trabajo de compras para comprar artículos por un precio no deseado. Para resolver el laboratorio, compre una "Lightweight l33t leather jacket".

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Ahora lo que haremos será hacer clic es el producto que deseamos comprar.

NOTA: NO SE OLVIDE QUE DEBE INICIAR CON SU CUENTA

Y ahora intercpetaremos el paquete al hacer clic en Add to cart.

Como podemos ver, el parametro quantity tiene valor de 1, intentaremos actualizar su valor a -1.

Ahora, lo enviamos el paquete, y revisamos la respuesta.

Como podemos ver, nos va a costar la compra el modico precio de: -1337 (LOL), entonces le damos clic en Place order

,

Con la misma logica, vamos a realizar la siguiente configuracion.

Y como vemos logramos completar el laboratorio.

3. Lab: Low-level logic flaw

Esta práctica de laboratorio no valida adecuadamente la entrada del usuario. Puede aprovechar una falla lógica en su flujo de trabajo de compras para comprar artículos por un precio no deseado. Para resolver el laboratorio, compre una "Lightweight l33t leather jacket".

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Ahora lo que haremos será hacer clic es el producto que deseamos comprar.

NOTA: NO SE OLVIDE QUE DEBE INICIAR CON SU CUENTA

Y ahora intercpetaremos el paquete al hacer clic en Add to cart.

Enviamos el valor -1 en el parametro quantity, pero no nos permite.

Sabemos que un integer esta compuesto por 32 bits. Entonces una variable entera está en el rango de: [ -2147483648 : 2147483647 ].

Como sabemos que el precio del producto es 1337, entonces resolvemos al siguiente ecuacion.

>>> (2147483647*2.0)/133700
32123.913941660434

Entonces, sabemos que, tenemos que reptir 32123 veces el producto, y como maximo solo podemos agregar 99 en una consulta.

>>> 32123.0/99
324.47474747474746

Ahora enviamos el paquete anterior al intruder y seteamos la siguientes configuraciones.

En la parte de la cantidad d payloads especificamos 323, porque el intruder cuenta desde 0.

Y luego de damos en Start Attack.

Ahora vamos al carrito, a ver como quedó los resultados.

Entonces viendo cuandos mas nos falta, hacemos el siguiente calculo.

>>> 6406096/133700
47

Entonces compramos 47 unidades manualmente del producto y tendríamos el siguiente resultado.

Como solo tenemos 100 de balance, no podemos exceder ese dinero, por ello que ya no podemos comprar mas productos de ese tipo. Por ello buscaremos un candidato que nos ayude a alcanzar el numero deceado. Elejiremos el producto Giant Grasshopper cuyo precio es: 71.20, entonces:

>>> 122196.0/7120
17.1623595505618

Entonces agregaremos 17 unidades del articulo Giant Grasshopper. El resultado sería el siguiente:

Entonces como podemos ver, todavia no llevamos a numeros positivos, así que agregamos 1 unidad mas a Giant Grasshopper.

Ahora si le damos clic en Place Order.

4. Lab: Inconsistent handling of exceptional input

Esta práctica de laboratorio no valida adecuadamente la entrada del usuario. Puede aprovechar una falla lógica en el proceso de registro de su cuenta para obtener acceso a la funcionalidad administrativa. Para resolver el laboratorio, acceda al panel de administración y elimine a Carlos

Intentaremos registrarnos usando un correo muy largo, para ver si ocurre algun caso excepcional con respecto al input.

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@acd61f861ec39ef080ab06a901cf0050.web-security-academy.net

Nos da la siguiente respuesta:

Please check your emails for your account registration link

Entonces activamos la cuenta y vamos a la seccion My Account

Como podemos ver, cualquier correo que pongamos llegará al email client sin inportar que no sea el correo especificado ahí.

Ahora nos logeamos con nuestra cuenta creada luego de darle clic al enlace.

Como podemos ver, el correo se trunca ante una logitud. Lo que haremos será obtener la cantidad de caracteres donde se trunca el correo.

>>> len("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@acd61f861ec39ef080ab06a901cf0050.web-security-academy.")
255

Entonces pensaremos en un payload que al cortarse pueda truncarse y obtener el correo que deseamos.

textoo....oooo@dontwannacry.com.acd61f861ec39ef080ab06a901cf0050.web-security-academy.net

Ahora, entramos a un posible directorio llamado admin y nos dice que solo pueden ingresar los usuarios DontWannaCry.

Entonces, calculamos la longiutd del correo @dontwannacry.com y lo que resta lo rellenamos de A.

>>> 255-len("@dontwannacry.com")
238
>>> print "A"*238
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Nuestro payload sería pero debemos agregarle la finalidad .acd61f861ec39ef080ab06a901cf0050.web-security-academy.net.

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@dontwannacry.com.acd61f861ec39ef080ab06a901cf0050.web-security-academy.net

Ahora nos registrmos con el payload como correo.

Y luego de activar la cuenta, ingresamos y vamos a la seccion de My Account.

Y como podemos ver, tenemos disponible el panel del Admin.

Nuestra mision es matar al usuario carlos.

Y logramos solucionar el laboratorio.

5. Lab: Inconsistent security controls

La lógica defectuosa de este laboratorio permite que usuarios arbitrarios accedan a funciones administrativas que solo deberían estar disponibles para los empleados de la empresa. Para resolver el laboratorio, acceda al panel de administración y elimine a Carlos.

Lo que haremos para este laboratorio será registrarnos, verificar el correo y luego logearnos e ingresar a la seccion My account.

Ahora lo que haremos será ir a la seccion de /admin y nos devuelve el siguiente error:

Admin interface only available if logged in as a DontWannaCry user

Entonces lo que haremos será en la seccion My account actualizamos el correo al siguiente correo:

attacker@dontwannacry.com

Y obtendriamos lo siguiente:

Ahora no vamos a la seccion Admin panel y eliminamos al usuario carlos.

Y luego completariamos el laboratorio.

6. Lab: Weak isolation on dual-use endpoint

Este laboratorio hace una suposición errónea sobre el nivel de privilegios del usuario en función de su entrada. Como resultado, puede aprovechar la lógica de sus funciones de administración de cuentas para obtener acceso a cuentas de usuarios arbitrarios. Para solucionar el laboratorio, acceda a la cuenta administrator y elimine a Carlos.

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Ingresamos con las credenciales que nos entregan, y nos dirigimos a la seccion My account, ahi lo que haremos será cambiar la contraseña, interceptamos el paquete y lo enviamos al repeater.

Como podemos ver tenemos varios parametros, entre ellos username el cual lo reemplazaremos por administrator, luego el current-password como no tenemos la clave, eliminaremos el parametro y seteamos una nueva contraseña que será 123.

Y quedaría de la siguiente manera:

Ingresamos con el usuario administrator y la contraseña que especificamos que en nuestro caso es 123.

Y eliminamos el usuario carlos para completar el laboratorio.

7. Lab: Insufficient workflow validation

Este laboratorio hace suposiciones erróneas sobre la secuencia de eventos en el flujo de trabajo de compras. Para resolver el laboratorio, aproveche este defecto para comprar una "Lightweight l33t leather jacket".

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Nos logeamos con las credenciales que nos dá el laboratorio, y luego compramos un item, el mas barato que encontremos para interceptar todos los paquetes y ver algo interesante que podamos encontrar.

Podemos ver, un paquete muy interesante, donde se realiza una validacion y confirmacion de la compra y la llevamos a repeater.

Dropearemos el paquete del proxy, y lo que haremos será cambiar el producto que agregamos por el de Lightweight l33t leather jacket.

Y luego vamos al repeater, donde dejamos nuestro paquete, y lo enviamos para analizar el resultado.

Y como podemos ver, nos generá un texto que nos dice que completamos el laboratorio. Entonces vamos a la pagina principal para verificar que se completó el laboratorio.

8. Lab: Authentication bypass via flawed state machine

Este laboratorio realiza suposiciones erróneas sobre la secuencia de eventos en el proceso de inicio de sesión. Para resolver el laboratorio, aproveche esta falla para evitar la autenticación del laboratorio, acceder a la interfaz de administración y eliminar a Carlos.

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Lo logeamos con las credenciales que nos dan e interceptamos todos los paquetes, podemos ver que uno de los mas interesantes es el siguiente,

Que enviamos algunos de los valores genera un paquete POST, que es el siguiente,

Podemos suponer que este recurso, role-selector sirve para actualizar el rol del usuario en el sitio web luego de realizarse el inicio de sesion, lo que intentaremos será simulas el mismo fujo pero haciendo un drop al momento que nos aparecer la solicitud GET de /role-selector.

Y luego vemos en el sitio web lo siguiente,

Lo cual tiene sentido porque realizamos un drop al request, entonces ahora simplemente accedemos al home del laboratorio y nos topamos con que nuestro rol está como administrador.

Ahora, accedemos al panel de administracion de eliminamos al usuario carlos para completar el laboratorio.

9. Lab: Flawed enforcement of business rules

Este laboratorio tiene una falla lógica en su flujo de trabajo de compras. Para resolver el laboratorio, aproveche este defecto para comprar una "Lightweight l33t leather jacket".

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Al entrar al laboratorio, nos topamos con lo siguiente:

New customers use code at checkout: NEWCUST5

Entonces, ahora bajando, nos encontramos con la siguiente seccion,

Ingresamos un correo cualquierda, para ver que ocurre y nos genera un alert con lo siguiente:

Use coupon SIGNUP30 at checkout!

Entonces luego de logearnos y como tenemos dos cupones, intentaremos comprar el articulo que nos piden, antes ingresando los cupones de descuento.

Como podemos ver, el primer cupon nos da un descuento de 5 dolares, mientras que el segundo nos dá un descuento de mas de 400 dolares. Entonces intentaremos usar de nuevo el segundo codigo para ver si se pueden acomular.

Entonces, nos salta un error de que el cupon ya se aplicó y que no se puede enviar de nuevo, ahora intentaremos con el otro cupon.

Vemos que el primero cupon si permite usar de nuevo, ahora podemos suponer dos cosas que el solo el primer cupon el que permite, o es que se puede enviar los cupones de manera intercalada para de esta manera saltar la “proteccion”, así que intentaremos con el segundo cupón y de ser así lo intentamos hasta que el precio total sea menor que nuestro balance.

Realizamos la compra y completamos el laboratorio.

10. Lab: Infinite money logic flaw

Este laboratorio tiene una falla lógica en su flujo de trabajo de compras. Para resolver el laboratorio, aproveche este defecto para comprar una "Lightweight l33t leather jacket".

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

En primer lugar nos suscribimos al boletín para que nos dé el codigo de descuento el cual es:

Use coupon SIGNUP30 at checkout!

Luego abrimos el burpsuite interceptando en segundo plano los paquetes, y realizamos los siguientes pasos:

Luego de realizar toda la tarea, vamos a configurar la macro, para ello seguiremos los siguientes pasos.

Nos saldrá una nueva ventana escribimos una descripcion y luego en Rule Actions le damos clic en Add y luego en Run a macro. En la nueva ventana le damos clic en add, y nos saldrá el visualizador de paquetes aquí seleccionamos los siguiente paquetes y le damos en OK.

Luego vamos al 5to paquete, para ver cual es el parametro de la gift card, y vemos que es gift-card.

Entonces ahora vamos al paquete 4, y configuramos lo siguiente haciendo clic en configure item y en Add.

Luego le damos en OK y ahora seleccionamos el 5to paquete, y luego clic en Configure item, vamos a donde dice gift-card y seleccionamos la opcion Derive from prior response y elejimos a la derecha Response 4.

Luego OK a todo hasta llegar a la ventana de Session handling rule editor, y seleccionamos Scope con la siguiente configuracion:

Luego seleccionamos el paquete de GET del http history y lo enviamos al intruder.

Luego ahí hacemos clic en Clear $, y luego la siguiente cofiguracion.

Luego lo que haremos será obtener los montos por request, por ello iremos a la seccion de options y realizaremos la siguiente configuracion:

Y luego de toda esa configuracion podemos darle en Start attack y ver como se realizan los envios hasta llegar al monto necesario para comprar el articulo.

Revisamos si tenemos el saldo que nos devuelve el burpsutie.

Luego ya teniendo el dinero necesario, compramos el articulo y completamos el laboratorio.

11. Lab: Authentication bypass via encryption oracle

Este laboratorio contiene una falla lógica que expone un oráculo de cifrado a los usuarios. Para resolver el laboratorio, aproveche esta falla para obtener acceso al panel de administración y eliminar a Carlos.

Puede acceder a su propia cuenta con las siguientes credenciales: wiener:peter

Empezaremos logeandonos y activando la casilla de Stay logged in. Luego enviamos un comentario con el correo invalido y vemos lo siguiente.

Nos muestra este error, y podemos ver en los paquetes, que existe una nueva cookie que se ah generado.

La cual se llama notification y podemos ver en el siguiente paquete, que se envia en la cookie e imprime el texto.

Así que enviaremos el GET al repeater, y en notification en vez de ese mensaje colocaremos la cookie de stay-logger-in y veremos cual es la respuesta que nos dá:

Entonces nuestra cookie de stay-logger-in contiene USUARIO:TIME , siendo TIME el tiempo de expiracion de la cookie. Ahora intentaremos enviar por email el siguiente payload.

administrator:1612462627960 

Y nos devolverá un texto cifrado.

Ahora, enviamos al desencriptador de la consulta anterior, para ver si nos devuelve el texto plano.

Funciona! Pero podemos ver que hay un problema, la cookie que enviariamos a stay-logger-in tiene un texto adelante que no nos sirve el cual es, **Invalid email address: **, entonces calculamos su longitud la cual es,

>>> len("Invalid email address: ")
23

Entonces enviamos el texto cifrado al decoder de burp. Y hacemos las decodificaciones de HTML y BASE64.

Seleccionamos desde el bytes 24 para adelante y le damos encode base64.

Y lo enviamos al repeater para decifrarlo.

Pero nos dice que el texto cifrado debe ser multiplo de 16, (al parecer se está realizando un cifrado por bloques), Así que lo que haremos será en nuestro payload agregarle una cantidad para que al recortarle esa cantidad en el texto cifrado siga siendo multiplo de 16. Por ello sabemos que queremos cortar todo el texto anterior a administrator, por ello los 23 caracteres no nos es suficiente, y como necesitamos un multiplo de 16 entonces:

>>> (16*2) - len("Invalid email address: ")
9
>>> 'A'*9
'AAAAAAAAA'

Entonces nuestro payload será

AAAAAAAAAadministrator:1612462627960 

Enviando el payload en el parametro email para cifrarlo:

Y ahora, lo que haremos será llevar el texto cifrado al decoder, y realizamos las decodificaciones de URL y BASE64.

Y ahora seleccionamos desde el byte 33 para adelante y le damos encode Base64.

Ahora realizaremos un GET a /admin mediante el navegador, interceptando el paquete en el burpsuite, para realizar el cambio de la cookie.

NOTA: Eliminamos la cookie de session para que no haga conflicto con la cookie de stay-logged-in.

Y eliminamos al usuario carlos para completar el laboratorio.

CONCLUSION

Este conjunto de laboratorios, son mucho mas interesantes pues aprendemos que las vulnerabilidades no sono son las conocidas, sino que tambien existen vulnerabilidades de logica que pueden cometer los desarolladores, vulnerabilidad algo raras pero que si analizamos el comportamiento de los sitios web, nos topamos que son totalmente válidas.