Полезные знания Как начать заниматься багхантингом веб-приложений Ч.2

DOMINUS_EDEM

Прошлый ник Khan
ПРОВЕРЕННЫЙ ПРОДАВЕЦ
Private Club
Старожил
Регистрация
23/1/16
Сообщения
2.064
Репутация
5.626
Реакции
5.871
RUB
0
Депозит
22 000 рублей
Сделок через гаранта
21
Предыдущая часть —

«Быстрый старт» на настоящих примерах

После того как изучена теоретическая база (самые популярные уязвимости, наиболее часто используемые сценарии атак, базовый список инструментария), самое время закрепить полученные знания на примерах старых версий настоящих систем с открытым исходным кодом, в которых уже были обнаружены уязвимости.

Еще раз повторимся, рассматриваемые ниже примеры исследуются исключительно на старых версиях ПО и речь идет об уязвимостях, которые закрыты или устранены.

Уделим внимание внедрению кода, а именно — SQL Injection. Эту уязвимость рассмотрим на примере MantisBT версии 2.24.3. Эксплойт этой уязвимости CVE-2020-28413 опубликован в специализированном разделе на сайте MantisBT. Поэтому воспроизвести атаку с использованием BurpSuite для перехвата запроса и его повторения, а также sqlmap для более автоматизированного получения информации из базы данных может каждый желающий.

Имеется учетная запись пользователя observer:SEk7AnRiF5 с ролью доступа «Наблюдатель»

b77c823c292a3bcd9fd6f902b55ff187.png

Необходимо настроить прокси между браузером и BurpSuite, а после — перехватить POST-запрос на сценарий /api/soap/mantisconnect.php с указанными данными для авторизации пользователя observer.

Согласно эксплойту, уязвимым параметром SQL Injection будет являться значение тега access. Отправляется легитимный, ничего не нарушающий HTTP-запрос:

4803beb6d48a9ceecdca9c6d31859099.png

В ответ сервер возвращает 200-й статус и запрашиваемую информацию:

b19e1ea1fe7b210739ea4dcfe6db0fda.png

Однако если заменить значение 1 на одинарную кавычку (') в теге access, то в данном случае сервер, согласно эксплойту, должен вернуть 500-й статус с ошибкой о некорректности сформированного приложением и исполняемого базой данных SQL-запроса. Отправление запроса с одинарной кавычкой:

a3ccd91d4699ec93511d9a6698346135.png

Действительно, сервер отвечает 500-м статусом, а в теле ответа содержится подтверждение наличия уязвимости SQL Injection:

f7d46ce1387a8bf91f8b44665584430d.png

Теперь имеет смысл воспользоваться ранее упомянутым инструментом — sqlmap, с помощью которого можно автоматизировано получить информацию из базы данных, эксплуатируя найденную уязвимость SQL Injection.

Сперва необходимо скачать sqlmap и в его корень папки поместить последний выполняемый запрос с одинарной кавычкой (') в текстовом файле с именем, к примеру request. Вместо одинарной кавычки следует поставить звездочку (*), для того чтобы sqlmap знал, какой параметр в запросе необходимо эксплуатировать.

По умолчанию MantisBT именует базу данных как bugtracker. Зная это, мы можем запросить список таблиц, которые находятся в ней:

174be0715aac6a2f25a263cd46362898.png

Результатом будет служить несанкционированное получение списка всех таблиц в базе bugtracker, к которым также можно обращаться и получать их содержимое.

На HackerOne уязвимости SQL Injection оцениваются так:

0100e62083cae5e2258485e3dfc7c6f7.png

Пришло время поговорить про атаки на пользователя. В нашем примере будет рассмотрена атака на пользователя «Межсайтовое выполнение сценариев» (XSS) и «Подделка межсайтового запроса» (CSRF).

В начале рассмотрим атаку на пользователя «Межсайтовое выполнение сценариев» (XSS) на примере системы с открытым исходным кодом GitBucket. Для версии 4.37.1 существует публичный эксплойт, с помощью которого авторизованный злоумышленник имеет возможность внедрить вредоносный JavaScript-код на определенные страницы, при просмотре которых он будет исполняться. Выполнение JavaScript-кода в браузере жертвы может привести к краже cookies, редиректу на другую страницу, внедрению кейлогера (вредоносного ПО для отслеживания нажимаемых клавиш), отрисовки формы авторизации с последующей кражей логина и пароля. В рассматриваемой системе при атаке на администратора имеется возможность полностью скомпрометировать сервер.

Покажем метод внедрения вредоносного JavaScript-кода. Для начала авторизованный злоумышленник должен создать свой репозиторий.

7c927f2c059093d62d60d63571832959.png

После создания репозитория в нем необходимо создать «вопрос» (issues), в заголовке которого злоумышленником размещается вредоносная нагрузка: "><img src=1 onerror=alert()>

7ab57610a1009c8228780c79f404fe50.png

Далее при посещении главной страницы или страницы злоумышленника (вкладка Public activity) будет исполнен внедренный JavaScript-код в браузере пользователя.

718af224213e11779eee87d681526431.png

На HackerOne можно посмотреть, насколько опасными могут быть XSS-атаки и как высока может быть награда за их обнаружение.

920f284fad2b5d66620d6c1765bd411b.png

Рассмотрим другую атаку на пользователя — «Подделка межсайтового запроса» (CSRF) — на примере системы с открытым исходным кодом GitLab. Подделка межсайтового запроса означает, что злоумышленник на контролируемом сайте размещает HTML-форму, которая будет отправлена в уязвимую систему от лица авторизованного в системе пользователя, которого злоумышленник заманил на свой сайт. Последствиями этой атаки может быть смена персональных данных (имя, телефон, почта, пароль), выполнение каких-либо действий, например перевод денежных средств на счет злоумышленника в уязвимой банковской системе или публикация комментариев от лица атакуемого пользователя.

В GitLab для версий ниже 14.0.2 существует уязвимость CSRF ( , ).

ff2e627663378af358dafd9f24661f27.png

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

e8203b2c90b5fe74c95753dd76a34414.png

На основе публично доступного эксплойта по приведенным выше ссылкам злоумышленник создает на контролируемом сайте страницу с HTML-формой следующего содержания:

e8f579053963b222659d120444b5828e.png

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

ecefe2892f6411414c608e32b8298e4a.png

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

814611d33f145d062e0170866ce8e1b2.png


54e13cfd9ff0c2b41955709e36f476e6.png

А вот так оценивают CSRF-атаки на HackerOne:

3adb7831b146c2bfc732f281b5983f2b.png
 
Сверху Снизу