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

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

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

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

工具目录

分类

查看所有分类
Loading categories
rdpscan-BlueKeep — 用于快速扫描 CVE-2019-0708 "BlueKeep" 漏洞的扫描器。 | Kitploit
工具/GitHubGitHub/gh0st0ne/rdpscan-bluekeep
侦察漏洞扫描器漏洞利用信息收集网络安全渗透测试
GitHubgh0st0ne/rdpscan-bluekeep

rdpscan-BlueKeep

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

查看仓库
127年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Windows download macOS download Linux download Follow

用于 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 - 目前在 XCode 中处理 macOS 版本

主要用途

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

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

这会对每个地址产生以下 3 种结果之一:

  • 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,这类响应占绝大多数。此外,当目标资源耗尽或出现网络问题时,也会有大量此类结果。最后,协议错误也是主要原因之一。 虽然三种主要响应是 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 有无数种变体。

  • UNKNOWN - no connection - timeout 这是目前为止最常见的响应,发生在目标 IP 地址完全没有任何响应时。事实上,由于它太常见,在扫描大范围地址时通常会被省略。你需要添加 -v(详细模式)参数才能启用它。
  • UNKNOWN - no connection - refused (RST) 这是目前为止第二常见的响应,发生在目标存在并响应网络流量,但未运行 RDP 时,因此会以 TCP RST 数据包拒绝连接。
  • UNKNOWN - RDP protocol error - receive timeout 这是第三常见的响应,发生在我们已经成功建立 RDP 连接,但随后服务器停止响应时。这是由于网络错误,或目标系统因某种原因过载所致。也可能是本端的网络问题,例如你在 NAT 后面,因连接过多而使 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 库,并避免与系统上其他版本冲突。在 Debian Linux 上,我会这样做:

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

一旦解决了这个问题,你只需将所有 .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”结果。

下载工具