#word-list #directory #scanning #command-line #scraping #command-line-tool #run

app dirble

快速目录扫描和抓取工具

1 个稳定版本

1.4.2 2024年3月7日

#401 in Unix API

GPL-3.0-or-later

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