4. Web信息收集:目录爆破与文件发现

你拿到了一个目标网站的域名和IP,扫完端口发现只开了80和443。接下来该做什么?

我个人习惯,先做一遍目录爆破。为什么呢?因为很多好东西就藏在那些「不该被访问」的路径里。后台、备份文件、测试页面、API文档……这些东西不会出现在首页的导航菜单里,但却是我们进攻的绝佳入口。

4.1 为什么要做目录爆破

说白了,目录爆破就是拿字典去撞网站的路径。目标服务器会返回200、403、404这些状态码。我们从海量响应里,找出那些「存在」的路径。

我在项目中遇到过,一个看似普通的博客站,用Gobuster扫了10分钟,爆出个 /backup/ 目录。里面直接放着整站源码和数据库导出文件。嗯,这种「惊喜」几乎在每个靶标里都会出现。这就是目录爆破的价值所在。

常见的敏感目录和文件包括:

  • 管理后台:/admin/、/manager/、/login/
  • 备份文件:.bak、.sql、backup.zip
  • 配置文件:/config/、.env、config.php
  • API文档:/swagger/、/api/docs
  • 源码仓库:.git/、.svn/、/WEB-INF/

4.2 常用工具对比

我早期做目录爆破,用的是Dirbuster。后来发现Gobuster要快得多,而且对Go语言写的工具天生有信任感。来,看看他俩的对比:

特征 Dirbuster Gobuster
运行环境 Java,跨平台 Go,单文件
扫描速度 中等,依赖线程数 极快,原生并发
功能扩展 仅目录/文件 目录、DNS、vhost、S3
字典管理 内置多种字典 依赖外部字典文件
递归扫描 支持 支持(-r参数)

如果你在渗透测试中追求效率,Gobuster是更好的选择。我做快速漏洞验证时,首选就是它。

4.3 Dirbuster实战

Dirbuster有图形界面,也有命令行。命令行更适合脚本化操作。

先看命令行版本:

java -jar dirbuster.jar -u http://target.com -l /usr/share/wordlists/dirb/common.txt -t 20 -r 200 -s 200,204,301,302,307,403

各参数解释:

  • -u:目标URL
  • -l:字典路径
  • -t:线程数,我一般设20-50
  • -r:递归深度
  • -s:显示哪些状态码

图形界面的用法呢?启动后填入目标URL,选择字典,设好线程,点Start。界面会实时显示当前扫到的路径。Dirbuster会分别显示不同状态码,200的标绿,403的标黄,301的标蓝,一目了然。

提示:字典是目录爆破的灵魂。我常用的字典是 common.txt 和 directory-list-2.3-medium.txt。建议把SecLists里的字典都拉下来备着。

4.4 Gobuster实战

Gobuster用起来非常简洁。安装后就是一个二进制文件,直接运行。

最基本的目录爆破命令:

gobuster dir -u http://target.com -w /path/to/wordlist.txt -t 50

再加几个我常用的参数:

gobuster dir -u http://target.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \
  -t 100 -x php,txt,bak,zip,html -r -f

-x 指定要追加的扩展名。我习惯加上 .bak 和 .zip,往往有意外收获。

-r 是跟随重定向。有些目录返回301,跟随过去才能拿到真实文件。

-f 强制追加斜杠,用于精确爆破目录。

重点:Gobuster还能做DNS子域名爆破和vhost扫描。但我更常用的,还是它的目录扫描模式。速度快到飞起,秒杀Dirbuster。

4.5 高级技巧与避坑指南

目录爆破不能瞎搞。有时候一顿操作猛如虎,一看结果全是404。这里分享几个技巧:

4.5.1 字典选择策略

字典大小直接影响速度和准确性。太小的字典可能漏掉关键路径;太大的字典会浪费大量时间,还可能触发WAF。

我的策略是分阶段:

  1. 先跑一个小字典(如 common.txt,约2000行),快速抓大路径
  2. 再跑一个中字典(如 directory-list-2.3-medium.txt,约87万行),深挖
  3. 对感兴趣的子目录,做递归扫描

4.5.2 响应码分析

你以为只有200才叫"存在"?那可太天真了:

  • 200:文件存在,内容正常
  • 301/302:重定向,往往是目录
  • 403:禁止访问,说明路径存在但权限不够(值得深挖)
  • 401:需要认证,也可能是后台入口
  • 500:服务器内部错误,有时说明路径存在但参数不正确
注意:有些WAF会对目录爆破返回统一的404或空响应。如果发现扫到的全是404,但访问首页正常,那八成是被拦了。我曾经遇到过,换了个User-Agent和代理,继续扫,就露出马脚了。

4.5.3 绕过WAF的方法

WAF拦截目录爆破,主要看几个指标:请求频率、User-Agent、请求模式。对策如下:

  • 降低线程:从50降到10,甚至5
  • 随机User-Agent:Gobuster加 --random-agent
  • 使用代理池:通过 --proxy http://127.0.0.1:8080 走代理
  • 延时请求:加 --delay 500ms

4.6 知识体系一览

下边这张图,把目录爆破的整个流程串起来了:

目录爆破知识体系 1. 探测目标 靶标URL / 已知路径 2. 选择字典 common / medium / custom 3. 配置工具 线程数 / 扩展名 / 递归深度 Dirbuster Java GUI / 内置字典 图形化 / 递归深度大 Gobuster Go二进制 / 极快 支持DNS / vhost / S3 4. 分析响应码 200 / 403 / 301 / 401 / 500 5. 攻击/利用 💡 字典选择 先小后大,分阶段 绕过WAF降低线程 ⚠️ 避坑指南 随机User-Agent 延时请求避免封禁

这张图把整个目录爆破的闭环走了一遍:从确定目标,到选字典、配工具、出结果,最后才是利用。每一步都有坑,但也都有解。

4.7 靶标实战:Dirbuster vs Gobuster

我们用一个靶标来演示。假设目标 http://target.local 是个WordPress站。

先用Dirbuster扫:

java -jar dirbuster.jar -u http://target.local -l /usr/share/wordlists/dirb/common.txt -t 30 -r 2 -s 200,403,301

大概跑了2分钟,爆出 /wp-admin/、/wp-content/、/wp-includes/,还扫到个 /readme.html。都是标准路径,没惊喜。

换Gobuster来:

gobuster dir -u http://target.local -w directory-list-2.3-medium.txt -t 100 -x php,txt,bak,zip

同样字典,5分钟跑了87万行。除了前面那些,还爆出 /backup/(403禁止访问)和 /config.bak(直接下载)。

嗯,差距就在这。Gobuster因为快,可以在相同时间内扫更多的字典条目。而且它对大字典的支持更好,内存占用低,不会卡死。

结论:对于同一个靶标,我通常先用Gobuster跑一次大字典,再用Dirbuster的图形界面做手动探索。两个工具互补,效果最好。

4.8 文件发现的延伸思路

目录爆破是核心手段,但不是唯一手段。文件发现问题可以延伸到:

  • Git泄露:扫到 .git/ 目录,用 git-dumper 把源码拉下来
  • 敏感文件搜索:用 dirb 扫 .DS_Store、Thumbs.db 这些系统文件
  • Python脚本辅助:写个简单的脚本,扫描特定文件名模式(如时间戳命名的备份文件)

有一次渗透,我用Gobuster扫出一个 /logs/ 目录。进去一看,是Tomcat的访问日志,里面居然包含了管理员的会话ID。所以说,目录爆破只是第一步,关键是怎么利用扫出来的东西。