1 个稳定版本
1.4.2 | 2024年3月7日 |
---|
#401 in Unix API
140KB
3K SLoC
简介
Dirble是适用于Windows和Linux的网站目录扫描工具。它设计得既快速又易于使用。
如何使用
下载Linux、Windows或Mac的预编译二进制文件之一,或使用Cargo编译源代码,然后从终端运行。Dirble默认使用的词表是当前目录中的dirble_wordlist.txt。
可以使用以下命令在BlackArch中安装: sudo pacman -S dirble
还有一个Docker镜像,可以按如下方式运行: docker run --rm -t isona/dirble [dirble arguments]
可以使用以下命令显示帮助文本: dirble --help
,或者可以在GitHub wiki上找到: https://github.com/nccgroup/dirble/wiki/Help-Text
示例用途
使用当前目录中的默认dirble_wordlist.txt运行针对网站的扫描: dirble [address]
使用不同的词表,包括.php和.html扩展: dirble [address] -w example_wordlist.txt -x .php,.html
启用可列表的目录抓取: dirble [address] --scrape-listable
提供扩展列表和主机列表: dirble [address] -X wordlists/web.lst -U hostlist.txt
通过命令行提供多个要扫描的主机: dirble [address] -u [address] -u [address]
使用 Gobuster 默认风格,禁用递归,并使用 10 个线程扫描主目录: dirble [地址] --max-threads 10 --wordlist-split 10 -r
从源代码构建
要在当前平台构建,请确保已安装 cargo,然后运行 cargo build --release
。或者,运行 make
将在发布模式下构建二进制文件(内部运行 cargo build --release
)。
要为 32 位和 64 位的 Linux 和 Windows 目标进行交叉编译,有一个方便的 makefile。运行 make release
将使用 cross
为所有四个目标构建。这取决于是否已安装 cross 和 docker(《cargo install cross)。
功能
- Cookie
- 自定义头信息
- 扩展名和前缀
- HTTP 基本认证
- 可列出目录检测和抓取
- 将输出保存到文件
- 将输出保存为 XML 和 JSON 格式
- 代理支持
- 递归
- 状态码黑名单和白名单
- 线程
- 请求节流
- 根据响应代码和长度检测每个目录的“未找到”代码
- 能够提供要扫描的 URL 列表
- 用户代理
- 使用 GET、POST 或 HEAD 请求进行扫描
- 从输出中排除响应长度的范围
性能
以下图表是通过在每个工具上运行 Hyperfine 并针对具有 5ms 延迟和 1% 数据包丢失的测试服务器生成的。(由于缺乏递归,省略了 Gobuster)。
工作原理
目录检测
Dirble 根据服务器发送的响应代码检测文件。根据响应代码类型,可以大致将其分类。
200
:路径存在且有效301, 302
:重定向;报告代码、大小和 Location 头信息404
:未找到;默认情况下,这些响应不会被报告- 所有其他响应代码都以 Dirble 格式报告,格式为
+ [url] (CODE:[code]|SIZE:[size])
如果对不带尾部斜杠的 [url]
(无尾部斜杠)发出请求返回 301 或 302 重定向到 [url]/
(有尾部斜杠),则路径被视为 目录。这会报告一个 D
前缀,如果启用递归,则将其添加到扫描队列。这种方法不依赖于重定向目标是否存在或可访问,因此将发出单独的请求以确定目录的响应代码和大小。
可列表目录通过检查 url/
的内容来检测:如果它返回一个 200 响应码,并且主体包含 "父目录"、"向上" 或 "目录列表"(不区分大小写),那么它很可能是一个可列表目录。如果启用 --scrape-listable
,则从列表中解析出 URL(忽略排序链接或超出范围的链接),如果它们以斜杠结尾,则将它们添加到扫描队列。输出中的可列表目录前有一个 L
前缀。
线程
Dirble 的多线程行为基于 词表 和 任务 的概念。一个 任务 是任何可以独立于其他任务运行的任务,例如请求一系列 URL。一个 词表 是一个具有定义的转换的单词列表,例如列表 {admin, config, shop}
与转换 append ".php"
组成一个单个词表实例。
为了进一步提高性能,我们引入了 词表拆分 的概念。这是将单个 词表 实例(即具有转换的单词)拆分为多个任务的过程,每个任务负责列表的一部分。每个词表拆分的交错部分的数量由 --wordlist-split
选项定义(默认为 3)。
每当检测到目录(并且启用了递归)时,就会为每个拆分的词表(带转换)创建新的任务,并将其添加到中央 任务队列 中。
并发任务的最大数量由 --max-threads
参数定义,Dirble 会随着任务的添加到队列而启动任务,直到达到这个限制。每当一个任务完成(即拆分的词表耗尽)时,Dirble 将从队列中取出下一个任务并启动它。
根据 GPL v3.0 发布,有关更多信息请参阅 LICENSE
依赖关系
~19–28MB
~453K SLoC