Insufficient workflow validation | Dec 20, 2022
Introduction
Welcome to my another writeup! In this Portswigger Labs lab, you’ll learn: Insufficient workflow validation! Without further ado, let’s dive in.
- Overall difficulty for me (From 1-10 stars): ★☆☆☆☆☆☆☆☆☆
Background
This lab makes flawed assumptions about the sequence of events in the purchasing workflow. To solve the lab, exploit this flaw to buy a “Lightweight l33t leather jacket”.
You can log in to your own account using the following credentials: wiener:peter
Exploitation
Home page:
Login as user wiener
:
Now, we can try to buy the Lightweight l33t leather jacket
:
When we clicked the Add to cart
button, it’ll send a POST request to /cart
, with parameter productId=1
, redir=PRODUCT
and quantity
.
Then, we can go to /cart
page:
As you can see, we have added that product to our cart.
Let’s try to click the Place order
button:
When we clicked that button, it’ll send a POST request to /cart/checkout
, with parameter csrf
.
Let’s forward that request:
When we don’t have enough store credits, it’ll send a GET request to /cart
, with parameter err=INSUFFICIENT_FUNDS
.
Let’s remove that product from our cart:
When we clicked the Remove
button, it’ll send a POST request to /cart
, with parameter productId
, quantity
and redir=CART
.
Armed with above information, what if we successfully bought a product?
Let’s say product Eggtastic, Fun, Food Eggcessories
When we have enough store credits, it’ll send a GET request to /cart/order-confirmation
, with parameter order-confirmed=true
.
Hmm… What if we add the leather jacket to cart, and then send a GET request to /cart/order-confirmation
with parameter order-confirmed=true
?
Let’s do that:
We did it!
What we’ve learned:
- Insufficient workflow validation