导语:𝐤𝐣𝐮𝐥𝐢𝐮𝐬 一条 4 行的 #bugbountytips 推文,给出了 .env 泄露挖掘的完整命令 —— ffuf 加 Bo0oM fuzz.txt wordlist 加 10 个敏感扩展名。一行命令跑完,就能把目标站点的备份、数据库、源码包、密钥文件全部摸一遍。本文把这条 tip 翻译 + 扩写,从红队视角讲清楚这一招为什么能挖到云端钥匙。
一、原推文核心
推文作者 𝐤𝐣𝐮𝐥𝐢𝐮𝐬(@ethical_h4ck3r_)给的三件套:
- Wordlist:github.com/Bo0oM/fuzz.txt —— 一份高频敏感路径字典,覆盖配置文件、备份文件、源码包、隐藏目录
- 工具:github.com/ffuf/ffuf —— Go 写的 Web Fuzz 工具,比 dirbuster/gobuster 更灵活
- 命令:
ffuf -u https://target[.]com/FUZZ -w wordlist.txt -mc all -e .env, .bak, .db, .7z, .zip, .md, .txt, .tar.gz
-e 后面跟的 10 个扩展名,是这套组合的精髓 —— 在原 wordlist 的路径基础上,再拼一遍 .env、.bak 这种带扩展名的版本。配置不当的 Web 服务器、CI/CD 漏配、运维误操作,常常把这些文件直接放在 web root 下。
二、.env 是个什么东西
.env 文件本来是 12-Factor App 推崇的配置载体,把数据库连接串、API 密钥、AWS credentials 这些不该写死在代码里的东西,放到一个不进版本库的纯文本文件里。问题在于:
- 框架默认从项目根目录加载
.env(Laravel、Django、Next.js、Symfony 等等都是这套约定) - 开发环境用的是
.env,生产环境运维一不留神把.env.example复制成.env忘了改,或者.gitignore没生效 - 部署脚本经常把整个项目目录 rsync 到 web root,包括那个 .env
- CI runner 在编译前端(
npm run build)时把根目录的 .env 也带进了 dist 目录
任何一处失守,攻击者拿到的不只是一个数据库,而是整套基础设施的钥匙 —— AWS access key、Stripe secret、SendGrid token、Slack webhook、内部 VPN 凭证。一个 .env 文件常常就是一次完整云端接管的入场券。
三、那 10 个扩展名为什么这么选
逐个拆解 𝐤𝐣𝐮𝐥𝐢𝐮𝐬 给的扩展名列表,看看每一条对应什么类型的泄露:
| 扩展名 | 常见情况 |
|---|---|
.env | 应用配置 + 密钥 |
.bak | 编辑器或运维手动备份的旧版本,常和原文件同名带后缀 |
.db | SQLite 数据库,开发期随手放进 web root |
.7z / .zip / .tar.gz | 整站打包备份、源码包 |
.md | README、CHANGELOG、技术文档,可能泄露内网域名、内网 IP、账号命名规范 |
.txt | 各种杂项:notes.txt、todo.txt、credentials.txt、debug.txt |
这套组合的设计思路是「兜底型 FUZZ」 —— 不指望 wordlist 命中精确路径,但相信 web root 下一定有某种类型的备份/配置文件露在外面。.env 这种关键词命中最好,命中不了就退到 .bak、.zip,总有一款中招。
四、ffuf 比 dirbuster 强在哪
ffuf 是 Go 写的,单文件无依赖,并发跑起来飞快。几个关键 flag:
-mc all匹配所有 HTTP 状态码(包括 403、500),靠大小过滤而不是状态码过滤-e给所有 wordlist 里的路径拼扩展名,等于一次跑出多条请求-recursion递归扫描,对发现的目录自动钻进去-fs/-fl/-fw按响应大小/行数/字数过滤噪音,把 404 页统一剔除-ac自动校准,对静态 404(即使是 200 但内容固定)做归一化
实战命令比推文里那条更完整:
ffuf -u https://target[.]com/FUZZ
-w wordlist.txt
-e .env,.bak,.db,.7z,.zip,.md,.txt,.tar.gz
-mc all
-fs 1234
-t 50
-recursion -recursion-depth 2
-t 50 开 50 个并发,加 -recursion 让命中目录自动往里钻两层。
五、红队视角:拿到 .env 之后怎么办
真正挖到一份 .env 之后,下一步不是入库截图交差,是顺着里面的凭据往里走。常见的攻击路径:
- AWS access key → 直接跑
aws sts get-caller-identity看账户,再aws s3 ls翻桶,运气好整个用户数据库都在桶里 - 数据库连接串 → 直连生产库,dump 用户表,或者用 SQL 注入的同类思路做后渗透
- Stripe / SendGrid / Slack secret → 调官方 API 测试可用性,可用就直接发钓鱼 / 群发垃圾邮件 / 接管通知
- JWT secret → 自己签发 admin token,免登录直进后台
- 第三方 OAuth client secret → 伪造 callback,劫持用户授权流
这套链路打穿,CRITICAL 漏洞报告就到手了 —— 一个 .env 泄露,奖金额度经常在 $5,000 到 $50,000 区间。
六、防御建议
从运维和开发两端断这条路:
- Web 服务器配置:Nginx/Apache 加规则,禁止
.env、.bak、.git、.sql等敏感后缀的访问。.env*直接 404 或 403 - CI/CD 流水线:
.gitignore必须含.env,强制走 Secret Manager(AWS Secrets Manager、HashiCorp Vault、1Password CLI)而不是文件注入 - 部署脚本:rsync / scp 时用
--exclude=.env --exclude=.bak --exclude=*.sql排除敏感文件 - 定期 FUZZ 自己:把 𝐤𝐣𝐮𝐥𝐢𝐮𝐬 这条命令反过来跑一遍自家域名,命中了立刻处理
- 文件权限:.env 文件 chmod 600,属主是运行用户,目录不允许 web 服务器读
更彻底的做法是把所有配置走 Vault / SSM / Doppler 这类凭据管理服务,从根上消灭”web root 里有明文凭据”这件事。
原文出处:𝐤𝐣𝐮𝐥𝐢𝐮𝐬 on X
参考链接:














暂无评论内容