Что вижу: Все мобилки в проде любят играть в «прятки» — API у них не совпадает с вебом. На фронте кнопка — три запроса, а в бинарнике — ещё 10 эндпойнтов под капотом: /beta/
, /internal/
, /debug/healthcheck
.
Как поймал: mitmproxy + jadx (или обход SSL pinning, привет frida) → слушаем трафик, смотрим смали-код.
Чем пахнет: Класс IDOR/инфолики/админки. Вероятность утечки меда из бэкэнда — 8/10.
Че по чём
Эксплойт:
— Находишь скрытый endpoint /api/v2/internal/user/info?user_id=1337
→ подсовываешь чужой user_id
, получаешь чужие данные.
— Или /api/v1/dev/debug/logs
→ запрос без токена, а в ответ тебе весь лог сервиса с токенами AWS.
— Payload уровня:
1 |
curl -k -H "X-Auth: fake" https://api.target.com/v2/internal/diag |
Обход защиты:
— Если включили SSL pinning → frida script bypass_sslpinning.js
за пару строк.
— Если WAF тупо фильтрует → юзаем X-Original-Method: POST
/ X-HTTP-Method-Override: GET
.
Доказательство:
Скрин: /config/dev/settings.json
в проде отдаёт {"debug_token":"supersecret","db":"mysql://root:12345"}
. Видишь root-пароль? Это не скрин старого резюме, это прод в лайве.
Советы:
3 вектора для добивания:
1. Фаззить через wordlist типа apiphone.txt
(там /mobile/
, /dev/
, /qa/
, /staging/
).
2. Вытаскивать список эндпойнтов прямо из мобильного .apk
— jadx -d out app.apk | grep "https://"
3. Мониторить GraphQL introspection ({"query":"{__schema{types{name}}}"}
) — часто оставляют неотрезанным.
План атаки:
1. Декомпилишь апку → вынимаешь URL’ы.
2. Прогоняешь nuclei по найденным паттернам (/debug
, /beta
, /internal
).
3. Проверяешь авторизацию → если дырка IDOR, тапкаешь PII. Если endpoint про debug — ищешь creds/SSH-ключи/Cloud-токены.
4. Кидаешь PoC: curl https://api.target.com/admin/feature-toggle
→ меняешь флаг isPremium=1.
Итог:
Скрытые endpoints в мобильном API — это как чердак в общаге: туда никто не ходит, но там и роутер без пароля, и бутылки из-под пива, и старые логи продакшена. Всё, что не должно торчать наружу, всё там.