这是一款快速的CVE-2019-0708漏洞扫描工具。目前,公共互联网上大约有900,000台机器容易受到这种漏洞的影响,这还是一个命令行工具。您可以下载源代码并自行编译,也可以从上面的链接下载一个用于Windows或macOS的预编译二进制文件。
此工具完全基于https://github.com/zerosum0x0/CVE-2019-0708的rdesktop
补丁。我只是修改了代码,也可以在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
这个rdpscan
工具相当慢,每秒只能扫描几百个目标。你可以masscan
用来加快速度。该masscan
工具的速度大约快1000倍,但只能提供有限的目标信息。
步骤是:
1.首先使用masscan扫描地址范围,以快速查找在端口3389(或您使用的任何端口)上响应的主机。
2.第二次输入masscan
into 的输出rdpscan
,因此它只需要扫描我们知道的活动目标。
运行它的简单方法是在命令行上组合:
masscan 10.0.0.0/8 -p3389 | rdpscan --file -
我这样做的方式分为两步:
masscan 10.0.0.0/8 -p3389 > ips.txtrdpscan --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 required185.11.124.79 - SAFE - not RDP - SSH response seen125.121.137.42 - UNKNOWN - no connection - refused (RST)40.117.191.215 - SAFE - CredSSP/NLA required121.204.186.182 - SAFE - CredSSP/NLA required99.8.11.148 - SAFE - CredSSP/NLA required121.204.186.114 - SAFE - CredSSP/NLA required49.50.145.236 - SAFE - CredSSP/NLA required106.12.74.155 - VULNERABLE - got appid222.84.253.26 - SAFE - CredSSP/NLA required144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout183.134.58.152 - UNKNOWN - no connection - refused (RST)83.162.246.149 - VULNERABLE - got appid
额外的Unix命令一样,你可以处理这个grep
和cut
。要获取易受攻击的计算机列表:
./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支持:
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050
为了将作为发行版附加的Windows和macOS二进制文件发布到此项目,我静态链接OpenSSL,因此不需要单独包含它,程序就可以正常工作。本节介绍了有关如何执行此操作的一些注意事项,尤其是因为OpenSSL自己的页面上的描述似乎已过时。
这两个步骤都从下载OpenSSL源并将其放在rdpscan
目录:
git clone https://github.com/openssl/openssl
对于Windows,您需要先安装某个版本的Perl。我使用ActiveState中的那个。
接下来,您将需要一个特殊的“汇编程序”。我使用推荐的一款名为 NASM的产品
接下来,您将需要一个编译器。我使用的是VisualStudio 2010.您可以从Microsoft下载最新的“Visual Studio Community Edition”(即2019年)。
现在你需要构建makefile。这是通过进入OpenSSL目录并运行Configure
Perl程序来完成的:
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.lib
和libcrypto_static.lib
我用来链接的rdpscan
。
首先,您需要安装编译器。我使用Apple的Developer Tools,安装XCode和编译器。我认为您可以使用Homebrew来安装gcc
。
然后进入OpenSSL的源目录并创建一个makefile:
perl Configure darwin64-x86_64-cc
现在简单地说:
make dependmake
此时,它创建了dynamic(.dylib
)和static(.lib
)库。我删除了动态库,以便它默认捕获静态库。
现在rdpscan
,只需构建macOS makefile:
make -f Makefile.macos
编译所有rdpscan
源文件,然后链接到../openssl
刚刚构建的目录中的OpenSSL库。
*参考来源:GitHub,FB小编周大涛编译,转载请注明来自FreeBuf.COM