Перевірка власного сайту на витік конфігураційних файлів
Покрокова інструкція для пошуку доступних ззовні .env,
.git та бекапів конфігів.
Клас вразливості: Information Disclosure — OWASP A05:2021, CWE-538.
1 Базова перевірка одного файлу
curl -sI https://site.com/.env
| 403 / 404 | файл захищений, усе гаразд |
| 200 | вразливість підтверджена — дивимось вміст |
curl -s https://site.com/.env | head
2 Baseline для soft 404
Перед масовим скануванням перевірте, що сервер віддає на неіснуючий шлях:
curl -s -o /dev/null -w '%{http_code} %{size_download}\n' https://site.com/random-$(date +%s)
Важливо: якщо код
200 — сайт завжди віддає 200 (SPA/CMS routing), далі фільтруйте за розміром відповіді (-fs), а не за кодом.
3 Словник ключових файлів
cat > dotfiles.txt <<'EOF'
.env
.env.bak
.env.local
.env.old
.git/config
.git/HEAD
.htaccess
.htpasswd
.DS_Store
composer.json
EOF
4 Масове сканування
ffuf
ffuf -u https://site.com/FUZZ -w dotfiles.txt -mc 200 -rate 20
-mc 200— показувати лише код 200-rate 20— обмеження швидкості, щоб не навантажувати продакшн і не тригерити WAF
nuclei
nuclei -u https://site.com -t http/exposures/configs/ -rate-limit 20
5 Інтерпретація результатів
| Результат | Дія |
|---|---|
| 403 / 404 | норма |
| 200 + конфіг у тілі | підтверджений витік — ротація секретів, перенесення файлу поза веб-корінь |
| 200 + однаковий розмір | soft 404, не вразливість |
⚠ Правило: сканувати тільки свій домен або домен, на перевірку якого є письмовий дозвіл власника. Без дозволу активне сканування — несанкціонований доступ (ст. 361 КК України).
6 Розширений словник SecLists
Власний словник на 10 слів покриває лише базові варіації .env. Для повноцінної перевірки використовуйте публічний набір словників SecLists — тисячі реальних імен файлів, зібраних зі статистики пентестів.
Встановлення (стандартний шлях)
sudo apt install seclists
Увага: пакета
seclists немає у стандартних репозиторіях Ubuntu/Linux Mint (є у Kali/Parrot). Якщо apt видає E: Не можу знайти пакунок — клонуйте з GitHub вручну в домашню директорію, без sudo:
mkdir -p ~/tools
git clone --depth 1 https://github.com/danielmiessler/SecLists.git ~/tools/SecLists
Без sudo — директорія одразу належить вашому користувачу, git pull для оновлення працюватиме без додаткових прав. Розмір: ~1 ГБ (з --depth 1, без історії комітів).
Лише потрібний підкаталог (економія місця)
git clone --depth 1 --filter=blob:none --sparse https://github.com/danielmiessler/SecLists.git ~/tools/SecLists
cd ~/tools/SecLists
git sparse-checkout set Discovery/Web-Content
Результат: кілька десятків МБ замість ~1 ГБ.
Зручний доступ через змінну оточення
echo 'export SECLISTS=$HOME/tools/SecLists' >> ~/.zshrc
source ~/.zshrc
Сканування з повним словником
ffuf -u https://site.com/FUZZ \
-w $SECLISTS/Discovery/Web-Content/quickhits.txt \
-mc 200 -rate 20
Для глибшої перевірки бекапів і конфігів:
ffuf -u https://site.com/FUZZ \
-w $SECLISTS/Discovery/Web-Content/raft-small-files.txt \
-mc 200 -rate 20


Коментувати