Как раскрыть тайные места приложения?



Два года назад я описывал методы сбора API и получился такой список:

- Публичные Swagger;

- Динамическая сборка;

- В JavaScript файлах;

- С помощью дорков;

- Перебор эндпоинтов;

- APK файл;

- Internet Archive.



Недавно обнаружил для себя еще 1 очень простой и эффективный способ.

Суть заключается в подмене значения параметров.

И на проектах и на багбаунти такой способ давал достаточно хороший импакт.



Чтобы лучше разобраться, приведу примеры:

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



Пример запроса:

GET /api/v3/profiles/me HTTP/2

Host: api.redacted.me

Cookie: cookies


Ответ:

.....

"permissions":["access1.any1","access2.any2"...],

.....




Еще несколько примеров:

"role":"customer"

"isAdmin":false

"subscription":"Basic"




Логика здесь понятна: при авторизации или запросе к другому методу бэкенд дает нам соответствующее значение прав доступа. Но никто не мешает нам подменить это значение, например, на роль "админа" и на фронте мы увидим интерфейс админа или любой другой роли.



Но это просто фронт, скажете вы. Да, это просто фронт, но это наш промежуточный шаг. Затем мы легко и быстро можем проверить, доступны ли нам эти методы. И по моей статистике, в большинстве случаев окажется, что нам доступны эти методы.



В итоге к какому импакту это приводит?

1. Повышение привилегий внутри одного акканта, если там есть ролевая модель или же платная и бесплатная версия

2. IDORы, мы получаем новые методы и там могут быть IDORы

3. Обход какого-то функционала, за последнее время так получалось обойти KYC на бирже и подключать платные подписки



Некоторый процент из этих API методов можно найти и в JS файлах, но не все и не всегда. Зачастую в приложениях все методы не описываются в 1 JS файлы и пока нам недоступен этот функционал, то не найдем их. Ну и этот способ максимально простой тебе на фронте остается нажать просто на кнопку и запрос сам сформируется, не нужно собирать вручную из JS.



Как подменять?

Самый простой и эффективный способ - использовать Burp:

Tools -> Proxy -> Match and Replace rules -> add -> Response body и заменяем значение, например, false на true или basic на premium. Если permissions уникальные, такое тоже часто встречается, то часто встречаются и методы, которые выплевывают списки всех существующих permissions.



#bypass #logic #tampering