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

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

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

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

工具目录

分类

查看所有分类
Loading categories
rdpscan — 一个用于检测CVE-2019-0708 "BlueKeep"漏洞的快速扫描器。 | Kitploit
工具/GitHubGitHub/robertdavidgraham/rdpscan
漏洞扫描器漏洞利用网络安全
GitHubrobertdavidgraham/rdpscan

rdpscan

一个用于检测CVE-2019-0708 "BlueKeep"漏洞的快速扫描器。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Windows download
macOS download
Linux download
Follow
Build

针对 CVE-2019-0708 bluekeep 漏洞的 rdpscan 扫描器

这是一个针对 Microsoft 远程桌面中 CVE-2019-0708 漏洞的快速简陋扫描器。目前,公共互联网上约有 90 万台机器易受此漏洞影响,因此预计很快会出现类似 WannaCry 和 notPetya 的蠕虫。因此,请扫描您的网络,并对易受攻击的系统进行修补(或至少启用 NLA)。

这是一个命令行工具。您可以下载源代码自行编译,也可以从上述链接下载适用于 Windows 或 macOS 的预编译二进制文件。

此工具完全基于 https://github.com/zerosum0x0/CVE-2019-0708 中的 rdesktop 补丁。我只是精简了代码,以便在 macOS 和 Windows 上轻松编译,并增加了扫描多个目标的功能。

状态

这只是几天的实验性版本。不过,我正在通过对整个互联网进行扫描(借助 masscan)来测试它,因此我会很快解决很多问题。您可以在 Twitter(@erratarob) 上联系我寻求帮助/意见。

  • 2019-05-38 - 改进了输出结果描述,并添加了结果含义的文档(见下文)。
  • 2019-05-27 - 发布了 Windows 和 macOS 二进制文件(点击上方徽章)。
  • 2019-05-26 - 修复了 Windows 网络问题
  • 2019-05-25 - Linux 和 macOS 运行正常,Windows 存在一些网络错误
  • 2019-05-24 - 在 Linux 和 macOS 上工作,Windows 存在一些编译错误
  • 2019-05-23 - 目前在 macOS 上的 XCode 中工作

主要用途

要扫描一个网络,按如下方式运行:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

对于每个地址,会输出以下三种结果之一:

  • SAFE - 目标已被确定已修补或至少要求CredSSP/NLA
  • VULNERABLE - 目标已被确认存在漏洞
  • UNKNOWN - 目标无响应或存在协议错误

当目标 IP 地址不存在时,旧版本会打印消息"UNKNOWN - connection timed out"。扫描大型网络时,这会生成大量无关系统的信息。因此,新版本默认不输出此信息,除非在命令行添加 -v(详细模式)。

您可以通过增加工作线程数来提高扫描大型网络的速度:

root@kitploit:~
rdpscan --workers 10000 10.0.0.0/8

不过,在我的机器上,无论我将此参数设置得多高,由于系统限制,它最多只能产生约 1500 个工作线程。

您可以将此工具与 masscan 结合使用(如下文第二部分所述)以进一步提高速度。

解释扫描结果

有三种一般性响应:

  • SAFE - 表示目标可能已修补或对此漏洞不易感。
  • VULNERABLE - 表示我们已确认目标对此漏洞存在风险,当蠕虫爆发时,很可能被感染。
  • UNKNOWN - 表示我们无法确认任何一种情况,通常是因为目标无响应或未运行 RDP,这是绝大多数情况。另外,当目标资源耗尽或出现网络问题时,也会出现大量此类结果。最后,协议错误也会导致很多 UNKNOWN。

虽然三种主要响应是 SAFE、VULNERABLE 和 UNKNOWN,但它们包含额外的描述文本以解释诊断结果。本节描述您会看到的各种字符串。

SAFE

我们认为目标安全的主要原因有三种:

  • SAFE - Target appears patched 当目标对触发请求无响应时出现。这意味着该 Windows 系统已修补,或者像 Windows 10 或 Unix 这样本来就不存在漏洞的系统。
  • SAFE - CredSSP/NLA required 这意味着目标要求在建立 RDP 连接之前先进行网络级身份验证。该工具无法通过此点(没有合法凭据),因此无法判断目标是否已修补。不过,黑客也无法越过此点对存在漏洞的系统进行利用,因此您很可能是"安全的"。然而,当漏洞利用出现时,拥有有效用户名/密码的内部人员将能够利用未修补的系统。
  • SAFE - not RDP 这意味着目标系统不是 RDP,而是其他恰好使用相同端口的服务,并产生了明显不是 RDP 的响应。常见例子有 HTTP 和 SSH。但请注意,如果服务器返回的是 RST 或 FIN 数据包,而非可识别的协议,则会被标识为 UNKNOWN 而非 SAFE。

VULNERABLE

