IDOR. Уязвимости веб-приложения

IDOR. Уязвимости веб-приложения

CORS | E7

Привет. На связи CORS из E7, и сегодня мы разберем такую уязвимость веб-приложений, как IDOR.

Что такое IDOR?

IDOR - Insecure Direct Object Reference - небезопасная прямая ссылка на объект, является уязвимостью контроля доступа Broken Access Control. Этот тип уязвимости может возникнуть, когда веб-сервер получает вводимые пользователем данные для извлечения объектов (файлов, данных, документов), слишком "доверяя" входным данным (отсутствие достаточной фильтрации ввода), и они не проверяются на стороне сервера для подтверждения того, что запрашиваемый объект принадлежит пользователю, который его запрашивает. Если результате посетитель сайта может получить доступ к защищенной странице/страницам, которые он не имеет права просматривать, контроль доступа нарушается.

Доступ обычного посетителя к защищенным страницам может привести к следующему:

  • Возможность просмотра конфиденциальной информации.
  •  Доступ к несанкционированным функциям.

IDOR на примере.

Представим, что мы оформили заказ в интернет магазине, и по ссылке https://onlinestore.thm/order/1234/invoice расположен наш инвойс. Не сдержав любопытства, мы меняем номер инвойса в ссылке на https://onlinestore.thm/order/1000/invoic,e и получаем чужой инвойс. Уязвимость IDOR обнаружена!

Order 1234. Наш инвойс
Order 1000. Чужой инвойс =)


Поиск IDOR в кодированных идентификаторах.

При передаче данных со страницы на страницу. веб-разработчики часто сначала берут необработанные данные и кодируют их. Кодирование гарантирует, что принимающий веб-сервер сможет понять содержимое. Наиболее распространенной техникой кодирования в Интернете является кодирование base64, которое обычно легко обнаружить. Мы можем использовать сайты типа https://www.base64decode.org/ для декодирования строки, затем отредактировать данные и снова закодировать их, чтобы затем повторно отправить веб-запрос и посмотреть, изменился ли ответ.

Схема процесса приведена ниже:

Поиск IDOR в хэшированных идентификаторах.

С хэшированными ID дело обстоит немного сложнее, чем с закодированными в base64, но они могут следовать предсказуемой логике, например быть хэшированной версией целочисленного значения. Например, ID = 123 при хэшировании md5 станет ID = 202cb962ac59075b964b07152d234b70. Стоит пропустить все найденные хэши через веб-сервис, такой как https://crackstation.net/, чтобы посмотреть, сможем ли мы найти какие-либо совпадения.

Поиск IDOR в непредсказуемых идентификаторах.

Если ID невозможно определить с помощью вышеописанных методов, отличным методом обнаружения IDOR является создание двух учетных записей и обмен ID-номерами между ними. Если мы можем просматривать содержимое других пользователей, используя их ID-номер, при этом входя в систему под другой учетной записью (или не входя вообще), значит, мы нашли уязвимость IDOR.

Где расположены IDOR.

Уязвимая конечная точка, на которую мы нацелились, не всегда может быть тем, что мы видим в адресной строке. Это может быть содержимое, которое браузер загружает через AJAX-запрос, или что-то, на что мы нашли ссылку в файле JavaScript.

Иногда конечные точки могут иметь параметр без ссылки, который, возможно, был полезен во время разработки и был перенесен в продакшн. Например, мы можем заметить вызов /user/details, отображающий информацию о нашем пользователе, аутентифицированном через нашу сессию. Но в результате атаки, известной как перебор параметров, мы можем обнаружить параметр user_id, который можно использовать для отображения информации других пользователей, например /user/details?user_id=123.


На скрине ниже мы видим в разделе Сети инструментов разработчика, как на странице редактирования данных аккаунта происходит обращение с путем /api/v1/customer?id=15.


Эта страница возвращает в формате JSON идентификатор пользователя, имя пользователя и адрес электронной почты. Информация о пользователе берется из параметра id строки запроса.

Попробуем изменить параметр ID на значение 1.

Уязвимость IDOR обнаружена. Мы можем получить информацию о других учетных записях, перебирая ID, оставаясь залогиненным под своей учетной записью с минимальными правами.


Подписывайся - блог E7 | Education, чат E7 | Pentesting

Report Page