Перевірка власного сайту на витік конфігураційних файлів

Перевірка власного сайту на витік конфігураційних файлів

Покрокова інструкція для пошуку доступних ззовні .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

Коментувати

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.