.env 泄露挖掘:ffuf 一把梭哈,10 个扩展名扫一圈

导语:𝐤𝐣𝐮𝐥𝐢𝐮𝐬 一条 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编辑器或运维手动备份的旧版本,常和原文件同名带后缀
.dbSQLite 数据库,开发期随手放进 web root
.7z / .zip / .tar.gz整站打包备份、源码包
.mdREADME、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

参考链接:

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容