Rdpscan:一款BlueKeep快速扫描工具
2019-09-09 16:00:30 Author: www.freebuf.com(查看原文) 阅读量:128 收藏

这是一款快速的CVE-2019-0708漏洞扫描工具。目前,公共互联网上大约有900,000台机器容易受到这种漏洞的影响,这还是一个命令行工具。您可以下载源代码并自行编译,也可以从上面的链接下载一个用于Windows或macOS的预编译二进制文件。

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

状态

这只是几天的实验。但是,我正在通过扫描整个互联网来测试它(借助于masscan,所以我很快就解决了很多问题。你可以尝试联系我(@erratarob)寻求帮助/评论。

1.2019-05-38 – 输出完善的结果描述,以及文档的含义(见下文)。

2.2019-05-27 – 发布了Windows和macOS二进制文件。

3.2019-05-26 – 修复Windows网络问题

4.2019-05-25 – 在Linux和macOS运行良好,但Windows有一些网络错误

5.2019-05-24 – 适用于Linux和macOS,但Windows有一些编译错误

6.2019-05-23 – 目前在XCode中处理macOS

主要用途

要扫描网络,如下运行:

rdpscan 192.168.1.1-192.168.1.255

这会为每个地址生成3个结果中的一个:

1.SAFE – 目标是安全的

2.VULNERABLE – 目标是脆弱的

3.UNKNOWN – 目标没有响应或有一些协议失败

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

rdpscan --workers 10000 10.0.0.0/8

使用masscan

这个rdpscan工具相当慢,每秒只能扫描几百个目标。你可以masscan用来加快速度。该masscan工具的速度大约快1000倍,但只能提供有限的目标信息。

步骤是:

1.首先使用masscan扫描地址范围,以快速查找在端口3389(或您使用的任何端口)上响应的主机。

2.第二次输入masscaninto 的输出rdpscan,因此它只需要扫描我们知道的活动目标。

运行它的简单方法是在命令行上组合:

masscan 10.0.0.0/8 -p3389 | rdpscan --file -

我这样做的方式分为两步:

masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

编译

困难的部分是安装OpenSSL库,而不是与系统上的其他版本冲突。我测试的Linux版本的一些示例如下,但它们不断将包名称从一个分发更改为下一个分发。此外,OpenSSL兼容API有很多选项,例如BoringSSL和LibreSSL。

$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

一旦你解决了这个问题,你就.c可以像这样编译所有文件:

$ gcc *.c -lssl -lcrypto -o rdpscan

我把Makefile放在执行此操作的目录中,因此您可以这样做:

$ make

代码是用C编写的,因此需要安装C编译器,例如执行以下操作:

$ sudo apt install build-essential

常见的构建错误

本节介绍更明显的构建错误。

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

这意味着您要么没有安装OpensSSL标头,要么它们不在某个路径中。请记住,即使您安装了OpenSSL二进制文件,您还需要安装标头和库。

要在Debian上安装这些东西,请执行以下操作:

$ sudo apt install libssl-dev

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

示例链接器问题如下:

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。我通过对路径进行硬编码来解决这个问题:

$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

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

gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

运行

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

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

./rdpscan 192.168.10.101

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

./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

您还可以使用开始端IPv4地址或IPv4 CIDR规范扫描地址范围。不支持IPv6范围,因为它们非常大。

./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

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

./rdpscan --workers 1000 10.0.0.0/24

您可以使用命名良好的--file参数,而不是在命令行上指定目标,而是从文件加载它们:

./rdpscan --file ips.txt

文件的格式是每行一个地址,名称或范围。它还可以使用生成的文本masscan。修剪额外的空白,忽略空行,忽略任何注释行。一个注释是开始与行#字符,或//字符。

输出将发送stdout给VULNERABLE,SAFE或UNKNOWN状态。可能还有其他原因。以上描述了这些原因。

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

额外的Unix命令一样,你可以处理这个grepcut。要获取易受攻击的计算机列表:

./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

参数-dddd表示诊断信息,d您添加的s越多,打印的详细信息就越多。这是发送给stderr而不是stdout 为了你可以分开流。使用bash它是这样做的:

./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

诊断信息

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

./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分别以通常的方式不同的文件:

./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5和Tor lulz

SOCKS5支持:

./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

静态链接OpenSSL

为了将作为发行版附加的Windows和macOS二进制文件发布到此项目,我静态链接OpenSSL,因此不需要单独包含它,程序就可以正常工作。本节介绍了有关如何执行此操作的一些注意事项,尤其是因为OpenSSL自己的页面上的描述似乎已过时。

这两个步骤都从下载OpenSSL源并将其放在rdpscan目录:

git clone https://github.com/openssl/openssl

windows

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

接下来,您将需要一个特殊的“汇编程序”。我使用推荐的一款名为 NASM的产品

接下来,您将需要一个编译器。我使用的是VisualStudio 2010.您可以从Microsoft下载最新的“Visual Studio Community Edition”(即2019年)。

现在你需要构建makefile。这是通过进入OpenSSL目录并运行ConfigurePerl程序来完成的:

perl Configure VC-WIN32

我为Windows选择了32位,我想让程序尽可能与旧版本兼容。

我想要一个完全静态的构建,包括C运行时。为此,我在编辑器中打开生成的makefile,并将C编译标志从 /MD(意味着使用DLL)更改为/MT。我将以下内容添加到CPPFLAGS中-D_WIN32_WINNT=0x501,它将OpenSSL限制为可在Windows XP和Server 2003上运行的功能。否则,bcrypt.dll 如果您在这些旧系统上运行,则会收到无法找到的错误。

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

在命令行的这一点上,我输入:

nmake

这使得图书馆。静态的是libssl_static.liblibcrypto_static.lib我用来链接的rdpscan

MAC系统

首先,您需要安装编译器。我使用Apple的Developer Tools,安装XCode和编译器。我认为您可以使用Homebrew来安装gcc

然后进入OpenSSL的源目录并创建一个makefile:

perl Configure darwin64-x86_64-cc

现在简单地说:

make depend
make

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

现在rdpscan,只需构建macOS makefile:

make -f Makefile.macos

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

*参考来源:GitHub,FB小编周大涛编译,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/sectool/213344.html
如有侵权请联系:admin#unsafe.sh