Конкурс Как я нашёл уязвимость в хорошо защищённом web приложении

Конкурс: Встречаем 2020 статьями по инфобезу.

Вступление
В данной статье хотел бы рассказать о том, как я искал уязвимости в web приложении. Речь пойдёт о довольно не популярной уязвимости - Denial of Service. Эксплуатируя уязвимости данного типа можно "парализовать" сервер, не позволяя ему обрабатывать запросы клиентов.
Всё началось с того, что около месяца назад я получил приглашение приватной компании на одной из Bug Bounty платформ. Меня это заинтересовало, так как программа была довольно свежая, в скоупе был всего один домен, но с другой стороны, это позволяет посмотреть весь функционал за несколько дней и двигаться дальше.

Web приложение
После нескольких часов поиска интересного функционала, я понял, что будет не так просто найти хоть что-то в этом приложении - для авторизации оно использовало Wordpress, а в качестве прокси - Cloudflare. Бесплатного функционала было немного, а само приложение использовалось для управления сайтами на Wordpress.
Первым делом я решил проверить настройки аккаунта, здесь было больше всего шанса что-то найти, но, как я потом понял, я ошибался. Для изменения настроек использовалось API, но проблема была в том, что для каждого аккаунта эндпоинты были разными:
endpoints.png


Это сразу исключило большинство типов уязвимостей, таких как IDOR. Единственное, что я нашёл на тот момент - неправильную конфигурацию CORS, но применение этому я найти не смог.

Уязвимость
Во время теста меня заинтересовал функционал добавления API токенов, при создании тебе отправлялось значение, похожее на хеш. С помощью специально подготовленного python скрипта я пытался вызвать Race Condition в надежде увидеть что-то необычное, но ничего изменить не удалось и токены отправлялись корректно. Поставив скрипт в цикл я пошёл проверять другой функционал.
Спустя весь день я не нашёл ничего интересного, и собирался заканчивать. Последний раз взглянув на вкладки Burp Suite, я решил сделать запрос к API, который возвращает все существующие токены. К моему удивлению после минуты ожидания я увидел ошибку 504 Gateway Timeout. Это произошло из-за того, что поставленный мною скрипт создал слишком много токенов, а сервер не имел никаких инструкций на этот счёт и пытался обработать запрос. Я сразу понял, что это может привести к DoS. Немного изменив прошлый скрипт, я сделал 100 одновременных запросов к этому API эндпоинту со своего приватного сервера. Во время этого с ноутбука я делал запросы к сайту, после 10 секунд задержки я решил отменить всё запросы, так как наносить вред мне не хотелось. В итоге сервер не был способен обрабатывать запросы в течение 13 секунд.
timeout.png


Крайне не рекомендуется делать PoC для DoS при этичном хакинге, только при необходимости и с согласия компании.

Другие возможности вызвать Denial of Service
После этого я решил задержаться ещё на пару дней с этой программой. И нашёл ещё две потенциальные уязвимости подобного рода:
1. Запрос с очень большим заголовком вызывал 504 Gateway Timeout с минутой ожидания:
header.png
2. Повторный запрос к одноразовому коду аутентификации вызывал эту же ошибку:
code.png
Приведу ещё немного сторонних примеров, чтобы побольше осветить эту тему:
1. Сайт позволяет изменять размер изображения, example.com/image?x=100&y=100 - в таком cлучае мы можем попробовать изменить x и y до больших значений, что вызовет DoS - .
2. Есть возможность изменять цвет используя hex, в таком случае можно попробовать вызвать reDoS, то есть DoS с regex, указав неправильный цвет по типу #000...(много нулей)00abcdfe - .

Заключение
На самом деле вызвать такую уязвимостей не так и сложно, нужно только заставить сервер делать что-то тратя очень много вычислительных ресурсов.
На этом всё. Эта статья не задумывалась как полное руководство по Server Side DoS, но надеюсь, что она помогла вам разобраться в этом типе уязвимостей.
 
Последнее редактирование:

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Сомнительно. Скорее всего ты задосил собственный канал TCP ESTABLISHED соединениями. Проверяй работоспособность на другом ресурсе. Например 2ip
 

oleg543