这意味着我们已确认系统存在此漏洞。

  • VULNERABLE - got appid 当系统存在漏洞时,只有这一种响应。

UNKNOWN

未知结果有无数种变体:

  • UNKNOWN - no connection - timeout 这是最常见的响应,当目标 IP 地址完全无响应时出现。实际上,由于太常见,扫描大范围地址时通常会省略此信息。您需要添加 -v(详细)标志才能启用。
  • UNKNOWN - no connection - refused (RST) 这是第二常见的响应,当目标存在并响应网络流量,但未运行 RDP,因此以 TCP RST 数据包拒绝连接时出现。
  • UNKNOWN - RDP protocol error - receive timeout 这是第三常见的响应,当我们成功建立 RDP 连接后,服务器停止响应时出现。这可能是由于网络错误或目标系统因某种原因过载。也可能是本端网络错误,例如当您位于 NAT 后面且连接过多导致过载时。
  • UNKNOWN - no connection - connection closed 这意味着我们已经建立连接(TCP SYN-ACK),但连接立即被关闭(通过 RST 或 FIN)。出现这种情况的原因很多,我们无法区分:
    • 正在运行 RDP,但由于某种原因关闭了连接,可能因为资源耗尽。
    • 不是 RDP,并且不喜欢我们发送的 RDP 请求,因此没有返回友好的错误消息(那会触发 SAFE - not RDP),而是突然关闭了连接。
    • 某些中间设备(如 IPS、防火墙或 NAT)将此连接识别为恶意或资源耗尽而关闭了连接。
    • 其他我尚未识别的原因,在我扫描互联网时发生了很多奇怪的事情。
  • UNKNOWN - no connection - host unreachable (ICMP error) 远程网络报告主机不可达或未运行。如果您认为该主机应该存活,请稍后重试。
  • UNKNOWN - no connection - network unreachable (ICMP error) 远端存在(临时)网络错误,如果您认为该网络应该运行,请稍后重试。
  • UNKNOWN - RDP protocol error 这意味着 RDP 协议中发生了某种损坏,可能是因为远端实现错误(非 Windows 系统),或者处理临时网络错误不当,或其他原因。
  • UNKNOWN - SSL protocol error 自 Windows Vista 起,RDP 使用 STARTTLS 协议运行在 SSL 上。这一层存在与上述类似的问题,包括对底层网络错误处理不当,或尝试与存在某种不兼容的系统通信。如果您在这里得到很长的错误消息(如 SSL3_GET_RECORD:wrong version),那是因为对方 SSL 存在错误,或者您使用的 SSL 库存在错误。

与 masscan 结合使用

此 rdpscan 工具速度较慢,每秒只能扫描几百个目标。您可以使用 masscan 来加速。masscan 工具速度大约是它的 1000 倍,但目标信息有限。

步骤如下:

  • 首先使用 masscan 扫描地址范围,快速找到在 3389 端口(或您使用的任何端口)上有响应的主机。
  • 然后将 masscan 的输出导入 rdpscan,使其只扫描我们知道活跃的目标。

简单的方法是在命令行中直接组合它们:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 | rdpscan --file -

我通常分两步操作:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

构建

困难的部分是安装 OpenSSL 库,并且不与系统上的其他版本冲突。以下是我测试过的几个 Linux 版本的例子,但不同发行版的包名经常变化。此外,还有多种兼容 OpenSSL API 的选择,如 BoringSSL 和 LibreSSL。

root@kitploit:~
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

解决该问题后,只需像这样将所有 .c 文件编译在一起:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -o rdpscan

我在目录中放了一个 Makefile 来完成此操作,因此您可能只需要:

root@kitploit:~
$ make

代码是用 C 编写的,因此需要安装 C 编译器,例如:

root@kitploit:~
$ sudo apt install build-essential

常见构建错误

本节描述较明显的构建错误。

root@kitploit:~
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory

这意味着您没有安装 OpenSSL 头文件,或者它们不在路径中。请记住,即使您安装了 OpenSSL 二进制文件,也不意味着您安装了开发组件。您需要同时安装头文件和库。

要在 Debian 上安装这些东西,请执行:

root@kitploit:~
$ sudo apt install libssl-dev

要修复路径问题,请添加编译标志 -I/usr/local/include 或类似的。

一个链接器问题的例子如下:

root@kitploit:~
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
    _rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
    _rdssl_cert_to_rkey in ssl-d5fdf5.o

我在 macOS 上遇到此问题,因为存在多个版本的 OpenSSL。我通过硬编码路径来修复:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

根据其他人的评论,如果您使用 Homebrew 安装,以下命令行可能在 macOS 上有效。不过我仍然遇到上述链接错误,因为我安装了其他冲突的 OpenSSL 组件。

root@kitploit:~
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

运行

上一节提供了运行程序的快速入门提示。本节提供更深入的帮助。

要扫描单个目标,只需传递目标地址:

