Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
subcrawl — 模块化框架,用于发现和分析网络上的开放目录。爬取URL,提取内容,应用YARA/ClamAV扫描,并将结果输出到MISP、SQLite或控制台,用于威胁情报。 | Kitploit
工具/GitHubGitHub/hpthreatresearch/subcrawl
OSINT (开源情报)漏洞分析信息收集Web安全威胁情报网络爬虫
GitHubhpthreatresearch/subcrawl

subcrawl

模块化框架,用于发现和分析网络上的开放目录。爬取URL,提取内容,应用YARA/ClamAV扫描,并将结果输出到MISP、SQLite或控制台,用于威胁情报。

查看仓库
150362年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

SubCrawl

SubCrawl 是一个由 HP Inc. 威胁研究 团队的 Patrick Schläpfer、Josh Stroschein 和 Alex Holland 开发的框架。SubCrawl 旨在发现、扫描和分析开放目录。该框架采用模块化设计,由四个组件构成:输入模块、处理模块、输出模块和核心爬虫引擎。URL 是主要的输入值,框架会解析这些 URL 并将其添加到队列系统中,然后再进行爬取。URL 的解析是重要的第一步,它会以一个提交的 URL 为基础,通过逐级移除子目录生成额外的待爬取 URL,直至没有子目录剩余。这个过程确保了对 Web 服务器更完整的扫描尝试,并可能发现额外的内容。值得注意的是,SubCrawl 不使用暴力破解方法来发现 URL。所有扫描的内容均来自输入的 URL、URL 解析过程以及在爬取过程中的发现。当发现开放目录时,爬虫引擎会从该目录中提取链接进行评估。爬虫引擎判断该链接是另一个目录还是一个文件。目录会被添加到爬取队列,而文件则会由处理模块进行额外分析。对于每个扫描的 URL,会生成并存储结果,例如内容的 SHA256 和模糊哈希值、是否发现开放目录,或与 YARA 规则的匹配情况。最后,结果数据会根据一个或多个输出模块进行处理,目前共有三个输出模块。第一个提供与 MISP 的集成,第二个简单地将数据打印到控制台,第三个将数据存储在 SQLite 数据库中。由于框架是模块化的,不仅易于配置所需的输入、处理和输出模块,而且开发新模块也非常直接。

框架架构 图 1 - SubCrawl 架构

SubCrawl 支持两种不同的运行模式。首先,SubCrawl 可以以一次性运行模式启动。在这种模式下,用户提供一个文件,其中包含要扫描的 URL,每个输入值以换行符分隔。第二种模式是服务模式。在这种模式下,SubCrawl 在后台运行,并依赖输入模块提供要扫描的 URL。图 1 显示了 SubCrawl 架构的概览。两种运行模式下都使用的组件为蓝色,一次性运行模式组件为黄色,服务模式组件为绿色。

要求

根据选择的运行模式,还需要满足其他前提条件。

一次性运行模式要求

SubCrawl 使用 Python3 编写。此外,运行 SubCrawl 前需要安装几个包。以下命令可用于安装所有必需的包。从 crawler 目录运行以下命令:

root@kitploit:~
$ sudo apt install build-essential
$ pip3 install -r requirements.txt

服务模式要求

如果 SubCrawl 以服务模式启动,可以使用 Docker。因此,需要安装 Docker 和 Docker Compose。有关安装说明,可以直接访问 Docker.com 网站。

  • 安装 Docker Engine
  • 安装 Docker Compose

获取帮助

SubCrawl 通过 -h/--help 参数或直接执行脚本(不带任何参数)提供内置帮助。

root@kitploit:~
  ********         **        ******                               **
 **//////         /**       **////**                             /**
/**        **   **/**      **    //  ******  ******   ***     ** /**
/*********/**  /**/****** /**       //**//* //////** //**  * /** /**
////////**/**  /**/**///**/**        /** /   *******  /** ***/** /**
       /**/**  /**/**  /**//**    ** /**    **////**  /****/**** /**
 ******** //******/******  //****** /***   //******** ***/ ///** ***
////////   ////// /////     //////  ///     //////// ///    /// /// 
~~ Harvesting the Open Web ~~

用法: subcrawl.py [-h] [-f FILE_PATH] [-k] [-p PROCESSING_MODULES] [-s STORAGE_MODULES]