New member
09.09.2019
3
0
BIT
0
Сомнительно. Скорее всего ты задосил собственный канал TCP ESTABLISHED соединениями. Проверяй работоспособность на другом ресурсе. Например 2ip
Он же написал, что запросы спамились с приват.сервака, а проверял с ноута. Два разных устройства и, скорее всего, две разных сети. Вряд ли в этом дело.
 

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Он же написал, что запросы спамились с приват.сервака, а проверял с ноута. Два разных устройства и, скорее всего, две разных сети. Вряд ли в этом дело.
Я вижу курл с того же сервака что и запрос слал. Смотри скрин.
 
  • Нравится
Реакции: Aleks Binakril

KiYo

One Level
15.12.2019
8
24
BIT
0
Сомнительно. Скорее всего ты задосил собственный канал TCP ESTABLISHED соединениями. Проверяй работоспособность на другом ресурсе. Например 2ip
Как я и писал, многократные подключения проводил с VPS. И чтобы исключить риск плохого интернета параллельно делал запросы к другому сайту.

Ссылку на свой reports скиньте, посмотрим, тогда и комментарии могут быть излишни.
Да с радостью бы, но как я и писал, программа приватная :(

Я вижу курл с того же сервака что и запрос слал. Смотри скрин.
Я не стал прикриплять скрины с сервера, но дабы развеять все сомнения, скину зацензуренный скрин прямо с видео PoC. Справа терминал с ssh на сервер
 

Вложения

  • image.png
    image.png
    647,5 КБ · Просмотры: 739

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Я не стал прикриплять скрины с сервера, но дабы развеять все сомнения, скину зацензуренный скрин прямо с видео PoC. Справа терминал с ssh на сервер
Опять же не информативно. Запусти атаку, а я в этот момент проверю через 2ip живучесть ресурса. Вот это будет железобетонно (или сделай сам это) И второй момент о какой приватности программы может идти речь, если ты уже выложил вектор, если твой вектор верный, то написать утилитку на коленке, которая в цикле пошлет овердофига токенов сможет любой человек который прочитал первые 100 страниц любого учебника по Питону.
 

KiYo

One Level
15.12.2019
8
24
BIT
0
Опять же не информативно. Запусти атаку, а я в этот момент проверю через 2ip живучесть ресурса. Вот это будет железобетонно (или сделай сам это) И второй момент о какой приватности программы может идти речь, если ты уже выложил вектор, если твой вектор верный, то написать утилитку на коленке, которая в цикле пошлет овердофига токенов сможет любой человек который прочитал первые 100 страниц любого учебника по Питону.
Я бы не стал писать статью об уязвимости в этой программе, если бы она была ещё не пофикшена. С другой стороны, если то, что ты утвержаешь верно, то они бы не приняли репорт и не стали бы её фиксить.
 

SooLFaa

Platinum
15.07.2016
898
1 560
BIT
36
Я бы не стал писать статью об уязвимости в этой программе, если бы она была ещё не пофикшена. С другой стороны, если то, что ты утвержаешь верно, то они бы не приняли репорт и не стали бы её фиксить.
Ну а есть хотя бы скрины общения с техподдержкой?
 
  • Нравится
Реакции: g00db0y

KiYo

One Level
15.12.2019
8
24
BIT
0
Ну а есть хотя бы скрины общения с техподдержкой?
Как такогого общения не было, спросил по почте можно ли сделать DoS PoC, записал видео и отправил. Пофиксили в тот же день, просто забанили мой аккаунт и ограничили количество токенов...
 

Вложения

  • image.png
    image.png
    8,4 КБ · Просмотры: 574

c0mb0

Green Team
02.10.2018
52
19
BIT
13
Эээм сомнительная бага, по очень длинным параметрам в пост\гет не удивить, такое часто найти можно, еще вложенные массивы типа access_token[][][][][]=123, то что на генерацию токена большой таймаут, странновато, ну ок как вариант можно сканить и такую багу. Вот по генерации картинки часто угараю по параметрам типа -999999 и 9999999 но кривых генераторов еще не находил, тема интересна. Есть еще схожее с генератором банера с выводом текста\цвет. +можно дудосить скрипты которые js склеивают и выводят
 
  • Нравится
Реакции: Debug
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!