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 强制追加斜杠,用于精确爆破目录。
4.5 高级技巧与避坑指南
目录爆破不能瞎搞。有时候一顿操作猛如虎,一看结果全是404。这里分享几个技巧:
4.5.1 字典选择策略
字典大小直接影响速度和准确性。太小的字典可能漏掉关键路径;太大的字典会浪费大量时间,还可能触发WAF。
我的策略是分阶段:
- 先跑一个小字典(如
common.txt,约2000行),快速抓大路径 - 再跑一个中字典(如
directory-list-2.3-medium.txt,约87万行),深挖 - 对感兴趣的子目录,做递归扫描
4.5.2 响应码分析
你以为只有200才叫"存在"?那可太天真了:
- 200:文件存在,内容正常
- 301/302:重定向,往往是目录
- 403:禁止访问,说明路径存在但权限不够(值得深挖)
- 401:需要认证,也可能是后台入口
- 500:服务器内部错误,有时说明路径存在但参数不正确
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 知识体系一览
下边这张图,把目录爆破的整个流程串起来了:
这张图把整个目录爆破的闭环走了一遍:从确定目标,到选字典、配工具、出结果,最后才是利用。每一步都有坑,但也都有解。
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因为快,可以在相同时间内扫更多的字典条目。而且它对大字典的支持更好,内存占用低,不会卡死。
4.8 文件发现的延伸思路
目录爆破是核心手段,但不是唯一手段。文件发现问题可以延伸到:
- Git泄露:扫到
.git/目录,用git-dumper把源码拉下来 - 敏感文件搜索:用
dirb扫.DS_Store、Thumbs.db这些系统文件 - Python脚本辅助:写个简单的脚本,扫描特定文件名模式(如时间戳命名的备份文件)
有一次渗透,我用Gobuster扫出一个 /logs/ 目录。进去一看,是Tomcat的访问日志,里面居然包含了管理员的会话ID。所以说,目录爆破只是第一步,关键是怎么利用扫出来的东西。