可选参数:
  -h, --help            显示此帮助信息并退出
  -f FILE_PATH, --file FILE_PATH
                        输入 URL 文件的路径
  -k, --kafka           使用 Kafka 队列作为输入
  -p PROCESSING_MODULES, --processing PROCESSING_MODULES
                        要执行的处理模块,以逗号分隔。
  -s STORAGE_MODULES, --storage STORAGE_MODULES
                        要执行的存储模块,以逗号分隔。

  可用的处理模块:
  - ClamAVProcessing
  - JARMProcessing
  - PayloadProcessing
  - TLSHProcessing
  - YARAProcessing

  可用的存储模块:
  - ConsoleStorage
  - MISPStorage
  - SqliteStorage

一次性运行模式

此模式适用于快速扫描数量可控的域名。为此,需要将要扫描的 URL 保存在一个文件中,作为爬虫的输入。以下是一次性运行模式的执行示例,注意 -f 参数后跟一个文件路径。

root@kitploit:~
python3 subcrawl.py -f urls.txt -p YARAProcessing,PayloadProcessing -s ConsoleStorage

服务模式

使用服务模式可以扫描大量域名并保存结果。根据所选存储模块,可以详细分析和评估数据。为了方便用户运行服务模式,我们将所有功能构建到了 Docker 镜像中。在服务模式下,要扫描的域名通过输入模块获取。默认情况下,会从 URLhaus 和 PhishTank 下载新的恶意软件和钓鱼 URL,并将其加入扫描队列。所需的处理模块和存储模块可以直接在 config.yml 中设置。默认情况下,启用了以下处理模块,并使用 SQLite 存储:

  • ClamAVProcessing
  • JARMProcessing
  • TLSHProcessing
  • YARAProcessing

除了 SQLite 存储模块外,还开发了一个简单的 Web UI,用于查看和管理已扫描的域名和 URL。

SQLite 存储模块的 Web UI

但是,如果此 UI 不足以进行后续数据评估,可以替代或额外激活 MISP 存储模块。相应的设置必须在 config.yml 的 MISP 部分进行。

以下两条命令即可克隆 GIT 仓库、创建 Docker 容器并直接启动。之后可以通过地址 https://localhost:8000/ 访问 Web UI。请注意,容器启动后,输入模块将开始向处理队列添加 URL,引擎将开始爬取主机。

root@kitploit:~
git clone https://github.com/hpthreatresearch/subcrawl.git

docker-compose up --build 

SubCrawl 模块

输入模块

输入模块仅在服务模式下使用。如果使用一次性运行模式启动 SubCrawl,则需要提供一个包含要扫描 URL 的文件。已实现以下两个输入模块。

URLhaus

URLhaus 是一个追踪恶意 URL 的知名 Web 服务。该 Web 服务还提供包含新检测到的 URL 的导出。这些恶意软件 URL 是我们爬虫的完美输入,因为我们主要想分析恶意域名。会检索最近提交的 URL,并且不会通过 API 请求细化搜索结果(即不通过标签或其他可用参数)。在此输入模块中向 URLHaus API 发出的 HTTP 请求可以修改,以进一步细化获取的结果。

PhishTank

PhishTank 是一个收集钓鱼 URL 的网站。用户可以提交新发现的钓鱼页面。可以通过 API 从此 Web 服务生成并下载包含活跃钓鱼 URL 的导出文件。因此,这也是我们爬虫的理想数据源。

处理模块

SubCrawl 包含多个处理模块。处理模块在向核心引擎提供结果方面都遵循类似的行为。如果找到匹配项,结果将返回给核心引擎,随后提供给存储模块。以下是处理模块列表。

SDHash

SDHash 处理模块用于计算 HTTP 响应的相似性哈希。内容的最小大小必须为 512 字节,才能成功计算哈希。这可能是最难安装的处理模块,因为它需要 Protobuf,并且根据目标主机可能必须重新编译。因此,此处理模块默认是禁用的。已编译的版本可以在 crawler/processing/minisdhash/ 中找到,该版本需要 protobuf-2.5.0 和 python3.6。这些二进制文件是在 Ubuntu 18.04.5 LTS x64 上编译的。按照安装说明:

