Где и как искать этот ваш SSRF: первые шаги в багхантинге |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-09-29 11:19 Привет, меня зовут Олег Уланов (aka brain). Я занимаюсь пентестами веб-приложений и активно участвую в багбаунти, зарабатывая на чужих ошибках. Свой путь в наступательной безопасности я начал совсем недавно, но, несмотря на это, меньше чем за год мне удалось ворваться в топ-10 исследователей на Standoff Bug Bounty (сейчас я на 5-м месте — можете проверить ). В своем дебютном посте кратко расскажу об уязвимости с подделкой запросов на стороне сервера (SSRF) и ее видах, покажу, как обнаруживать этот баг и почему его стоит искать даже на статических сайтах, а заодно подсвечу особенности работы с Burp Suite, Collaborator Everywhere и Wappalyzer. Статья будет полезна для прокачки скилов и поможет легче и быстрее обнаруживать SSRF в сервисах, размещенных на площадках багбаунти.
Пролог Существуют два вида атак на веб-приложения: атаки на его клиентскую часть и на серверную. Главная героиня моего рассказа — уязвимость server-side request forgery (SSRF) — относится ко второй группе. Ее эксплуатация позволяет отправлять произвольные HTTP-запросы к внешним или внутренним ресурсам от имени уязвимого веб-приложения. В 2021 году SSRF попала в топ-10 наиболее опасных угроз для веб-приложений по версии Open Web Application Security Project (OWASP). Зачем злоумышленники ищут SSRF Представьте, что у вас есть внутренний сервис (для простоты буду называть его «админкой»), веб-сервис, к которому можно обращаться, и киберпреступник. В идеале последний хочет сразу получить доступ в «админку», чтобы узнать, какие в ней хранятся данные. Однако сервисы, как правило, защищены, доступ к ним предупредительно ограничивают, поэтому так называемая «админка» может находиться, например, за межсетевым экраном (из-за чего доступ к ней напрямую невозможен) либо в локальной сети, в которую злоумышленник попасть не может. Но что, если веб-сервис имеет функционал, позволяющий выполнять запросы по URL-адресу, и мы подменим адрес для запроса данных на внутренний? По сути, таким образом мы заставим сервер отправить запрос на ресурс, куда доступа извне нет, и получим возможность взаимодействовать с ним, что позволит в дальнейшем начать поиск способов раскрытия информации, работы с данными в критичном сервисе. Существует множество сценариев, когда можно осуществлять подделку запросов на стороне сервера, к примеру, это может быть простейший генератор картинок по URL-адресу контента. Разработчики сервиса, в свою очередь, могут не предусмотреть, что таким способом киберпреступники могут передавать веб-серверу адрес внутреннего сервиса и похищать данные. Главная задача SSRF-атаки — масштабировать последующие кибератаки на внутреннюю инфраструктуру компании. SSRF-уязвимость бывает трех видов: неслепой, полуслепой и слепой. Особенности каждой представлены ниже. Отмечу, что контроль данных является важным элементом любого SSRF-бага. Этот параметр позволяет ответить на вопросы:
Где искать SSRF Самые очевидные SSRF следует искать в функциональности сервиса и его фичах. Среди них могут быть генераторы (файлов PDF или изображений) и парсеры данных, например вектором атаки может быть приложение онлайн-магазина, в котором при редактировании карточек товара можно передавать URL-адрес изображения товаров. Так, при отправке сервер сделает запрос, чтобы получить информацию о картинке, а затем добавит ее в базу данных. В этом случае, подменив адрес, можно попытаться прочитать данные из внутренних сервисов и таким образом исследовать инфраструктуру. Вспомните, что большинство сайтов имеет favicon — иконку страницы, которую также видно на вкладке в браузере, она может стать средством обнаружения доступности внутренних сервисов вроде GitLab. Кроме того, при багхантинге стоит обращать внимание на используемые технологии и сервисы (Next.js, Sentry, Skype for Business): часто в них уже встроены фичи, которые разработчики могут забыть отключить либо настроить некорректно, что также позволит исследовать и атаковать инфраструктуру. Не ленитесь проверять заголовки HTTP-запросов: они могут использоваться для отслеживания страниц, с которых переходят пользователи приложения, а также с целью узнать, проксирует ли сервис запросы во внутреннюю сеть. Подставив заголовок, исследователь может попробовать использовать эту функцию во вредоносных целях и тем самым реализовать SSRF. Вдобавок, если удалось найти отравление кэша, простейшую HTML-инъекцию или любую другую уязвимость, можно попытаться повысить их импакт до SSRF. Например, если на сайте присутствует генератор изображений по HTML-разметке, то инъекция тега изображения может позволить стриггерить SSRF. Или, например, содержимое сервера кэшируется в сети доставки контента, тогда внедрение тега для кэширования динамического контента может также позволить выполнить подделку запроса: А что, если сервер ограничивает адреса, к которым можно выполнять запрос? На схеме выше мы рассмотрели кейс, где веб-ресурс не был защищен и потому разрешал обращение внутри сети. На практике в большинстве случаев такого не бывает. Поэтому, если при багхантинге вы не можете получить запрос к своему домену в Collaborator либо увидеть ответ, придется анализировать работу парсера, а именно:
Механизм работы уязвимости SSRF через открытое перенаправление в общих чертах выглядит так:
Время размять мозги и порешать задачки Базовый SSRF против другой внутренней системы В этой лабе есть базовая SSRF, но при этом средства защиты не установлены. Чтобы решить ее, необходимо узнать, что находится в локальной сети, и удалить пользователя. Демонстрация решенияСлепая SSRF с обнаружением через запрос к контролируемому узлу В этой задаче разберем, как анализировать HTTP-заголовки, которые могут применяться для отслеживания действий пользователей и проксирования трафика. Кроме того, я покажу, как правильно пользоваться плагином Collaborator. Один из нюансов состоит в том, что сервер может обрабатывать определенный заголовок только в конкретных случаях, например не на главной странице сайта, а при просмотре карточек товаров (для отслеживания того, откуда пользователи смотрят товары, а также для оценки эффективности различных сервисов, например рекламных). Соответственно, следует проверять заголовки с помощью множества запросов. Для этого можно обратиться к Burp Suite, вручную добавляя заголовки с требуемым доменом, либо к Collaborator, если в сети не установлен межсетевой экран. Демонстрация решенияSSRF с обходом фильтра через уязвимость открытого перенаправления Обнаруживаем SSRF через Open Redirect. Демонстрация решенияВишенка на торте: мой сайт, который «не взломать» Я написал небольшой простой статический сайт на Next.js и продемонстрирую, как его можно взломать. Демонстрация решенияКейс с баг-трекером Sentry — сервис мониторинга производительности и ошибок на фронтенде, который позволяет разработчикам быстро отслеживать и исправлять ошибки на веб-сайтах. Он используется либо как self-hosted-решение, либо как SaaS. Его работу легко определяет Wappalyzer. Одна из фичей Sentry, если он развернут в корпоративной инфраструктуре, позволяет выполнять запрос к файлу и непосредственно увидеть код, в котором произошла ошибка. Другими словами, сервис разрешает просматривать трассировку стека при возникновении ошибок в бразуерах пользователей. Адреса, к которым может обращаться Sentry, никак не ограничиваются сервисом, а разработчики забывают внедрить проксирование запросов. При багхантинге можно обнаружить использование Sentry в прокси всего лишь путем просмотра запросов. Либо выяснить параметры ключ-проекта Sentry в коде страниц ресурса. Таким образом, появляется возможность подмены имени файла с ошибкой, и баг-трекер, если в нем включена фича с запросом исходного кода, в котором возникло исключение, выполнит его к необходимому ресурсу. При этом мы не сможем получить ответ, но сможем поймать HTTP interaction, который и подтвердит, что фича отправки запросов на произвольные веб-адреса в Sentry не ограничена, а значит, наличие проксирования запросов не подтверждается. Эпилог В помощь тем, кто учится искать баги или только подумывает об этом, я составил дорожную карту, которой можно руководствоваться для поиска не только SSRF, но и других уязвимостей. Напоследок поделюсь коротким планом действий, следуя которому вы легко сможете начать поиск SSRF-уязвимостей:
Кроме того, хочу сделать акцент на том, что каждое действие, которое вы выполняете при поиске бага, должно быть осознанным и логичным, ведь все ошибки — результат несовершенства процессов разработки и тестирования (увы, этого не избежать), а не случайность. Немаловажным фактором является и время, которое затрачивается на поиск уязвимостей: чем больше времени вы уделяете исследованию сервиса, тем выше вероятность того, что вам удастся найти что-нибудь интересное и зарепортить свой первый баг! Непрерывно оттачивайте свои навыки, чтобы бороться за высокие награды с матерыми багхантерами, помогайте делать сервисы надежнее. Если вам повезет первым найти самую дорогую уязвимость, вы можете сорвать куш. Что еще интересного о багхантинге можно почитать
Полезное, которое живет не на Хабре: 15 навыков, чтобы начать свой путь в багхантинге, а также карта знаний и советы топовых багхантеров. Источник: habr.com Комментарии: |
|