本教程适用于以下操作系统版本
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 18.04(Bionic Beaver)
本页内容
- 环境要求
- 通过安装脚本安装 Vuls
- 配置 Vuls 漏洞扫描器
- 构建 Vuls CVE 数据库
- 使用 Vuls 扫描本地机器
- 使用 Vuls 扫描远程服务器
- 集成 VulsRepo 作为 Vuls 的 Web 仪表盘管理界面
- 结语
Vuls 是一款适用于 Linux 和 FreeBSD 的无代理、免费且开源的漏洞扫描器。Vuls 主要使用 Go 编写,可以运行在任何地方。你可以在云端、本地以及 Docker 中运行 Vuls,并支持主流发行版。Vuls 提供高质量的扫描,支持多个漏洞数据库,例如 NVD、JVN、OVAL、RHSA/ALAS/ELSA/FreeBSD-SA。
借助 Vuls,你可以使用多种方法扫描多个操作系统。你可以扫描主机的本地系统,也可以通过 SSH 扫描远程主机/服务器。它还提供多种扫描方式:不需要 root 权限的快速扫描,以及需要 root 权限的深度扫描。Vuls 可以一次性扫描多个目标服务器。扫描完成后,你可以通过 Email 和 Slack 发送结果。
在本教程中,你将在 Ubuntu 22.04 服务器上安装 Vuls——一款开源、无代理的漏洞扫描器。你还将通过创建配置文件,并使用 Vuls 提供的命令行工具构建 Vuls 数据库来完成 Vuls 的设置。随后,你将使用 Vuls 扫描你的服务器,并通过 SSH 和 Vuls 扫描远程服务器。
本教程还包括安装并将 VulsRepo——一款允许你通过 Web 浏览器查看 Vuls 扫描结果的 Web 应用——与 Vuls 集成。
环境要求
要完成本指南,你必须确保具备以下要求:
- 一台运行 Ubuntu 22.04 的 Linux 服务器——本示例将使用一台主机名为 ' vuls '、IP 地址为 ' 192.168.5.20 ' 的 Ubuntu 机器。
- 一个具有 sudo/root 管理员权限的非 root 用户。
- 另一台服务器将用作通过 Vuls 进行远程服务器扫描的目标机器。
准备好这些要求后,你现在可以开始在 Ubuntu 机器上安装 Vuls 了。
通过安装脚本安装 Vuls
Vuls 是一款安全扫描器,可用于扫描主流 Linux 发行版、FreeBSD、云端和本地环境,并且支持 Docker。Vuls 可以通过手动方式或使用安装脚本在多个操作系统上安装,也可以通过 Docker 安装。
在本节中,你将通过 Vuls 安装脚本在 Ubuntu 22.04 机器上自动安装 Vuls。
输入以下命令以在机器上安装 Vuls。这将下载 Vuls 安装脚本 ' install.sh ' 并在你的服务器上运行它。
bash <( curl -s https://raw.githubusercontent.com/vulsio/vulsctl/master/install-host/install.sh )
以下是会输出到终端的类似内容。

因此,Vuls 安装脚本 ' install.sh ' 将执行以下任务:
- 安装基础依赖,例如 gcc、git、wget、curl 和 sqlite3 数据库工具。
- 从二进制包手动安装最新版本的 Go。
- 编译并安装 Vuls 以及一些附加工具,例如 go-cti、go-kev、go-exploitdb、go-msfdb、go-cve-dictionary、goval-dictionary 和 gost。
安装完成后,vuls 二进制文件和其他工具将存储在 ' /usr/local/bin ' 目录中。
输入以下命令以验证 '/usr/local/bin/ ' 目录中的二进制文件列表。
ls /usr/local/bin/
你应该会收到类似这样的输出——你将获得 vuls 二进制文件,以及 go-cti、go-kev、go-exploitdb、go-msfdb、go-cve-dictionary、goval-dictionary 和 gost。

至此,你已经通过安装脚本在 Ubuntu 机器上安装了 Vuls。下一步,你将开始配置 Vuls 安装。
配置 Vuls 漏洞扫描器
在使用 Vuls 之前,你必须定义并创建 Vuls 的配置文件,并设置用于存储 Vuls 数据的数据目录。
在本节中,你将把 Vuls 数据目录设置为 '/usr/share/vuls-data',并创建一个新的 Vuls 配置文件 ' config.toml '。你还将定义多个 CVE 数据库,并设置第一个可用于扫描当前本地机器或服务器的扫描。
运行 vuls 命令时,你必须位于配置文件 ' config.toml ' 所在的 '/usr/share/vuls-data ' 工作目录中。
输入以下命令为 Vuls 创建一个新的数据目录 '/usr/share/vuls-data'。然后,使用下面的 touch 命令创建一个新的配置文件 ' /usr/share/vuls-data/config.toml'。
mkdir -p /usr/share/vuls-data
touch /usr/share/vuls-data/config.toml
使用以下 nano 编辑器命令打开配置文件 '/usr/share/vuls-data/config.toml '。
nano /usr/share/vuls-data/config.toml
将以下行添加到文件中。
[cveDict] type = "sqlite3" SQLite3Path = "/usr/share/vuls-data/cve.sqlite3" [ovalDict] type = "sqlite3" SQLite3Path = "/usr/share/vuls-data/oval.sqlite3" [gost] type = "sqlite3" SQLite3Path = "/usr/share/vuls-data/gost.sqlite3" [metasploit] type = "sqlite3" SQLite3Path = "/usr/share/vuls-data/go-msfdb.sqlite3" [servers] [servers.localhost] host = "localhost" port = "local" scanMode = [ "fast" ] #scanMode = ["fast", "fast-root", "deep", "offline"]
完成后保存并关闭文件。
通过这种方式,你将定义 4 个格式为 SQLite3 的 Vuls 数据库,这些数据库取自 Vuls 数据目录 ' /usr/share/vuls-data/ '。本示例中使用的 4 个数据库为:
- CVE(Common Vulnerabilities and Exposures,通用漏洞与暴露)。
- OVAL(Open Vulnerability and Assessment Language,开放漏洞与评估语言)。
- Gost——跟踪 Linux 发行版(如 Rehat、Debian、Ubuntu)以及 Microsoft Windows 操作系统的安全跟踪器。
- 来自 Metasploit-Framework 模块的 CVE。
你还将定义第一个名为 ' localhost ' 的扫描,它允许你通过 SSH 扫描当前的本地机器,其 ' scanMode '(扫描模式)为 ' fast '(快速),该模式不需要 root 权限,也无需依赖项。
接下来,将你的工作目录切换到 ' /usr/share/vuls-data/ '。每次运行 'vuls' 命令时,你都必须位于配置文件 'config.toml' 所在的此目录中。
cd /usr/share/vuls-data/
输入以下 ' vuls ' 命令以验证配置。
vuls configtest
如果成功,你应该在终端屏幕上收到类似的输出。

至此,你已经创建了 Vuls 配置,定义了 Vuls 数据库,并设置了 localhost 扫描。下一步,你将通过 Vuls 提供的多个命令行工具构建 Vuls 数据库。
此外,如果你想创建一份完整的 Vuls 配置文件,输入以下命令以生成一份 Vuls 配置示例。
vuls discover 127.0.0.1/32
这将在你的终端上打印出一份 Vuls 配置示例。
构建 Vuls CVE 数据库
在 Vuls 配置文件 'config.toml' 中,你已经使用 gost(安全跟踪器)、OVAL、CVE 和 Metasploit-Framework CVE 定义了 4 个数据库。在扫描任何目标服务器之前,你必须确保 Vuls 数据库已创建并可在 Vuls 数据目录 '/usr/share/vuls-data' 中使用。
在本节中,你将通过已安装并位于 '/usr/local/bin' 目录中的 Vuls 命令行工具构建 Vuls 数据库。你将生成 Ubuntu 系统的 Gost(安全跟踪器)Vuls 数据库、来自 NVD(NIST 国家漏洞数据库)的 CVE 数据库、Ubuntu OVAL 数据库,以及 Metasploit-Framework CVE 数据库。
每个数据库都可以通过你已安装的特定工具生成。关于 Vuls 命令行工具的基本用法,你可以按以下格式打印出 Vuls 工具的帮助页。
vuls-command help
首先,输入以下 ' gost ' 命令以构建并生成安全跟踪器的 Vuls 数据库。在本示例中,你将生成一份 Ubuntu 发行版的安全跟踪器 Vuls 数据库,保存到目标文件 ' /usr/share/vuls-data/gost.sqlite3 '。
gost fetch ubuntu --dbpath /usr/share/vuls-data/gost.sqlite3

输入以下 ' go-cve-dictionary ' 命令以生成 CVE 的 Vuls 数据库。' go-cve-dictionary ' 命令支持两个 CVE 提供方来源:来自 Nist 的 NVD 和来自日本 JVN 的 JVD。在本示例中,你将生成来自 Nist 的 CVE 数据库,保存到 '/usr/share/vuls-data/cve.sqlite3 '。
go-cve-dictionary fetch nvd --dbpath /usr/share/vuls-data/cve.sqlite3

以下是所有 CVE 数据库构建完成时的输出。

接下来,使用以下 ' goval-dictionary ' 命令生成 OVAL 的 Vuls 数据库。OVAL 为多个 Linux 发行版和版本提供多个字典。在本示例中,你将生成 Ubuntu 22 的 OVAL 数据库,保存到文件 '/usr/share/vuls-data/oval.sqlite3 '。
goval-dictionary fetch ubuntu 22 --dbpath /usr/share/vuls-data/oval.sqlite3

最后,输入以下 ' go-msfdb ' 命令以生成来自 Metasploit-Framework 模块的 CVE 数据库。对应的 Vuls 数据库文件将存储在 ' /usr/share/vuls-data/go-msfdb.sqlite3 '。
go-msfdb fetch msfdb --dbpath /usr/share/vuls-data/go-msfdb.sqlite3

当 Vuls 数据库生成完成后,输入以下命令以验证 Vuls 数据库的列表。
ls /usr/share/vuls-data/*.sqlite3
你应该会看到 Vuls 数据库 ' gost.sqlite3'、'cve.sqlite3'、'oval.sqlite3 ' 和 'go-msfdb.sqlite3 ' 已生成并可在目录 '/usr/share/vuls-data/ ' 中使用。

至此,你已经安装了 Vuls,配置了 Vuls 数据目录,创建了 Vuls 配置文件,并定义了多个将作为扫描源数据库使用的 Vuls 数据库。你还创建了第一个名为 'localhost' 的扫描,可用于扫描你当前正在使用的本地机器。
下一步,你将开始扫描你的本地机器,然后你还将创建另一个用于通过 Vuls 扫描远程服务器的扫描。
使用 Vuls 扫描本地机器
在 Vuls 配置文件 ' config.toml ' 中,你已经创建了第一个名为 'localhost' 的扫描,它允许你使用 Vuls 扫描当前机器。在本节中,你将使用 Vuls 扫描当前机器。
以下是你创建的第一个 Vuls 扫描。它将以连接类型 ' local '(本地)扫描目标服务器 ' localhost ',' scanMode ' 为 ' fast '(快速),该模式不需要任何 root 权限。
[servers.localhost] host = "localhost" port = "local" scanMode = [ "fast" ] #scanMode = ["fast", "fast-root", "deep", "offline"]
首先,输入以下命令以开始扫描你的系统,该命令将扫描配置文件 ' config.toml ' 中所有可用的目标服务器。
vuls scan
要扫描特定的目标服务器,你可以将扫描名称作为参数。这将只扫描名为 ' localhost ' 的目标服务器。
vuls scan localhost
扫描过程完成后,你应该会收到类似这样的输出——你可以看到 Vuls 会检测目标服务器当前的操作系统,然后使用可用的 Vuls 数据库开始扫描系统。此外,你还可以在输出的底部看到扫描摘要。

接下来,输入以下命令以查看并显示扫描的详细报告。
vuls tui
你应该在终端屏幕上看到 4 列:目标服务器列表、检测到的 CVE 列表、显示 CVE 详细信息的列,以及显示受影响软件包列表的列。你可以按 TAB 键在各列之间切换。

最后,按 Ctrl+C 组合键退出 Vuls 查看器。

此外,你还可以通过输入以下 ' vuls ' 命令来跟踪你已执行的扫描历史。
vuls history
至此,你已经学会了如何使用 Vuls 扫描目标服务器,并通过 ' vuls tui ' 命令查看或显示结果。接下来,你将学习如何使用 Vuls 扫描远程机器或服务器。
使用 Vuls 扫描远程服务器
在本节中,你将学习如何使用 Vuls 通过 SSH 扫描远程服务器。以下是用作目标机器的服务器详细信息:
Hostname IP Address OS ------------------------------------------ debian-server 192.168.5.75 Debian 11
以下是通过 SSH 配置 Vuls 并扫描远程服务器的任务步骤:
- 在目标服务器上安装依赖——在需要时,取决于 scanMode。
- 获取针对你的具体系统的附加 CVE 数据库。确保你拥有与作为目标服务器的系统相匹配的 Vuls 数据库。
- 在 Vuls 配置文件 'config.toml' 中添加并定义目标扫描。
- 开始扫描你的目标服务器。
现在让我们开始。
首先,登录到目标远程服务器,并使用以下 ' apt install ' 命令安装软件包依赖 ' debian-goodies ' 和 ' reboot-notifier '。这些软件包需要安装在 Debian 目标服务器上。
sudo apt install debian-goodies reboot-notifier
在出现提示时输入 y 并按 ENTER 继续。

现在切换到 Vuls 服务器,并为你的具体系统获取新的 CVE 数据库。在本示例中,你将通过添加 Debian Linux 发行版的字典内容,为 OVAL 和 gost 重新构建新的数据库。
输入以下命令,将 Debian 11 发行版的新 OVAL 内容添加到现有数据库 ' /usr/share/vuls-data/oval.sqlite3 '。
goval-dictionary fetch debian 11 --dbpath /usr/share/vuls-data/oval.sqlite3

输入以下命令,为 Debian 发行版添加一个新的安全跟踪器到 Vuls gost 数据库文件 ' /usr/share/vuls-data/gost.sqlite3 '。
gost fetch debian --dbpath /usr/share/vuls-data/gost.sqlite3

接下来,使用以下 nano 编辑器命令打开 Vuls 配置文件 ' /usr/share/vuls-data/config.toml'。
nano /usr/share/vuls-data/config.toml
将以下行添加到文件末尾。这样,你将创建一个名为 'debian-server' 的新扫描,其详细主机 IP 地址为 ' 192.168.5.75 ',SSH 服务运行在默认端口 ' 22 ',默认使用的用户为 ' debian ',并通过 SSH 使用私钥 ' ~/.ssh/id_ed25519 ' 进行基于密钥的认证。你将使用的 ' scanMode ' 为 ' fast-root ',该模式需要目标服务器上的 root 权限,因此请确保你的用户拥有免密 sudo。
[servers.debian-server] host = "192.168.5.75" port = "22" user = "debian" keyPath = "~/.ssh/id_ed25519" scanMode = [ "fast-root" ] # "fast", "fast-root" or "deep"
完成后保存并关闭文件。

现在输入以下 vuls 命令以验证配置文件 ' config.toml'。这将确保你在扫描目标服务器之前拥有正确的 Vuls 配置。
vuls configtest
你应该会看到类似这样的输出——Vuls 将通过检查可用的依赖和所需的权限来检查目标服务器是否准备就绪。此外,在底部你应该会看到已准备好扫描的目标服务器列表,在本示例中为 ' localhost ' 和 ' debian-server '。

现在输入以下命令,开始扫描 ' config.toml ' 文件中所有可用的目标服务器。对于本示例,以下命令将同时扫描两个目标服务器 ' localhost ' 和 ' debian-server '。
vuls scan
或者,你可以通过输入以下 vuls 命令将扫描指定到特定的目标服务器。
vuls scan debian-server
以下是扫描完成时的输出。在本示例中,你正在以 scanMode ' fast ' 扫描目标服务器 ' localhost ',并以 scanMode ' fast-root ' 扫描目标服务器 ' debian-server '。

输入以下命令以查看你已完成的扫描结果。在主机列表列中,你应该会看到目标服务器 'debian-server' 的扫描结果。
vuls tui

按 Ctrl+C 退出 Vuls tui 窗口。

现在,如果你通过 ' vuls history ' 命令查看扫描历史,你应该会看到两个不同的扫描结果——第一次扫描的目标是 ' localhost ',第二次扫描的结果目标是 ' localhost ' 和 ' debian-server '。
vuls history

至此,你已经学习了 Vuls 通过 SSH 扫描本地服务器和远程服务器的基本用法。你还学习了如何重新构建 Vuls 数据库,并通过 Vuls 基于终端的用户界面(TUI)显示或查看扫描结果。
接下来,你将学习如何安装并将 VulsRepo 与 Vuls 集成。
集成 VulsRepo 作为 Vuls 的 Web 仪表盘管理界面
VulsRepo 是一款可通过 Web 浏览器查看或显示 Vuls 扫描结果的 Web 应用。它允许管理员像在 Web 浏览器中查看 Excel 数据透视表一样轻松地展示扫描结果。
在本节中,你将下载 VulsRepo 并将 VulsRepo 与你的 Vuls 服务器集成。最后,你还将通过 VulsRepo Web 应用从你的 Web 浏览器验证 Vuls 扫描结果。
首先,切换到 Vuls 数据目录 ' /usr/share/vuls-data/ ',并输入以下命令 ' vuls report ',将 Vuls 报告生成为一个 json 文件。
cd /usr/share/vuls-data/
vuls report -format-json
现在将工作目录切换到 ' /opt ',并通过以下 ' git clone ' 命令下载 VulsRepo 源代码。VulsRepo 源代码将位于 ' /opt/vulsrepo/ ' 目录中。
cd /opt/
git clone https://github.com/ishiDACo/vulsrepo.git
将工作目录切换到 ' /opt/vulsrepo/server/ '。
cd /opt/vulsrepo/server/

将默认配置复制到 ' vulsrepo-config.toml ',并通过以下 nano 编辑器命令打开它。
cp vulsrepo-config.toml.sample vulsrepo-config.toml
nano vulsrepo-config.toml
使用以下行修改默认配置。' resultsPath ' 参数必须是 Vuls 数据的 ' results ' 目录 ' /usr/share/vuls-data/results '。对于 ' serverPort ' 和 ' serverIP ',请根据你的服务器详细信息调整这些参数。
[Server] rootPath = "/opt/vulsrepo" resultsPath = "/usr/share/vuls-data/results" serverPort = "5111" serverIP = "192.168.5.20"
完成后保存并关闭文件。
接下来,输入以下命令以执行 ' vulsrepo-server ' 二进制文件,并运行 VulsRepo 的 Web 仪表盘。
./vulsrepo-server
你应该在终端上收到类似这样的输出——你可以看到 VulsRepo 正运行在服务器 IP 地址 ' 192.168.5.20 ' 和端口 ' 5111 ' 上。

打开你的 Web 浏览器并访问服务器 IP 地址加端口 5111(即:http://192.168.5.20:5111/ )。你应该会看到 VulsRepo Web 应用页面。
在左侧菜单中,你应该会看到以 json 格式提供的可用扫描结果列表。选择你想查看的所需扫描结果,然后点击 ' Submit '。

以下是使用 VulsRepo 在 Web 浏览器中展示的目标服务器 ' localhost ' 和 ' debian-server ' 的扫描结果示例。

至此,你已经安装并将 VulsRepo Web 应用与你的 Vuls 服务器集成。你现在可以通过 VulsRepo 应用轻松地从 Web 浏览器查看扫描结果。
结语
在本教程中,你已在 Ubuntu 22.04 服务器上安装了 Vuls——一款开源、无代理的漏洞扫描器。你还配置了 Vuls,创建了扫描,并从多个来源配置了 Vuls 数据库,例如来自 NIST 的 CVE、OVAL、Linux 发行版安全跟踪器,以及 Metasploit-Framework 的 CVE。
除此之外,你还学习了如何使用 Vuls 扫描本地机器,以及如何通过 SSH 和 Vuls 扫描远程服务器。你还学习了使用 Vuls 通过基于终端的界面查看扫描结果的基本用法。
到最后,你还安装并将 Vuls 与 VulsRepo 集成,使你能够从 Web 浏览器查看和展示 Vuls 扫描结果。欲了解更多信息,请访问 Vuls 官方文档。