root@kitploit:~
# Protobuf 安装
> apt-get update
> apt-get -y install libssl-dev libevent-pthreads-2.1-6 libomp-dev g++
> apt-get -y install autoconf automake libtool curl make g++ unzip
> wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.zip
> unzip protobuf-2.5.0.zip
> cd protobuf-2.5.0
> ./configure
> make
> sudo make install

# Python3.6 安装
> apt-get install python3.6-dev
> sudo ldconfig

# SDHash 安装
> git clone https://github.com/sdhash/sdhash.git
> cd sdhash
> make
> make install
> ldconfig

JARM

JARM 是 Salesforce 开发的一种对 TLS 连接进行指纹识别的工具。JARM 处理模块对域名执行扫描,并返回一个 JARM 哈希及域名给核心引擎。根据 Web 服务器的配置,TLS 握手具有不同的属性。通过计算此握手属性的哈希,可以利用这些差异来追踪 Web 服务器配置。

TLSH

TLSH 处理模块与 SDHash 处理模块类似,用于计算相似性哈希。TLSH 的优势在于安装简单得多,且输入最小大小更小,仅为 50 字节。由于大多数 WebShell 登录页面相对较小,并且是我们研究的重点,因此我们默认启用了此处理模块。

YARA

YARA 处理模块用于使用 YARA 规则扫描 HTTP 响应内容。要调用此处理模块,请提供值 YARAProcessing 作为处理模块参数。例如,以下命令将加载 YARA 处理模块,并通过 ConsoleStorage 存储模块将输出输出到控制台。

root@kitploit:~
python3 subcrawl.py -p YARAProcessing -s ConsoleStorage

目前,YARA 处理模块用于识别 WebShell 登录页面和各种其他有趣的内容。此项目包含的 YARA 规则:

  • protected_webshell: 识别受密码保护的 WebShell 的登录页面
  • js_webshell_tracking_script: 识别使用 JavaScript 的后门插件/主题,当 WebShell 变为活动状态时通知攻击者
  • open_webshell: 识别开放的 WebShell(即不受登录保护的 WebShell)
  • php_webshell_backend: 识别攻击者使用的 PHP WebShell 后端

示例输出: YARA 处理输出

要添加额外的 YARA 规则,可以将 .YAR 文件添加到 yara-rules 文件夹,然后通过向 combined-rules.yar 添加 include 语句来包含规则文件。

ClamAV

ClamAV 处理模块用于在扫描过程中使用 ClamAV 扫描 HTTP 响应内容。如果发现匹配,则将其提供给各个输出模块。要调用此处理模块,请提供值 ClamAVProcessing 作为处理模块参数。例如,以下命令将加载 ClamAV 处理模块,并通过 ConsoleStorage 存储模块将输出输出到控制台。

root@kitploit:~
python3 subcrawl.py -p ClamAVProcessing -s ConsoleStorage

示例输出: ClamAV 处理模块

要使用此模块,必须安装 ClamAV。在终端中使用 APT 包管理器安装 ClamAV:

root@kitploit:~
$ sudo apt-get install clamav-daemon clamav-freshclam clamav-unofficial-sigs

安装完成后,ClamAV 更新服务应该已经在运行。但是,如果您想使用 freshclam 手动更新,请确保服务已停止:

root@kitploit:~
sudo systemctl stop clamav-freshclam.service

然后手动运行 freshclam:

root@kitploit:~
$ sudo freshclam

最后,检查 ClamAV 服务的状态:

root@kitploit:~
$ sudo systemctl status clamav-daemon.service

如果服务没有运行,可以使用 systemctl 启动它:

root@kitploit:~
$ sudo systemctl start clamav-daemon.service

Payload

Payload 处理模块用于使用 libmagic 库识别 HTTP 响应内容。此外,SubCrawl 可以配置为保存感兴趣的内容,例如 PE 文件或归档文件。要调用此处理模块,请提供值 PayloadProcessing 作为处理模块参数。例如,以下命令将加载 Payload 处理模块,并将输出输出到控制台:

root@kitploit:~
python3 subcrawl.py -p PayloadProcessing -s ConsoleStorage

此模块没有额外的依赖项。

示例输出: Payload 处理输出

存储模块

