Rdpscan:一款BlueKeep快速扫描工具

2019-09-11 11:14:00
admin
转贴 2092
摘要:这是一款快速的CVE-2019-0708漏洞扫描工具。目前,公共互联网上大约有900,000台机器容易受到这种漏洞的影响,这还是一个命令行工具。您可以下载源代码并自行编译,也可以从上面的链接下载一个用于Windows或macOS的预编译二进制文件。此工具完全基于https://github.com/zerosum0x0/CVE-2019-0708的rdesktop补丁。我只是修改了代码,也可以在macOS和Windows上轻松编译,并添加了扫描多个目标的功能。

这是一款快速的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 

使用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.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和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.lib和libcrypto_static.lib我用来链接的rdpscan。

MAC系统

首先,您需要安装编译器。我使用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库。