root@kitploit:~
./rdpscan 192.168.10.101

您可以传入 IPv6 地址和 DNS 名称。您也可以传入多个目标。例如:

root@kitploit:~
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

您还可以扫描地址范围,使用起始-结束的 IPv4 地址或 IPv4 CIDR 规范。不支持 IPv6 范围,因为它们太大。

root@kitploit:~
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

默认情况下,它一次只扫描 100 个目标。您可以使用 --workers 参数增加此数字。但是,无论您将此参数设置得多高,实际上一时间最多只能运行大约 500 到 1500 个工作线程,具体取决于您的系统。

root@kitploit:~
./rdpscan --workers 1000 10.0.0.0/24

您可以在命令行中指定目标,也可以使用 --file 参数从文件加载:

root@kitploit:~
./rdpscan --file ips.txt

文件的格式是每行一个地址、名称或范围。它还可以消费 masscan 生成的文本。额外的空白字符会被修剪,空行被忽略,注释行也会被忽略。注释 是以 # 字符或 // 字符开头的行。

输出发送到 stdout,给出 VULNERABLE、SAFE 或 UNKNOWN 的状态。每个状态可能有额外原因。这些原因已在上面描述。

root@kitploit:~
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid

您可以使用 grep 和 cut 等 Unix 命令进一步处理。要获取仅存在漏洞的机器列表:

root@kitploit:~
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

参数 -dddd 表示 诊断 信息,添加的 d 越多,打印的细节越多。这发送到 stderr 而非 stdout,以便您可以分离流。在 bash 中操作如下:

root@kitploit:~
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

诊断信息

添加 -d 参数会将连接的诊断信息转储到 stderr。

root@kitploit:~
./rdpscan 62.15.34.157 -d

[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157    - SAFE - Target appears patched

在 macOS/Linux 上,您可以像往常一样将 stdout 和 stderr 分别重定向到不同文件:

root@kitploit:~
./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5 和 Tor 的乐趣

工具包含 SOCKS5 支持:

root@kitploit:~
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

这会使连接问题变得更糟,因此您会得到更多 "UNKNOWN" 结果。

静态链接 OpenSSL

为了发布作为本项目 releases 附带的 Windows 和 macOS 二进制文件,我静态链接了 OpenSSL,这样就不需要单独包含,程序可以直接运行。本节描述如何做到这一点,特别是因为 OpenSSL 官方页面上的说明似乎已过时。

这两个步骤都从下载 OpenSSL 源代码并将其放在 rdpscan 目录旁边开始:

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

Windows

对于 Windows,您需要先安装某种版本的 Perl。我使用 ActiveState 提供的那个。

接下来,您需要一个特殊的"汇编器"。我使用推荐的 NASM。

接下来,您需要一个编译器。我使用 VisualStudio 2010。您可以从 Microsoft 下载最新的 "Visual Studio Community Edition"(现在是 2019 版)。

现在您需要构建 makefile。进入 OpenSSL 目录并运行 Configure Perl 程序:

root@kitploit:~
perl Configure VC-WIN32

我选择 Windows 的 32 位版本,因为还有很多旧版 Windows 存在,我希望程序尽可能兼容旧版本。

我想要完全静态的构建,包括 C 运行时。为此,我打开生成的 makefile 并编辑,将 C 编译标志从 /MD(表示使用 DLL)更改为 /MT。同时,我在 CPPFLAGS 中添加了 -D_WIN32_WINNT=0x501,这将 OpenSSL 限制为在 Windows XP 和 Server 2003 上也能工作的功能。否则,如果您在这些旧系统上运行,会报错找不到 bcrypt.dll。

现在需要确保一切都在 PATH 中。我将 nasm.exe 复制到 PATH 中的某个目录。对于 Visual Studio 2010,我运行了 vcvars32.bat 来设置编译器的路径变量。

此时在命令行中,我输入:

root@kitploit:~
nmake

这将生成库。静态库是 libssl_static.lib 和 libcrypto_static.lib,我用于在 rdpscan 中链接。

macOS

首先,您需要安装一个编译器。我使用 Apple 的开发工具,安装 XCode 和编译器。我认为您也可以使用 Homebrew 安装 gcc。

然后进入 OpenSSL 源代码目录并创建 makefile:

root@kitploit:~
perl Configure darwin64-x86_64-cc

现在简单构建:

root@kitploit:~
make depend
make

此时,它创建了动态(.dylib)和静态(.lib)库。我删除了动态库,以便默认链接静态库。

然后在 rdpscan 中构建 macOS 的 makefile:

root@kitploit:~
make -f Makefile.macos

这将编译所有 rdpscan 源文件,然后链接到您刚才在 ../openssl 目录中构建的 OpenSSL 库。

这应该生成一个 3 MB 的可执行文件。如果您只得到了一个 200 KB 的可执行文件,说明您错误地链接了动态库。

下载工具