Обсудить проект

Пентест веба с нуля: разведка, которую ты делаешь неправильно

26.06.2026

«Большинство пентестеров начинают с Nmap. Большинство пентестеров пропускают половину поверхности атаки.» 💀

Разведка — это не nmap -sV target.com и бежать дальше. Это 40–60% всего энгейджмента. Если ты делаешь её плохо — ты просто красиво пропускаешь баги мимо рта.

🗺️ Этап 1: Пассивная разведка (не трогай цель руками)

Прежде чем слать хоть один пакет — собери всё, что лежит в открытом доступе. WAF не видит, логи молчат, ты в плюсе.

Домены и субдомены:

# Passive subdomain enum
subfinder -d target.com -silent -o subs.txt
amass enum -passive -d target.com -o amass_subs.txt
cat subs.txt amass_subs.txt | sort -u > all_subs.txt

Исторические данные и забытые эндпоинты:

# Wayback Machine — кладбище старых endpoint'ов
waybackurls target.com | tee wayback.txt
gau target.com --threads 5 | tee gau.txt
cat wayback.txt gau.txt | sort -u | grep -E "\.(php|asp|aspx|jsp|json|xml|bak|old|zip)"

💡 Лайфхак: Ищи .bak, .old, .zip — разработчики обожают оставлять бэкапы прямо на проде. Это не баг, это традиция.

Google Dorks — твой лучший друг:

site:target.com ext:php inurl:admin
site:target.com inurl:api/v1
site:target.com filetype:env
site:target.com "index of /"
inurl:target.com intext:"sql syntax"

🔍 Этап 2: Активная разведка (теперь можно шуметь)

DNS — там всегда что-то интересное:

# Zone transfer (да, в 2026 это ещё работает на некоторых серверах)
dig axfr @ns1.target.com target.com

# Брутфорс субдоменов
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
  -u "https://FUZZ.target.com" -mc 200,301,302,403

# Проверяем живые хосты
cat all_subs.txt | httpx -silent -status-code -title -tech-detect

Fingerprinting — знай, с чем работаешь:

whatweb -a 3 https://target.com
wappalyzer-cli https://target.com

🔥 Эй, ты забыл про заголовки! curl -I https://target.com — смотри на Server, X-Powered-By, X-AspNet-Version. Это бесплатная инфа о стеке.

💻 Этап 3: Chrome DevTools — то, что сканер не найдёт никогда

Вот где большинство пентестеров реально косячат. Открыл Burp, запустил Spider — думаешь, всё собрал? Нет, бро. 😎

Алгоритм работы в DevTools:

  1. Открой F12 → Network → Fetch/XHR
  2. Поставь фильтр Fetch — это все API-вызовы приложения
  3. Кликай по всем функциям приложения: логин, профиль, поиск, оплата
  4. Смотри на запросы — там живут эндпоинты, которые не задокументированы
Что искать в DevTools:
→ Параметры с ID пользователя (IDOR waiting room)
→ Токены в URL-параметрах (не в заголовках — плохой знак)
→ Внутренние API: /api/internal/, /v2/admin/
→ GraphQL endpoint: /graphql, /gql, /api/graphql
→ WebSocket соединения (вкладка WS)

JS-файлы — золотая жила:

# Собираем все JS с сайта
cat wayback.txt | grep "\.js$" | sort -u > js_files.txt

# Ищем захардкоженные секреты
cat js_files.txt | xargs -I{} curl -s {} | \
  grep -E "(api_key|apikey|secret|token|password|aws_|firebase)" -i

# Автоматом — SecretFinder
python3 SecretFinder.py -i https://target.com -e

💣 Факт: ~30% реальных Bug Bounty находок — это секреты в JS-файлах. Разработчики пушат токены в frontend и думают, что их никто не читает.

🕵️ Этап 4: Инфраструктурная разведка

Находим реальный IP за CDN/Cloudflare:

# DNS History
curl "https://securitytrails.com/domain/target.com/history/a"

# Shodan — ищем по SSL cert
shodan search "ssl.cert.subject.cn:target.com" --fields ip_str,port,org

# Censys
censys search "parsed.names: target.com"

Почему это важно? Если найдёшь origin IP — обходишь WAF полностью. Cloudflare стоит перед, а ты идёшь напрямую. WAF — это не стена, это приглашение искать обход. 😈

Открытые порты и сервисы:

# Быстрый скан живых хостов
naabu -l all_subs.txt -top-ports 1000 -silent -o ports.txt

# Детальный скан найденных портов
nmap -sV -sC -p $(cat ports.txt | cut -d: -f2 | tr '\n' ',') target.com

🗂️ Этап 5: Content Discovery — ищем то, что скрыто

# Директории и файлы
ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt \
  -u https://target.com/FUZZ \
  -mc 200,201,301,302,401,403 \
  -t 50 \
  -o ffuf_dirs.txt

# API endpoints — отдельный словарь!
ffuf -w /usr/share/seclists/Discovery/Web-Content/api/objects.txt \
  -u https://target.com/api/v1/FUZZ \
  -mc 200,201,401,403

# Backup files на найденных страницах
for url in $(cat live_urls.txt); do
  ffuf -w backups.txt -u "$url/FUZZ" -mc 200
done

🧠 Нубская ошибка №1: Брутить только / корень. Брути каждый найденный endpoint. /admin нашёл? Брути /admin/FUZZ. Рекурсия — твой друг.

📊 Собираем всё вместе: минимальный чеклист разведки

Шаг Инструмент Что ищем
Passive subdomain enum subfinder, amass Все субдомены
Historical URLs waybackurls, gau Старые/забытые endpoints
JS analysis SecretFinder, grep Токены, API keys, внутренние URL
Fingerprinting httpx, whatweb Стек, версии, заголовки
Origin IP Shodan, Censys Обход WAF/CDN
Content discovery ffuf + правильные wordlists Скрытые директории, API
DevTools manual Chrome/Firefox Undocumented API calls

⚡ Автоматизация: один скрипт — полная разведка

#!/bin/bash
TARGET=$1
echo "[*] Starting recon for $TARGET"

# Субдомены
subfinder -d $TARGET -silent | httpx -silent -o live_subs.txt
echo "[+] Live subs: $(wc -l live_subs.txt)"

# Исторические URL
waybackurls $TARGET | sort -u > wayback.txt
gau $TARGET >> wayback.txt
echo "[+] Historical URLs: $(wc -l wayback.txt)"

# JS секреты
cat wayback.txt | grep "\.js$" > js_files.txt
python3 SecretFinder.py -i js_files.txt -o secrets.txt
echo "[+] Check secrets.txt"

# Директории
ffuf -w ~/wordlists/raft-medium.txt -u "https://$TARGET/FUZZ" \
  -mc 200,301,401,403 -o dirs.txt -of json -t 40
echo "[*] Recon done. Check results."

🚨 Топ-5 ошибок разведки (которые ты точно делаешь)

  1. Запускаешь Nmap первым — шумишь, палишься, пропускаешь пассивную фазу
  2. Используешь дефолтные wordlistscommon.txt на 5000 строк это мусор, используй SecLists
  3. Забываешь про мобильное API/api/mobile/v1/ живёт отдельно и часто без аутентификации
  4. Не смотришь JS-файлы — там половина твоих находок
  5. Останавливаешься на 403403 ≠ нет доступа, это 403 = попробуй по-другому 🔑

Итог: Разведка — это не инструмент, это мышление. Burp Suite без понимания что искать — просто дорогой прокси. Думай как разраб, который торопился в пятницу и забыл удалить /test/admin_old/. Он всегда где-то есть. 💀