Проведення пентесту веб-додатку
Пентест (penetration testing) - це контрольована симуляція реальної атаки на веб-додаток. На відміну від аудиту безпеки, пентест фокусується на активній експлуатації уразливостей та ланцюгах атак, а не лише на виявленні окремих проблем.
Види пентесту за рівнем знань
Black Box — тестувальник не має інформації про систему. Максимально реалістична імітація зовнішнього атакуючого. Займає більше часу на розвідку.
Grey Box — часткова інформація (облікові записи звичайного користувача, загальна архітектура). Найпоширеніший варіант для веб-додатків.
White Box — повний доступ до коду, архітектури, облікових даних. Дозволяє знайти максимум уразливостей за мінімальний час.
Методології
- OWASP Testing Guide — де-факто стандарт для веб-додатків
- PTES — методологія всього процесу
- WSTG — 150+ конкретних тест-кейсів
Фаза 1: Pre-engagement
Документи перед початком:
- Statement of Work (SoW) — область тестування, виключення
- Rules of Engagement — дозволені техніки, часові рамки
- Permission Letter — письмове дозвіл на тестування
- Emergency Contacts — кого звонити при виявленні критичної уразливості
Фаза 2: Розвідка (OSINT)
subfinder -d example.com -o subdomains.txt
assetfinder --subs-only example.com >> subdomains.txt
amass enum -passive -d example.com >> subdomains.txt
dnsx -l subdomains.txt -a -aaaa -cname -mx -resp
site:example.com filetype:pdf
site:example.com inurl:admin
curl "https://crt.sh/?q=%.example.com&output=json" | jq '.[].name_value'
waybackurls example.com | sort -u
Фаза 3: Сканування та аналіз
nmap -sV -sC -p- -T4 --open target.example.com \
-oA scans/nmap_full
gobuster dir -u https://target.example.com \
-w /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt \
-x php,html,js,json,txt -o gobuster.txt
wapiti -u https://target.example.com --modules all -o wapiti_report.html
gau target.example.com | grep "\.js$" | sort -u > js_files.txt
cat js_files.txt | xargs -I {} linkfinder -i {} -o cli
Фаза 4: Експлуатація
Приклад ланцюга атаки:
1. OSINT: знайдена витоку credentials у GitHub-репозиторії розробника
2. Панель адміністратора: /admin доступна без 2FA
3. Вхід із знайденими credentials → успішний вхід
4. Admin panel: функція "Export users" → SQL-інʼєкція у параметрі filter
5. sqlmap --os-shell → Remote Code Execution
6. Витягнення .env файлу → ключі AWS S3
7. aws s3 ls → доступ до бэкапів бази даних
IDOR тестування:
session_a = "cookie_user_a"
session_b = "cookie_user_b"
objects_b = [101, 102, 103, 204, 305]
for obj_id in objects_b:
r = requests.get(
f"https://target.com/api/documents/{obj_id}",
cookies={"session": session_a}
)
if r.status_code == 200:
print(f"IDOR confirmed: document {obj_id} accessible")
Race Conditions:
import threading, requests
def apply_promo(session_token):
r = requests.post("https://target.com/api/promo/apply",
json={"code": "PROMO50"},
headers={"Authorization": f"Bearer {session_token}"}
)
threads = [threading.Thread(target=apply_promo, args=(token,)) for _ in range(10)]
[t.start() for t in threads]
[t.join() for t in threads]
Фаза 5: Post-exploitation
Документувати максимальний вплив:
- Які дані доступні (PII, фінансові, медичні)
- Можливість горизонтального переміщення
- Можливість сохранення доступу
- Вплив на бізнес (нормативний, фінансовий, репутаційний)
Фаза 6: Звітування
Структура звіту:
1. Executive Summary
- Загальна оцінка ризику
- Топ-3 критичні знахідки
- Рекомендації для керівництва
2. Технічна частина
- Кожна уразливість: опис → PoC → вплив → рекомендація
- Скриншоти та HTTP-трафік як доказ
- CVSS score для кожної знахідки
3. Методологія
- Використані інструменти
- Хронологія тестування
- Що НЕ тестувалося і чому
4. Дорожна карта виправлень
- P1 (Critical): виправити за 24–72 години
- P2 (High): виправити за 1–2 тижні
- P3 (Medium/Low): наступний реліз
Retesting
Після виправлення уразливостей проводиться повторне тестування специфічних знахідок.
Тривалість
| Додаток | Black Box | White Box |
|---|---|---|
| Простий сайт | 3–5 днів | 2–3 дні |
| SaaS / маркетплейс | 10–14 днів | 7–10 днів |
| Банківський / фінансовий | 21–30 днів | 14–21 день |
| Повторне тестування | 1–3 дні | 1–2 дні |







