Как находить и эксплуатировать уязвимости раскрытия информации
В этом разделе мы дадим практические рекомендации по некоторым методам и инструментам, которые вы можете использовать для выявления раскрытия информации в широком спектре контекстов. Мы также подготовили несколько лабораторных работ, чтобы вы могли потренироваться в извлечении различных видов информации, которые могут быть использованы как часть дальнейшей атаки.
Как тестировать уязвимости раскрытия информации
В целом важно не впадать в «туннельное зрение» во время тестирования. Другими словами, следует избегать слишком узкого фокуса на какой-то одной уязвимости. Конфиденциальные данные могут утекать в самых разных местах, поэтому важно не упустить ничего, что может пригодиться позже. Нередко вы обнаружите конфиденциальные данные, тестируя что-то другое. Ключевой навык — уметь распознавать интересную информацию всякий раз и в любом месте, где вы с ней сталкиваетесь.
Ниже приведены некоторые примеры высокоуровневых методик и инструментов, которые можно использовать для выявления уязвимостей раскрытия информации в ходе тестирования.
Фаззинг
Если вы выявили интересные параметры, вы можете попробовать отправлять неожиданные типы данных и специально подготовленные фазз-строки, чтобы посмотреть, какой эффект это окажет. Внимательно следите за реакцией: хотя ответы иногда явно раскрывают интересную информацию, они также могут более тонко намекать на поведение приложения. Например, это может быть небольшое различие во времени обработки запроса. Даже если содержимое сообщения об ошибке ничего не раскрывает, иногда сам факт, что произошёл один вариант ошибки вместо другого, уже является полезной информацией.
Большую часть этого процесса можно автоматизировать с помощью таких инструментов, как Burp Intruder. Это даёт несколько преимуществ. В частности, вы можете:
Добавлять позиции полезной нагрузки к параметрам и использовать готовые списки слов с фазз-строками, чтобы быстро протестировать большой объём различных входных данных.
Легко выявлять различия в ответах, сравнивая коды состояния HTTP, время ответа, длину и т. д.
Использовать правила сопоставления grep, чтобы быстро находить вхождения ключевых слов, таких как
error,invalid,SELECT,SQLи т. д.Применять правила извлечения grep, чтобы извлекать и сравнивать содержимое интересующих элементов в ответах.
Вы также можете использовать расширение Logger++, доступное в магазине BApp. Помимо ведения журнала запросов и ответов из всех инструментов Burp, оно позволяет определять продвинутые фильтры для подсветки интересных записей. Это лишь одно из многих расширений Burp, которые могут помочь вам найти любые чувствительные данные, утекшие с веб-сайта.
Использование сканера Burp
Пользователи Burp Suite Professional располагают преимуществом в виде Burp Scanner. Он предоставляет возможности сканирования в реальном времени для аудита элементов во время вашего просмотра, либо вы можете запланировать автоматизированные сканирования, чтобы краулить и проверять целевой сайт от вашего имени. Оба подхода автоматически пометят многие уязвимости раскрытия информации. Например, Burp Scanner предупредит вас, если обнаружит в ответе чувствительную информацию, такую как закрытые ключи, адреса электронной почты и номера кредитных карт. Он также выявит любые файлы резервных копий, листинги каталогов и т. д.
Использование инструментов взаимодействия Burp (engagement tools)
Burp предоставляет несколько инструментов взаимодействия, которые вы можете использовать, чтобы легче находить интересную информацию на целевом сайте. Доступ к инструментам взаимодействия осуществляется из контекстного меню — просто щёлкните правой кнопкой на любом сообщении HTTP, записи Burp Proxy или элементе на карте сайта и перейдите в «Engagement tools».
Следующие инструменты особенно полезны в этом контексте.
Search (Поиск)
С помощью этого инструмента вы можете искать любое выражение в выбранном элементе. Вы можете точно настроить результаты с помощью различных продвинутых опций поиска, таких как поиск по регулярным выражениям или отрицательный поиск. Это полезно для быстрого нахождения вхождений (или отсутствия) конкретных ключевых слов, представляющих интерес.
Find comments (Найти комментарии)
Этот инструмент позволяет быстро извлечь любые комментарии разработчиков, найденные в выбранном элементе. Он также предоставляет вкладки для мгновенного доступа к циклу HTTP-запрос/ответ, в котором был найден каждый комментарий.
Discover content (Обнаружить содержимое)
Этот инструмент помогает выявлять дополнительное содержимое и функциональность, не связанную с видимым содержимым сайта. Это может быть полезно для поиска дополнительных каталогов и файлов, которые не обязательно автоматически появятся на карте сайта.
Формирование информативных ответов
Подробные сообщения об ошибках иногда раскрывают интересную информацию в ходе обычного рабочего процесса тестирования. Однако, изучая, как сообщения об ошибках меняются в зависимости от вашего ввода, вы можете зайти ещё дальше. В некоторых случаях вы сможете манипулировать веб-сайтом таким образом, чтобы извлекать произвольные данные через сообщение об ошибке.
Существует множество методов, зависящих от конкретного сценария, с которым вы столкнётесь. Один из распространённых примеров — заставить логику приложения попытаться выполнить недопустимое действие над конкретным элементом данных. Например, отправка недопустимого значения параметра может привести к трассировке стека или отладочному ответу, содержащему интересные детали. Иногда вы можете заставить сообщения об ошибках раскрыть значение необходимых вам данных в ответе.
Распространённые источники раскрытия информации
Раскрытие информации может происходить в самых разных контекстах в рамках веб-сайта. Ниже приведены распространённые примеры мест, где можно проверить, не раскрываются ли конфиденциальные данные.
Файлы для веб-краулеров
Многие сайты предоставляют файлы по адресу /robots.txt и /sitemap.xml, чтобы помочь краулерам ориентироваться на сайте. Помимо прочего, в этих файлах часто перечислены конкретные каталоги, которые краулерам следует пропускать, например потому, что они могут содержать конфиденциальную информацию.
Поскольку на эти файлы обычно нет ссылок внутри сайта, они могут не сразу появляться на карте сайта Burp. Тем не менее имеет смысл вручную перейти на /robots.txt или /sitemap.xml, чтобы посмотреть, не найдёте ли вы что-нибудь полезное.
Листинги каталогов
Веб-серверы можно настроить так, чтобы они автоматически выводили список содержимого каталогов, в которых отсутствует индексная страница. Это может помочь злоумышленнику быстро определить ресурсы по заданному пути и сразу перейти к их анализу и атаке. Особенно это повышает доступность чувствительных файлов в каталоге, которые не предназначены для пользователей, таких как временные файлы и дампы сбоев.
Сами по себе листинги каталогов не обязательно являются уязвимостью безопасности. Однако если на сайте также не реализован надлежащий контроль доступа, утечка существования и расположения чувствительных ресурсов таким образом очевидно является проблемой.
Комментарии разработчиков
Во время разработки в разметку иногда добавляют встроенные HTML-комментарии. Обычно эти комментарии удаляются перед развёртыванием изменений в продуктивной среде. Однако комментарии могут быть забыты, пропущены или даже намеренно оставлены, если кто-то не полностью осознавал последствия для безопасности. Хотя эти комментарии не видны на отображаемой странице, к ним легко получить доступ с помощью Burp или даже встроенных инструментов разработчика в браузере.
Иногда в таких комментариях содержится информация, полезная для злоумышленника. Например, они могут намекать на существование скрытых каталогов или давать подсказки о логике приложения.
Сообщения об ошибках
Одной из наиболее распространённых причин раскрытия информации являются подробные сообщения об ошибках. Как общее правило, следует внимательно относиться ко всем сообщениям об ошибках, которые вы встречаете при аудите.
Содержимое сообщений об ошибках может раскрывать информацию о том, какой ввод или тип данных ожидается от заданного параметра. Это может помочь сузить атаку, выявив эксплуатируемые параметры. Это даже может просто избавить вас от траты времени на попытки внедрить полезные нагрузки, которые заведомо не сработают.
Подробные сообщения об ошибках также могут сообщать о различных технологиях, используемых на сайте. Например, они могут явно указывать шаблонизатор, тип базы данных или сервер, который использует сайт, вместе с его версией. Эта информация полезна, поскольку вы можете легко найти документированные эксплойты, которые существуют для этой версии. Аналогично можно проверить, нет ли распространённых ошибок конфигурации или опасных настроек по умолчанию, которые вы сможете использовать. Некоторые из них могут быть отмечены в официальной документации.
Вы также можете обнаружить, что сайт использует какой-то фреймворк с открытым исходным кодом. В этом случае вы можете изучить доступный исходный код — бесценный ресурс для создания собственных эксплойтов.
Различия между сообщениями об ошибках также могут раскрывать различное поведение приложения, происходящее «за кулисами». Наблюдение за различиями в сообщениях об ошибках — ключевой аспект многих техник, таких как SQL-инъекции, перебор имён пользователей и т. д.
Отладочные данные
В целях отладки многие веб-сайты генерируют настраиваемые сообщения об ошибках и журналы, содержащие большие объёмы информации о поведении приложения. Хотя эта информация полезна на этапе разработки, в продуктивной среде она также чрезвычайно полезна для злоумышленника, если происходит её утечка.
Отладочные сообщения иногда могут содержать жизненно важную информацию для разработки атаки, включая:
Значения ключевых переменных сессии, которыми можно манипулировать через пользовательский ввод
Имена хостов и учётные данные для серверных компонентов
Имена файлов и каталогов на сервере
Ключи, используемые для шифрования данных, передаваемых клиентом
Отладочная информация иногда может записываться в отдельный файл. Если злоумышленнику удаётся получить доступ к этому файлу, он может служить полезной отправной точкой для понимания рабочего состояния приложения. Он также может дать несколько подсказок о том, как можно подать специально сформированный ввод, чтобы манипулировать состоянием приложения и контролировать получаемую информацию.
Страницы учётных записей пользователей
По своей природе профиль пользователя или страница учётной записи обычно содержат конфиденциальную информацию, такую как адрес электронной почты пользователя, номер телефона, ключ API и т. д. Поскольку пользователи обычно имеют доступ только к собственной странице учётной записи, само по себе это не представляет уязвимости. Однако некоторые веб-сайты содержат логические изъяны, которые потенциально позволяют злоумышленнику использовать эти страницы для просмотра данных других пользователей.
Например, рассмотрим веб-сайт, который определяет, какую страницу учётной записи загрузить, исходя из параметра user.
Большинство веб-сайтов предпринимают шаги, чтобы предотвратить простую смену этого параметра злоумышленником для доступа к произвольным страницам учётных записей. Однако иногда логика загрузки отдельных элементов данных не столь надёжна.
Злоумышленник может быть не в состоянии загрузить чужую страницу целиком, но логика получения и отображения, например, зарегистрированного адреса электронной почты пользователя может не проверять, что параметр user соответствует пользователю, который в данный момент авторизован. В этом случае простое изменение параметра user позволит злоумышленнику отображать адреса электронной почты произвольных пользователей на собственной странице учётной записи.
Мы рассмотрим такие уязвимости более подробно, когда будем говорить о контроле доступа и уязвимостях IDOR.
Раскрытие исходного кода через файлы резервных копий
Получение доступа к исходному коду значительно упрощает злоумышленнику понимание поведения приложения и построение атак с высокой степенью критичности. Конфиденциальные данные иногда даже жёстко прописаны в исходном коде. Типичные примеры включают ключи API и учётные данные для доступа к серверным компонентам. Если вы можете определить, что используется конкретная технология с открытым исходным кодом, это обеспечивает лёгкий доступ к ограниченному объёму исходного кода.
Иногда возможно даже заставить веб-сайт раскрыть собственный исходный код. Во время картирования сайта вы можете обнаружить, что некоторые файлы исходного кода явно упоминаются. К сожалению, их запрос обычно не раскрывает сам код. Когда сервер обрабатывает файлы с определённым расширением, таким как .php, он, как правило, выполняет код, а не просто отправляет его клиенту как текст. Однако в некоторых ситуациях можно обмануть веб-сайт и заставить его вернуть содержимое файла. Например, текстовые редакторы часто создают временные резервные копии файлов во время редактирования исходного файла. Эти временные файлы обычно как-то обозначаются, например добавлением тильды (~) к имени файла или присвоением другого расширения. Запрос файла исходного кода с использованием расширения резервной копии иногда позволяет прочитать содержимое файла в ответе.
Как только злоумышленник получает доступ к исходному коду, это может стать огромным шагом к выявлению и эксплуатации дополнительных уязвимостей, что иначе было бы почти невозможно. Один из таких примеров — небезопасная десериализация. Мы рассмотрим эту уязвимость позже в отдельной теме.
Раскрытие информации из-за небезопасной конфигурации
Иногда сайты уязвимы из-за неправильной конфигурации. Это особенно распространено из-за повсеместного использования сторонних технологий, огромный набор параметров конфигурации которых не всегда хорошо понимают внедряющие их специалисты.
В других случаях разработчики могут забыть отключить различные параметры отладки в продуктивной среде. Например, метод HTTP TRACE предназначен для диагностических целей. Если он включён, веб-сервер будет отвечать на запросы, использующие метод TRACE, возвращая в ответе точную копию полученного запроса. Такое поведение часто безвредно, но иногда приводит к раскрытию информации, например названия внутренних заголовков аутентификации, которые могут добавляться к запросам обратными прокси-серверами.
История системы контроля версий
Практически все веб-сайты разрабатываются с использованием какой-либо системы контроля версий, такой как Git. По умолчанию проект Git хранит все данные контроля версий в каталоге под названием .git. Иногда веб-сайты раскрывают этот каталог в продуктивной среде. В таком случае вы можете получить к нему доступ, просто перейдя по адресу /.git.
Хотя часто непрактично вручную просматривать необработанную структуру и содержимое файлов, существуют различные методы для скачивания всего каталога .git. Затем вы можете открыть его с помощью локальной установки Git, чтобы получить доступ к истории контроля версий веб-сайта. Она может включать журналы с зафиксированными изменениями и другую интересную информацию.
Это может не дать вам доступа к полному исходному коду, но сравнение diff позволит читать небольшие фрагменты кода. Как и в любом исходном коде, вы также можете обнаружить конфиденциальные данные, жёстко прописанные в некоторых изменённых строках.
Last updated