2.3.3 目录扫描:Web 隐藏内容的揭示者
在 Web 渗透测试中,除了通过端口扫描识别开放服务,以及通过爬虫探索已知页面外,目录扫描(Directory Scanning),亦称目录爆破(Directory Brute-forcing)或路径枚举(Path Enumeration),是发现目标网站上未被直接链接或公开展示的目录和文件的关键技术。这些隐藏目录或文件可能包含敏感信息、管理后台、备份文件、测试脚本或未授权访问的 API 接口,从而成为攻击者发现漏洞或获取访问权限的突破口。本节将深入探讨目录扫描的原理,并详细演示如何在 Yakit 平台中高效地执行这一任务。
目录扫描的原理与常见目标
目录扫描的核心原理是基于字典(Dictionary)进行暴力猜测。工具会加载一个包含大量常见目录名、文件名及其扩展名的字典,然后向目标网站逐一发送 HTTP/HTTPS 请求,根据服务器的响应状态码和内容来判断该路径是否存在。
目录扫描通常会寻找以下类型的隐藏内容:
-
管理后台/登录入口: 例如
/admin、/login、/manager等,这些路径通常是管理面板的入口。 -
备份文件/临时文件: 例如
index.php.bak、config.php.old、data.sql.zip、~/.bashrc等,可能包含源代码、配置文件或数据库备份。 -
敏感文件/日志文件: 例如
.git、.svn目录、web.xml、log.txt等,可能泄露版本控制信息、系统配置或运行时日志。 -
安装/升级遗留文件: 例如
/install、/update等,可能包含安装向导或默认配置。 -
测试/开发文件: 例如
/test、/dev、debug.php等,可能存在未完善的安全机制或调试信息。 -
通用应用路径: 针对特定 CMS(如 WordPress, Joomla!)或框架的默认路径。
在Yakit中使用目录扫描
- 访问目录扫描模块**:** 在 Yakit 中有两种方法访问目录扫描模块,方法如下图所示。进入该界面后,应看到用于输入URL、选择字典和开始扫描的相关控件。
图:Yakit客户端目录扫描功能入口指引
- 设定检测目标与项目**:**
在“综合目录扫描与爆破”的主界面,您需要指定扫描的目标 URL 和要检测的项目(即使用的字典)。
-
检测目标 (Target URL): 在 "检测目标" 输入框中,输入您想要进行目录扫描的 Web 应用 URL。例如:
http://example.com或https://www.target.com。这个 URL 是所有字典路径的基准。输入的目标格式支持 IP / IP:Port / URL/域名 等,可用逗号分隔,也可用换行分隔。 -
检测项目 (Detection Type): Yakit 预置了多种常用字典或检测类型。点击 "检测项目" 下拉框或输入框,选择或输入您希望使用的字典。常见的选项包括 "爆破备份文件" (用于扫描常见的备份文件扩展名)、"爆破后台" (用于扫描管理面板路径)等。您也可以在额外参数中(下文中介绍)导入自定义的字典文件。
图:Yakit目录扫描功能配置界面
- 配置额外参数(高级选项): 点击界面下方的 "额外参数" 按钮,将展开更详细的配置面板,对目录扫描的行为进行精确控制。
在“额外参数”配置面板中,您可以调整扫描的性能、规避策略及认证方式。本部分参数细分为字典扩展和通用设置两大部分,提供从字典定制到网络行为控制的全面选项:
- 参数组: 额外字典扩展:
图:Yakit目录扫描参数组设置界面
- **临时字典\(小\) \(Temporary Dictionary \(Small\)\):** 允许您输入一个小型、临时的字典内容,直接在输入框中添加路径或文件名。这对于快速测试几个特定路径非常方便。
- **Yakit Payload \(Yakit Payload\):** 允许引用 Yakit 内置的 Payload 库作为字典源。这极大地丰富了字典选择的灵活性,可以直接利用 Yakit 预设的各种攻击 Payload 进行目录爆破。
- **用户自定义字典 \(User\-defined Dictionary\):** 提供 **"上传文件"** 按钮,您可以上传本地的字典文件。这对于使用针对特定目标或特定漏洞类型精心准备的字典至关重要。
- 参数组: default (通用设置): 这组参数涵盖了目录扫描的请求行为、过滤规则和网络配置,确保扫描的效率和准确性:
图:Yakit目录扫描参数配置界面
- **配置额外请求头 \(Additional Request Headers\):** 允许您添加自定义的 HTTP 请求头。例如,可以添加 `Cookie`、`Authorization` 或 `X-Forwarded-For` 等,以模拟特定请求场景或绕过简单的 WAF 规则。
- **延迟请求 \(Request Delay\):** 设置每个请求之间的间隔时间(单位为秒),例如 `0.0` 表示无延迟。适当的延迟可以模拟人类访问行为,降低被目标服务器或安全设备检测并封禁的风险。
- **请求超时 \(Request Timeout\):** 定义每个 HTTP 请求的等待时间(单位为秒),默认为 `10` 秒。如果在此时间内未收到响应,该请求将被视为超时。
- **重定向次数 \(Redirect Count\):** 允许目录扫描器跟随 HTTP 重定向的最大次数,默认为 `5` 次。
- **并发数 \(Concurrency\):** 设置同时进行的 HTTP 请求数量,默认为 `6`。更高的并发量可以加快扫描速度,但可能增加目标服务器的压力。
- **路径爆破前缀 \(Path Brute\-force Prefix\):** 为字典中的每个路径添加一个前缀。例如,如果前缀设置为 `/api/`,字典中有一个 `users`,那么实际请求的路径将是 `/api/users`。
- **添加代理 \(Add Proxy\):** 允许配置 HTTP/Socks 代理服务器,用于隐藏真实源 IP、绕过 IP 限制或在特定网络环境下进行扫描。
- **排除标题黑名单 \(Exclude Title Blacklist\):** 这是一个强大的过滤功能,允许您输入一系列关键词(使用`|`分割)例如 `页面不存在|404 Not Found|No Page|不寻找|404`,如果响应页面的标签内容匹配这些关键词,则认为该路径不存在,从而有效过滤掉大量自定义的 404 页面。
- **路径爆破后辍 \(Path Brute\-force Suffix\):** 为字典中的每个路径添加一个后缀。例如,如果后缀设置为 `.php`,字典中有一个 `admin`,那么实际请求的路径将是 `admin.php`。
- **临时排除状态码 \(Temporary Exclude Status Codes\):** 在扫描过程中,临时排除某些 HTTP 状态码的结果。
- **状态码白名单 \(Status Code Whitelist\):** 仅处理返回特定 HTTP 状态码的响应结果,例如 `200,301,302,403`。
- **额外目标文件 \(Additional Target File\):** 提供一个文件上传选项,用于导入包含额外目标 URL 的文件,可以一次性扫描多个目标。
- **开启 H2 \(Enable H2\):** 开启 HTTP/2 协议支持。
4. 启动扫描并分析结果: 完成所有配置后,点击界面下方的 "开始执行" 按钮。Yakit 将根据您的设置开始从字典中读取路径,并向目标 URL 逐一发送请求。扫描过程中,Yakit 会实时在爆破结果区域显示发现的有效目录和文件并在上方卡片展示当前已经发起的请求数量。
图:Yakit目录扫描结果展示界面