Модули
-
Охота за IDOR или о том, как атака в лоб ничего не дала, но давно забытый эндпоинт в приложении открыл мне доступ к информации о сотнях тысяч клиентов.
Мой пентест начался с четкой, даже бытовой цели: найти «золотой» промокод — разработческий или тестовый — который позволил бы хоть раз заказать еду бесплатно в сервисе доставки. Это была та самая «красная нить», которая вела меня через все этапы исследования.
Атака началась с классики — web-приложения компании. SQL-инъекции, XSS, подбор параметров... всего этого не было, я хочу бургер с колой, а не сушеные сухари. Увы, кроме пары тривиальных дефектов уровня «QA пропустил», ничего стоящего. Глубокий анализ js подарил несколько API-ключей к внутренним сервисам мониторинга, но это было не то. Двери в систему с фронтенда оказались надежно заперты. Пора было менять тактику. К слову, это заняло пару дней, по этому мой голод усилился. Если фронт крепок — ищи лазейку с фланга. А самым сочным флангом сегодня почти всегда является мобильное приложение.
Я быстро развернул эмулятор, настроил проксирование трафика через Burp и принялся за обход SSL Pinning — стандартный ритуал перед штурмом. К моему удивлению, live-трафик приложения тоже не блистал уязвимостями. Эндпоинты были прилично защищены, токены валидировались. Но у меня оставался козырь — статический анализ. И тогда я достал Jadx. Обфускация ProGuard была, но настолько «тривиальная», что логика приложения и строковые константы остались читаемыми. Далее немного grep и find, пара сиг и мы нашли то, что искали. В груде мусора и старых данных лежал ничем не примечательный /api/user?phone=<phone.number> (формат изменен для безопасности).
Я тут же протестировал его. Подставил свой номер — получил в ответ JSON не только со своими данными, но и с:
- Адресами доставки (всеми когда-либо использованными)
- Балансом бонусного счета
- Активными промокодами
- Токеном корзины (cart_token) — это был динамический ключ, который позволял оформить заказ от лица этого пользователя.
- И другая информацияНо я не был авторизован в этот момент. Получается, данную инфу можно получить просто так, зная лишь номер телефона. Я это проверил и это было действительно так. Классический IDOR, но не на текущем API, а на каком-то легаси-эндпоинте, который, видимо, забыли выключить. Достаточно знать номер телефона — и перед тобой открывается профиль любого пользователя.
«Но чтобы получить данные, нужен номер телефона», — скажете вы. И будете правы. Но это не барьер, а следующая задача. Мне же нужны были не случайные клиенты, а именно «золотые» промокоды, доступные сотрудникам.
В дело вступил OSINT:
- Вакансии. На сайтах по поиску работы HR компании оставляют свои контакты. Целый список корпоративных номеров — готов.
- Соцсети. Анализ VK, Telegram сотрудников из техотделов и отдела тестирования. Кто-то упоминал проект, кто-то оставлял номер в публичном профиле.
- Легкий социнжиниринг. В духе «Здравствуйте, я из такой то компании, как мне связаться с...».Буквально через пару часов у меня был список номеров, которые с высокой вероятностью принадлежали сотрудникам. Дальше дело техники и креатива.
Скажу сразу, нет я не поел, пока что, но я думаю уже совсем скоро у меня будут мои бургер и кола.