0x01 概述
Microsoft Exchange用戶可以授權給其他用戶對其郵箱文件夾進行各種級別的訪問。例如,用戶可以授予其他用戶讀取訪問其收件箱中里面的電子郵件,但是要是用戶(或Exchange管理員)不小心設置了不正確的訪問權限,那么這將導致所有的用戶都能訪問讀取其的郵箱。
使用MailSniper,可以快速枚舉任何用戶可訪問的郵箱。在這篇文章中,我將說明此問題是如何產生的,如何查找存在權限問題的郵箱,以及在無需獲取郵箱管理員許可的情況下閱讀郵箱中的郵件。
0x02 使用Outlook設置郵箱權限
更改郵箱權限是所有用戶在Microsoft Outlook客戶端中都能夠輕松完成的事情。如果用戶右鍵單擊文件夾“收件箱”,然后單擊“屬性”,然后文件夾的屬性菜單就會打開。

單擊“權限”選項卡能看到文件夾當前的設置。這使得事情變得有趣了。單擊“添加”按鈕,用戶可以指定某個賬戶來授予各種權限。這是非常理想的,因為用戶能夠限制特定人員的訪問。但是你會注意到在“權限”中已經包含了“默認”和“匿名”選項。“默認”項目實質上已經包含了組織中的具有訪問郵件權限的每個用戶。

如果用戶錯誤地將權限級別“默認”設置為“None”之外的其他選項(除Contributor之外),則這可能允許組織中的每個成員訪問該郵件文件夾。

郵箱文件夾的權限也可以由Exchange管理員設置。直接在Exchange服務器上使用Set-MailboxFolderPermission cmdlet,可以修改這些郵箱權限的設置。
0x03 Invoke-OpenInboxFinder
作為滲透測試人員,找到全世界都能訪問的郵箱對我們是非常有價值的。這允許進行一些其他有趣的攻擊媒介。一方面,我們可以搜索其他用戶的電子郵件,來獲取某些內容,例如密碼或敏感數據,而無需其憑據。另一個攻擊方面是,如果該用戶的電子郵件地址與密碼重置系統相關聯,攻擊者可以觸發密碼重置,然后訪問包含密碼重置鏈接的用戶電子郵件。
我已經在MailSniper中添加了一個名為Invoke-OpenInboxFinder的功能,以幫助查找具有設置允許其他用戶訪問的權限的郵箱。想使用它,我們首先要從目標環境中收集一個電子郵件地址列表。MailSniper有一個名為”Get-GlobalAddressList“的模塊,可用於從Exchange服務器檢索全局地址列表。它將嘗試Outlook Web Access(OWA)和Exchange Web服務(EWS)的方法。此命令可用於從Exchange收集電子郵件列表:
Get-GlobalAddressList -ExchHostname mail.domain.com -UserName domain \ username -Password Spring2017 -OutFile global-address-list.txt

如果你處於可以與目標組織的內部Active Directory域進行通信的系統上,也可以使用Harmj0y的PowerView來收集電子郵件列表。將PowerView腳本導入PowerShell會話並運行該腳本以獲取電子郵件列表:
Get-NetUser | Sort-Object mail | ForEach-Object {$_.mail} | Out-File -Encoding ascii emaillist.txt
收集郵件列表以后,使用Invoke-OpenInboxFinder功能可以一次檢查一個郵箱,以確認當前用戶是否可以訪問。它還將檢查Exchange中是否存在可能被訪問的任何公共文件夾。
要使用Invoke-OpenInboxFinder,需要將MailSniper PowerShell腳本導入到PowerShell中:
Import-Module MailSniper.ps1
接下來,運行Invoke-OpenInboxFinder函數:
Invoke-OpenInboxFinder將嘗試自動發現基於郵件服務器電子郵件列表中的第一個條目。如果失敗,可以使用-ExchHostname標志手動設置Exchange服務器位置。
在下面的示例中,命令終端以名為”jeclipse“的域名用戶名運行。再從域中的電子郵件列表中運行Invoke-OpenInboxFinder后,發現了兩個公用文件夾。此外”jQuery“可以訪問”maximillian.veers@galacticempireinc.com“的收件箱。Invoke-OpenInboxFinder將會打印出每個項目的權限級別。在輸出中可以看到”Default“項設置為”Reviewer“。

0x04 使用MailSniper搜索其他用戶的郵箱
發現郵箱具有允許用戶訪問的過多權限之后,MailSniper可用於讀取並搜索目標郵箱中的郵件。MailSniper的Invoke-SelfSearch功能,以前主要用於搜索正在運行它的用戶的郵箱。我稍作修改,以便能夠檢查另一個用戶的電子郵件。這里需要指定一個名為”OtherUserMailbox“的新標志來訪問其他郵箱。該示例命令如下:
Invoke-SelfSearch -Mailbox target-email-address@domain.com -OtherUserMailbox
在下面的截圖中,我使用”jeclipse“賬戶搜索maximillian.veers@galactiempireinc.com的郵箱。發現三個結果,其電子郵件的主題或主題中包含了密碼或憑證。

0x05 Office365和對外開放的Exchange服務器
如果Exchange Web服務(EWS)可訪問,Invoke-OpenInboxFinder也可以在Internet上的Office365和對外開放的Exchange服務器使用。除非它對外設置了自動發現,否則可能需要使用-ExchHostname手動指定主機名。要連接到Office365,主機名將是”outlook.office365.com“,指定-Remote標志讓Invoke-OpenInboxFinder提示可用於向遠程EWS服務進行身份驗證的憑據。
用於檢查托管在Office365上的郵箱以獲得廣泛權限的示例命令如下:
Invoke-OpenInboxFinder -EmailList。\ emaillist.txt -ExchHostname outlook.office365.com -Remote
以下是客戶使用Office365時的實際評估截圖。我們可以在組織中訪問單個用戶的憑據。通過使用從全局地址列表收集的電子郵件列表運行Invoke-OpenInboxFinder,我們可以確定組織中的三個單獨的賬戶允許我們的用戶閱讀他們的電子郵件。

0x06 建議
顯然,防止攻擊者訪問有效的用戶賬戶是防御的第一步。問題是,它不會阻止你當前的員工去使用這種技術來訪問其他用戶“UR”有權限訪問的郵箱。另外要注意的是,你必須擁有一個有效的相關域賬戶,以檢查是否可以訪問他人的郵箱。
如果可能的話,限制這些類在Outlook客戶端上的更改非常有幫助的。我已經找到了幾篇舊的文章(2010)說明權限選項卡能夠用GPO鎖定。我沒有嘗試過這些文章上面說的任何解決方案,但這值得一試。你可以在這里和這里查看這些文章。
使用MailSniper中的Invoke-OpenInboxFinder功能,或使用Exchange上的 Get-MailboxFolderPermission cmdlet審核組織中所有帳戶的設置。
0x07 結論
郵箱權限是紅藍和雙方都應該注意的問題。通過Outlook在文件夾屬性中包含“默認”權限項的方式,這使得用戶更有可能錯誤地授予組織中的所有人對其郵箱進行訪問。在紅方角度來看,這可以提供在電子郵件中進一步查找訪問網絡密碼或其他敏感數據的機會。藍方角度則應該擔心其一些高級賬戶(C-Suite類型)意外地與整個公司共享了郵箱,公司員工窺探其他員工,甚至通過這些渠道合法的進行修改郵箱等。
你可以從Github下載MailSniper: https://github.com/dafthack/mailsniper
exp利用工具:https://github.com/sensepost/ruler
參考文獻:
https://sensepost.com/blog/2017/outlook-forms-and-shells/
