Exchange滲透思路總結
exchange快速了解
FOFA:
microsoft exchange 2013:app="Microsoft-Exchange-2013"||app="Microsoft-Exchange-Server-2013-CU21"||app="Microsoft-Exchange-Server-2013-CU17"||app="Microsoft-Exchange-Server-2013-CU23"||app="Microsoft-Exchange-Server-2013-CU13"||app="Microsoft-Exchange-Server-2013-CU22"||app="Microsoft-Exchange-Server-2013-CU11"||app="Microsoft-Exchange-Server-2013-CU2"||app="Microsoft-Exchange-Server-2013-CU16"||app="Microsoft-Exchange-Server-2013-CU19"||app="Microsoft-Exchange-Server-2013-CU3"||app="Microsoft-Exchange-Server-2013-CU18"||app="Microsoft-Exchange-Server-2013-CU5"||app="Microsoft-Exchange-Server-2013-CU20"||app="Microsoft-Exchange-Server-2013-CU12"||app="Microsoft-Exchange-Server-2013-CU15"||app="Microsoft-Exchange-Server-2013-CU10"||app="Microsoft-Exchange-Server-2013-CU9"||app="Microsoft-Exchange-Server-2013-CU6"||app="Microsoft-Exchange-Server-2013-CU7"||app="Microsoft-Exchange-Server-2013-CU1"||app="Microsoft-Exchange-Server-2013-CU14"||app="Microsoft-Exchange-Server-2013-CU8"||app="Microsoft-Exchange-Server-2013-RTM"||app="Microsoft-Exchange-Server-2013-SP1"||app="Microsoft-Exchange-2013" microsoft exchange 2016:app="Microsoft-Exchange-Server-2016-CU19"||app="Microsoft-Exchange-Server-2016-CU3"||app="Microsoft-Exchange-Server-2016-CU12"||app="Microsoft-Exchange-Server-2016-RTM"||app="Microsoft-Exchange-Server-2016-CU7"||app="Microsoft-Exchange-Server-2016-CU17"||app="Microsoft-Exchange-Server-2016-CU2"||app="Microsoft-Exchange-Server-2016-CU1"||app="Microsoft-Exchange-Server-2016-CU14"||app="Microsoft-Exchange-Server-2016-CU5"||app="Microsoft-Exchange-Server-2016-CU11"||app="Microsoft-Exchange-Server-2016-CU9"||app="Microsoft-Exchange-Server-2016-CU16"||app="Microsoft-Exchange-Server-2016-CU10"||app="Microsoft-Exchange-Server-2016-CU6"||app="Microsoft-Exchange-Server-2016-CU13"||app="Microsoft-Exchange-Server-2016-CU18"||app="Microsoft-Exchange-Server-2016-CU8"||app="Microsoft-Exchange-Server-2016-CU4"||app="Microsoft-Exchange-2016-POP3-server" microsoft exchange 2019:app="Microsoft-Exchange-Server-2019-CU5"||app="Microsoft-Exchange-Server-2019-CU3"||app="Microsoft-Exchange-Server-2019-Preview"||app="Microsoft-Exchange-Server-2019-CU8"||app="Microsoft-Exchange-Server-2019-CU1"||app="Microsoft-Exchange-Server-2019-CU7"||app="Microsoft-Exchange-Server-2019-CU2"||app="Microsoft-Exchange-Server-2019-CU6"||app="Microsoft-Exchange-Server-2019-RTM"||app="Microsoft-Exchange-Server-2019-CU4" microsoft exchange 2010:app="Microsoft-Exchange-2010-POP3-server-version-03.1"||app="Microsoft-Exchange-Server-2010"