当队列中的所有 URL 都扫描完毕后,SubCrawl 引擎会调用存储模块。存储模块的设计有两个目标。首先,在扫描队列完成后立即获取扫描结果;其次,实现长期存储和分析。因此,我们不仅实现了 ConsoleStorage 模块,还实现了 MISP 集成和 SQLite 存储模块。

Console

为了在扫描 URL 后快速分析结果,会向控制台打印格式良好的输出。此输出最适合在 SubCrawl 以一次性运行模式使用。虽然这种方法在扫描单个域名或生成快速输出时效果很好,但对于长期研究和分析来说并不方便。

控制台存储 UI

Elastic

还提供了与 Elastic 集群的集成。每个 URL 及其数据都将作为事件进行索引,这将包括来自其他模块(如 Yara)的输出。还添加了一个默认仪表板,以帮助开始使用此模块。需要更新 elasticsearch 部分,包括:

  • Elastic search 主机(默认 localhost)
  • 查找 Elastic 的端口(默认 9200)
  • 索引名称(默认 subcrawl)
  • 归档响应内容 - 将 HTTP 响应体保存到磁盘(默认 False)
  • 归档日志位置 - 保存响应内容的位置(默认 log/)

要使用此输出模块,请提供值 ElasticStorage 作为 -s 参数。

SQLite

由于 MISP 的安装和配置可能耗时,我们实现了另一个模块,将数据存储在 SQLite 数据库中。为了尽可能简单清晰地展示数据给用户,我们还开发了一个简单的 Web GUI。使用此 Web 应用程序,可以查看和搜索已扫描的域名和 URL 及其所有属性。由于这只是早期版本,尚未实现复杂的比较功能。

SQLite UI

MISP

MISP 是一个开源威胁情报平台,具有灵活的数据模型和 API,用于存储和分析威胁数据。SubCrawl 将爬取的数据存储在 MISP 事件中,每个域发布一个事件,并将任何识别的开放目录添加为属性。MISP 还允许用户为事件和属性定义标签。这有助于事件比较和链接分析。由于这是我们主要的研究目标之一,在将 SubCrawl 的输出导出到 MISP 时,我们丰富了来自 URLHaus 的数据。URLHaus 使用标签注释其数据,这些标签可用于识别与 URL 相关的恶意软件家族或威胁行为者。对于每个开放目录 URL,该模块会查询本地存储的 URLHaus 数据,并在匹配时将 URLHaus 标签添加到 MISP 事件中。为了避免每个 MISP 事件包含一组不相关的属性,我们为扫描的 URL 创建了一个新的 MISP 对象,称为 opendir-url。这确保了相关属性保持在一起,使数据概览更加容易。

MISP UI

构建自己的模块

框架提供了处理模块和存储模块的模板。

处理模块

处理模块位于 crawler->processing 目录下,该目录中有一个示例模块文件 example_processing.py。该模板提供了必要的继承和导入,以确保框架能够执行。init 函数用于模块初始化,并接收一个 logger 实例和全局配置。logger 用于在处理模块以及整个框架中提供日志信息。

process 函数用于处理每个 HTTP 响应。为此,它接收 URL 和原始响应内容。这是实现模块工作的地方。此函数应返回一个包含以下字段的字典:

  • hash: 内容的 sha256 值
  • url: 获取内容所用的 URL
  • matches: 模块中的任何匹配结果,例如 libmagic 或 YARA 结果。

必须定义一个唯一的类名,用于在通过 -p 参数包含此模块时或在配置文件中作为默认处理模块时引用它。

最后,在 __init__.py 中添加一个导入语句,使用您的类名:

root@kitploit:~
from .<REPLACE>_processing import <REPLACE>Processing

存储模块

存储模块位于 crawler->storage 目录下,该目录中有一个示例模块文件 example_storage.py。与处理模块类似,init 函数用于模块初始化,并接收一个 logger 实例和全局配置。store_results 函数按照配置文件中批处理大小定义的间隔从引擎接收结构化数据。

必须定义一个唯一的类名,用于在通过 -s 参数包含此模块时或在配置文件中作为默认处理模块时加载它。

演讲和其他资源

2021 年:

  • BlackHat Arsenal USA
  • VirusBulletin Localhost - 即将推出

许可证

SubCrawl 采用 MIT 许可证授权。

下载工具