郵件服務器角色
在exchange 2010中,exchange包含五個服務器角色,分別為郵箱服務器,客戶端訪問服務器,集線傳輸服務器,統一消息服務器,邊緣傳輸服務器。
在后來的exchange 2013中服務器被精簡為3個:郵箱服務器,客戶端訪問服務器,邊緣傳輸服務器
exchange 2016和2019中則只有 郵箱服務器和邊緣傳輸服務器了。
exchange 2010
郵箱服務器
mailbox server,提供托管郵箱,公共文件夾等服務,是必選的服務器角色
客戶端訪問服務器
client access server,用來接收并處理不同客戶端的請求,并提供各種接口給客戶以訪問Exchange服務,
MAPI訪問 POP3和IMAP4訪問 Outlook Web App訪問(OWA) Outlook Anywhere訪問 Autodiscover自動發現服務 可用性服務
集線傳輸服務器
hub transport server,核心服務是Microsoft Exchange Transport,用于處理大多數郵件的路由、策略等以及Mail Flow。起一個郵件傳輸中繼的作用。
統一消息服務器
unified messaging server,用于允許郵箱用戶可以在郵件中發送存儲語音消息和傳真消息,可選角色
邊緣傳輸服務器
edge transport server,通常部署于網絡邊界。其接受來自內部組織的郵件和來自外部可信服務器的郵件,然后應用特定的反垃圾郵件、反病毒策略,最后將通過策略篩選的郵件路由到內部的集線傳輸服務器,可選角色
exchange 2013
郵箱服務器
托管郵箱、公共文件夾等數據,主要包含集線傳輸服務(Hub Transport service)和郵箱傳輸服務(Mailbox Transport service)兩大組件服務。
客戶端訪問服務器
負責認證、重定向、代理來自外部不同客戶端的訪問請求,主要包含客戶端訪問服務(Client Access service)和前端傳輸服務(Front End Transport service)兩大組件。
邊緣傳輸服務器
負責路由出站與入站郵件、策略應用等。
接口和協議
OWA
owa即 outlook web app,即outlook的網頁版。(outlook是exchange的客戶端軟件,許多電腦都有所預裝)
地址一般為 http://aa.com/owa

ECP
Exchange Administrative Center,即exchange管理中心,管理員的web控制臺

outlook anywhere
作用是可以讓外網用戶直接通過outlook anywhere 直接登錄到exchange郵箱而無需使用VPN。該特性在exchange server 2013中默認開啟,也就是說在exchange server 2013 以后outlook 不再區分內外網環境。
MAPI
于Exchange 2013 SP1和Outlook 2013 SP1中被提出的一種新的outlook與exchange交互傳輸協議。
EAS
Exchange ActiveSync是一種允許用戶通過移動設備或其他便攜式設備訪問和管理郵件、聯系人、日歷等Exchange功能的同步協議,在Windows上使用時其進程名稱為wcesomm.exe。”
EWS
Exchange Web Service,是exchange提供的一套API編程接口,用于操作exchange相關功能,于exchange server 2007被提出。
功能和服務
Autodiscover
Autodiscover,自動發現,是exchange server 2007 推出的一個服務。
該服務目的是簡化用戶登錄流程:用戶只需要輸入自己的電子郵件地址和密碼,就能夠通過Autodiscover服務獲取運行客戶端應用程序所需的配置信息
該服務運行在客戶端訪問服務器上。
GAL
GAL即全局地址表(global address list)
記錄了域中用戶的基本信息與其郵箱地址,以形成域用戶與郵箱用戶之間的關聯。
在滲透中可以通過GAL來獲取所有郵箱地址。
EXCHANGE信息搜集
在滲透中該如何發現哪一臺機器是EXCHANGE服務器呢?
在exchange server 2019 中,由于只細分了郵箱服務器和邊緣傳輸服務器,所以開放了如OWA,ECP等接口的服務器即為郵箱服務器。
發現
端口掃描
exchange會對外暴露接口如OWA,ECP等,所以我們可以通過一些端口特征來發現exchange。
exchange 接口會暴露在80端口,同時25/587/2525等端口上會有SMTP服務。

spn
如果已經打入域中,想快速的定位到exchange服務器,只需要查詢域中spn服務即可。
setspn -q */*

特殊域名
https://autodiscover.domain.com/autodiscover/autodiscover.xml https://owa.domian/owa/ https://mail.domain.com/ https://webmail.domain.com/
尋找接口
/autoDiscover/ 自Exchange Server 2007開始推出的一項自動服務,用于自動配置用戶在Outlook中郵箱的相關設置,簡化用戶登陸使用郵箱的流程。/ecp/“Exchange Control Panel” Exchange管理中心,管理員用于管理組織中的Exchange的Web控制臺/eWS/“Exchange Web Services” Exchange Web Service,實現客戶端與服務端之間基于HTTP的SOAP交互/mapi/ Outlook連接Exchange的默認方式,在2013和2013之后開始使用,2010 sp2同樣支持/microsoft-Server-ActiveSync/ 用于移動應用程序訪問電子郵件 /OAB/“Offline Address Book” 用于為Outlook客戶端提供地址簿的副本,減輕Exchange的負擔/owa/“Outlook Web APP” Exchange owa 接口,用于通過web應用程序訪問郵件、日歷、任務和聯系人等/powerShell/ 用于服務器管理的Exchange管理控制臺 /Rpc/ 早期的Outlook還使用稱為Outlook Anywhere的RPC交互
工具使用
https://github.com/vysec/checkO365
版本確定
可以通過OWA,ECP的HTML源代碼確定版本
源代碼搜索/owa/

可以看到一串數字 15.0.1130,這是exchange具體版本號,到這里查就行了https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019
IP泄露
抓包以下接口包,將HTTP版本改為1.0,并刪除HOST頭,就會暴露exchange ip,有時會暴露內網IP
/Microsoft-Server-ActiveSync/default.eas /Microsoft-Server-ActiveSync /Autodiscover/Autodiscover.xml /Autodiscover /Exchange /Rpc /EWS/Exchange.asmx /EWS/Services.wsdl /EWS /ecp /OAB /OWA /aspnet_client /PowerShell

想要更方便的話,可以用msf的模塊自動搜集 use auxiliary/scanner/http/owa_iis_internal_ip
泄露exchange服務器信息
當我們對exchange服務器進行NTLM質詢時,在服務器返回challenge時同時會返回域信息,機器名等信息。以此為基礎可以對exchange進行服務器信息搜集
直接nmap
nmap host -p 443 --script http-ntlm-info --script-args http-ntlm-info.root=/rpc/rpcproxy.dll -Pn

EXCHANGE 外圍打點
爆破
接觸到exchange的第一步自然是接觸到它的接口服務如OWA,ECP等。
由于是登錄框,我們自然可以用爆破來進行攻擊。通常情況下EXCHANGE不限制大字典爆破。
常見可爆破接口
/Autodiscover/Autodiscover.xml # 自 Exchange Server 2007 開始推出的一項自動服務,用于自動配置用戶在Outlook中郵箱的相關設置,簡化用戶登錄使用郵箱的流程。/Microsoft-Server-ActiveSync/default.eas/Microsoft-Server-ActiveSync # 用于移動應用程序訪問電子郵件/Autodiscover/Rpc/ # 早期的 Outlook 還使用稱為 Outlook Anywhere 的 RPC 交互/EWS/Exchange.asmx/EWS/Services.wsdl/EWS/ # Exchange Web Service,實現客戶端與服務端之間基于HTTP的SOAP交互/OAB/ # 用于為Outlook客戶端提供地址簿的副本,減輕 Exchange 的負擔/owa # Exchange owa 接口,用于通過web應用程序訪問郵件、日歷、任務和聯系人等/ecp # Exchange 管理中心,管理員用于管理組織中的Exchange 的Web控制臺/Mapi # Outlook連接 Exchange 的默認方式,在2013和2013之后開始使用,2010 sp2同樣支持/powershell # 用于服務器管理的 Exchange 管理控制臺
爆破比較實用的工具有Eburst和Ruler
https://github.com/grayddq/EBurst (py)
https://github.com/sensepost/ruler (exe)
ruler由于windows版的顯示似乎有點問腿,這里用的linux版本

autodiscover 爆破的原理是,訪問autodiscover時瀏覽器會彈出認證框,當輸入正確的憑證后則會顯示XML文檔內容。


ps://github.com/dafthack/MailSniper (ps1)
下面的是密碼噴灑的攻擊方式,-Password項也可以設置為一個記錄password的字典txt
對OWA進行爆破Import-Module .\MailSniper.ps1Invoke-PasswordSprayOWA -ExchHostname OWAHOST -UserList .\user.txt -Password password -Threads 1 -Domain domainname -OutFile out.txt -Verbose 對EWS進行爆破Invoke-PasswordSprayEWS -ExchHostname EWSHOST -UserList .\user.txt -Password password -Threads 1 -Domain domainname -OutFile out.txt -Verbose
EXCHANGE 后滲透
郵件內容檢索
我們獲取一個exchange用戶以后,可以對郵件列表進行檢索獲取敏感信息,方便下一步滲透
MailSniper 可以完成這個任務,但是這個工具感覺被殺的比較嚴重,可以試著修改一下函數名變量名啥的免免殺。
檢索指定用戶
檢索rengan@const.com的 收件箱文件夾里的 內容含有機密的 郵件,在啟用remote參數后會彈出一個輸入框輸入郵箱票據Invoke-SelfSearch -Mailbox rengan@const.com -Terms *機密* -Folder 收件箱 -ExchangeVersion Exchange2013_SP1 -remote -OutputCsv a.csv
可以發現在中文的exchange下,用戶的郵件一般存放于””收件箱””文件夾,而對于英文則是”inbox”

獲取全局地址表
依舊通過MailSniper 實現,在我們獲得一個合法用戶的憑據以后,就可以通過獲取全局地址表來獲取所有郵箱地址。
Get-GlobalAddressList -ExchHostname Ex -UserName rengan -ExchangeVersion Exchange2013_SP1 -Password ganren@123456

查找存在缺陷的用戶郵箱權限委派
一個用戶的文件夾是可以給其他用戶權限的。

點擊此處的權限,來到以下界面,這里的默認即 所有用戶(everyone) 的對此文件夾的權限,我這里是把權限給的很高

實戰中也可能會遇到用戶A對用戶B的收件箱有讀寫權限的情況,所以我們在獲取用戶A的憑據后可以進而讀取用戶B的收件箱。
用MailSniper 實現
Invoke-OpenInboxFinder -ExchangeVersion Exchange2013_SP1 -ExchHostname ex.const.com -EmailList .\user.txt -remote

既然這里對administrator的收件箱可讀,那么就可以用invoke-selfsearch 進行詳細的郵件檢索了。
通過exchange用戶組進行域提權
exchange安裝后會在AD上生成兩個容器

其中exchange windows permissions組的用戶擁有writeDACL權限, Exchange Trusted Subsystem 是 Exchange Windows Permission 的成員,能繼承writedacl權限,有這個權限后就能使用dcsync導出所有用戶hash。
其中exchange trusted subsystem組甚至可能有繼承自administrators組的權限。

同時,在安裝exchange后還會生成一個組Organization Management,這個組可以修改其他exchange組的用戶信息,所以當然也可以修改Exchange Trusted Subsystem組的成員信息,比如向里面加一個以獲得的用戶。
綜上所述,只要獲得Organization Management,Exchange Trusted Subsystem,Exchange Windows Permission,就可以通過dcsync來獲取整個域權限。
當然,想獲得上述組用戶權限,還是不太容易的。
NTLM relay
用exchange也可以很方便的進行NTLM relay:給用戶發一封郵件,其中包含的圖片鏈接形如 \\10.10.10.1\a.jpg,用戶收到郵件后則會向10.10.10.1發送NTLM質詢,從而造成NTLM relay。
其實EXCHANGE 很多CVE 都是與NTLM RELAY 掛鉤的,如CVE-2018-8581,CVE-2020-17141 ,CVE-2020-17143,CVE-2019-1040
OUTLOOK 命令執行
OUTLOOK 客戶端有一個 規則與通知 的功能,通過該功能可以使outlook客戶端在指定情況下執行指定的指令。若我們獲得某用戶的憑證,可以通過此功能設置“用戶收到含指定字符的郵件時 執行指定的指令比如clac.exe”,當用戶登錄outlook客戶端并訪問到此郵件時,它的電腦便會執行calc.exe。
但是,當觸發動作為啟動應用程序時,只能直接調用可執行程序,如啟動一個exe程序,但無法為應用程序傳遞參數,想要直接上線,我們可以將EXE放到某共享目錄下,或者直接上傳到用戶的機器。
具體步驟為打開規則與通知功能,然后新建功能,在接收到某條件郵件時啟動指定應用程序


收到含abc內容的郵件后,成功彈計算器