記一次大型且細小的域滲透實戰

Gcow安全團隊發表於2021-02-01

記一次大型域滲透實戰

1.本文總計3274字,圖片總計38張,但由於實戰環境下打碼比較多,影響了看官體驗,需要看官仔細看圖以及文章內容,推薦閱讀時間20-30分鐘
2.本文系Gcow安全團隊絕影小組原創文章,未經許可禁止轉載
3.若看官在閱讀本文中遇到說得不清楚以及出現錯誤的部分 請及時與公眾號的私信聯絡 謝謝各位師傅的指導

0x01 前提與準備:

A.前言


我是後面接手這個域環境,而前面的dalao已經到域控的部分了,我因為寫文章的原因,所以需要從原地出發,學習一下dalao是如何打到域控的

B.宣告:


1. 本文順序可能有點雜亂,需要耐心閱讀,並且打碼的地方有打得不好請見諒 -.-(得細心看)

2. 本次滲透因為是實戰的原由,沒有使用DACL委派方法進行攻擊(因為新增/修改計算機賬戶[Machine Account]或使用者[Domain Users]我實屬不敢弄,感覺動靜大),不過本文也會在相應位置寫出對應的攻擊方法

3. 實戰過程所植入的Beacon掉了幾次,所以圖中有些地方的程式號(PID/PPID)可能會有對不上的地方,請大家原諒

4.本文涉及敏感資訊的部分統一使用別名,例如:child.xiaoli,IP Address部分直接忽略打碼的格子即可

5.打碼的原因全部基於實戰,沒有在本地復現,所以請各位見諒

C.已知資訊:


1. 已經透過外層的植入上線了 CobaltStrike
2. 目標環境存在防毒,但是對我們的操作並沒任何影響
3. 存在多域信任資訊,當前屬於子域(Child Domain)
4. 環境並非英語,一些時間需要進行翻譯

D.環境與工具的準備:


1. A Kali machine
2. CobaltStrike
3. Bloodhound 4.0(11月更新了Bloodhound,一直沒機會測試,現在機會來了)
4. PowerSploit(停更了挺可惜得,雖然有SeatBelt,但是不太會用)

0x02 開始:

1. 資訊收集:

  (1)目前我在r**a這臺主機(接下來r**a=ra),而ra主機上有ra使用者,並且已經提權到了system,其中ip為192.168.1.95(忽略下面的主域)

圖1

  當前使用者為ra,其完全使用者名稱=m\ra   圖2

  (2) 當前機子所在域的FQDN(完全域名),我們接下來在文中統稱為 m.child.xiaoli

圖3

  (3)檢視域控制器

  可能不是英文的原因,CobaltStrike的net domain_controller沒用了

圖4

  因此我們直接net group /domain檢視域控即可,域控為po.m.child.xiaoli

圖5

  (4)列舉Enterprise Admins

  這裡我們要做筆記,在子域環境裡面,域管理員有兩種,一種是Domain Admins,另外一種是Enterprise Admins,我們net group /domain 看不到任何有關Enterprise Admins的資訊,但是不慌,我們上powersploit神器

注意:由於不同語言,該域的Enterprise Admins組名 = A****s組,文中直接稱作AS組(這個組名是我翻譯後得知的)

  首先我們使用net group常規查詢失敗

圖6

  匯入powersploit,使用模組Get-DomainForeignUsers(列舉域內所有使用者,並且返回同時擁有其他域組的使用者),我們得知m.child.xiaoli的域使用者PO同時處於child.xiaoli的AS組(Enterprise Admins)(這裡打碼不太行,耐心點看:)

圖7

  (5)因為是個極大域,我們同時直接上神器BloodHound幫我們分析

Execute SharpHound Collector:

圖8

Download BloodHound File:   圖9

  (6)檢視域信任(Domain Trusts)資訊,可以看到是多域結構(這個圖就將就點看吧,還是能看懂的)                                                  

圖10

  為了方便理解,我使用BloodHound的Domain Trusts圖方便大家理解

   1. 其中child.xiaoli為根域(Root Domain),m.child.xiaoli為子域(Child Domain)
  2. 因為本機當前在m.child.xiaoli,所以顯示Native
  3. 接著o/c/t/e/T.m.child.xiaoli為m.child.xiaoli的子域
  4. o/c/t/e/T.m.child.xiaoli之間沒有信任關係
  5. NxiaoliE.child.xiaoli為child.xiaoli的第二個子域,和m.child.xiaoli之間沒有信任關係

圖11


2.開始進攻

(注意,下文的PGO使用者/計算機並非是PO使用者/計算機)

   目前已知資訊有:
  當前使用者:m.child.xiaoli\ra
  我們處在子域:m.child.xiaoli
  子域域控:po.m.child.xiaoli
  主域:child.xiaoli
  主域域控(根域):未知(還沒收集,不著急)
  Enterprise Admins組名:AS
  已知Enterprise Admins使用者:m.child.xiaoli\PO(不要和下文的PGO使用者混淆)
  Domain Admins:交給Bloodhound分析,不著急


(1)目標分析

  我們的目標已經很明確了,目標為域控:【po.m.child.xiaoli】,因此,我們直接在BloodHound分析一波最短路徑到域控,首先起始點為使用者ra,接著終點為域控【po.m.child.xiaoli

圖12

BloodHound結果分析:從上圖我們能看到,最短路徑的分析,首先使用者ra(我們當前的使用者)是一個名為SN組的成員,而這個組又是計算機PGO的管理員,接著主機PGO上面有一個名為PGO使用者的session(程式),接著這個使用者是域控的管理員=PGO Domain Admins,但不是Enterprise Admins,因為剛剛的列舉沒看到使用者PGO

(2)橫向移動

  首先我們使用名為【LM】的SMB Beacon橫向到主機PGO.m.child.xiaoli,因為ra使用者同時是PGO主機的管理員,所有同時獲取到system32許可權的beacon

圖13

  橫向過去之後,我們使用名為【Priv_Esc】的TCP Beacon注入一個pgo使用者程式,這裡選擇了PID為1632的explorer程式

圖14

圖15

  因為pgo使用者是域控的管理員,此時我們能利用pgo使用者去訪問域控po.m.child.xiaoli了

圖16

  用pgo使用者橫向到域控po.m.child.xiaoli,並且可以獲得管理員許可權的beacon

圖17

  Cobalt Strike 橫向圖                       圖18

(3)域信任攻擊

  此時已經到子域域控了,並且擁有該機子的system32許可權,你可以選擇往上去到根域,還是往下探索m.child.xiaoli的子域

   A. 想往上去到根域的,請接著閱讀(3-1和3-2)
 
  B. 若你是想往下探索該子域的子域的,請跳到(3-3)


(3-1)From DA to EA:攻擊到根域child.xiaoli(不講武德)


  我們在子域域控收集根域的域控資訊,這裡使用powersploit的模組Get-ADDomainController,此時我們看到根域域控為:cl.child.xiaoli,並且ip為192.168.1.241(圖中的Hostname+IPv4Address)

圖19


  筆記:

   Enterprise Controller:cl.child.xiaoli
  Enterprise Controller IP Address:192.168.1.241


  我們同時看看pgo除了是Domain Admins組的使用者,還是什麼組的使用者

圖20

  可以看到,pgo使用者還是Administrators組的使用者,根據微軟官方所述的話,個人理解該組使用者許可權比Domain Admins許可權還高,並且擁有兩條主要DCSync Attack所需要的Privilege:GetChangesALLGetChanges,我們可以制定一些比較【不講武德】的攻擊方案

   第一種:我們可以直接獲取在域控注入一個po使用者程式,使用該使用者程式去訪問根域child.xiaoli(小提醒:上文提到PO為Enterprise Admins組使用者)
 
  第二種:如果沒有po使用者程式,我們可以在m.child.xiaoli進行dcsync攻擊,然後使用make_token呼叫m.child.xiaoli\po使用者的Credentials(憑據),接著去訪問根域child.xiaoli
 
  第三種:我們使用Administrators組的許可權去欺負域,太DD了,因此我們可以不使用Administrators組帶來的許可權,而使用WriteDacl自己給自己賦予DCSync許可權
 
  第四種:域控自己本身就有GetChangesALL和GetChanges許可權,我們可以提權到system,使用機器賬戶去進行DCSync攻擊
 
  第五種:使用SID-History攻擊(講武德)

流程圖:

圖21

(3-1-1)第一種攻擊:略(極度不講武德)

(3-1-2)第二種攻擊:如下圖所示,直接dcsync(同樣不講武德)

圖22

(3-1-3)第三種攻擊(有點不講武德),相對於第二種多了一步,我們看看Bloodhound分析

圖23

  實際上相當於PGO在域內擁有WriteDacl許可權,那我們兩句命令就能實現dcsync

   ##新增DCSync許可權,並且使用mimikatz匯出全部hash    Add-DomainObjectAcl -TargetIdentity child.xiaoli -Rights DCSync    lsadump::dcsync /domain:child.xiaoli /all /csv    ##刪除許可權,防止管理員發現    Remove-DomainObjectAcl -TargetIdentity child.xiaoli -Rights DCSync

(3-1-4)這個也沒什麼好講的,域控本身就有那倆許可權(極度不講武德)

(3-1-5)使用SID-History攻擊到根域child.xiaoli(講武德)

  實現這個攻擊,需要五個條件(實際上就是比普通的黃金票據多了一個sids條件)而金票需要四個,我們需要獲取根域child.xiaoliEnterprise Admins組的ObjectID(SID+RID)

  這裡我們使用Conver-NameToSid獲取child.xiaoli\krbtgt使用者的ObjectID

圖24

  獲取到krbtgt的Object ID後,我們要修改其RID,502修改為519,SID為519的ObjectID=Enterprise Admins組的Object ID

這裡偽造的使用者就有點講究了,使用者名稱不能隨便取,我用上面收集到的使用者PO登入失敗了,即使m.child.xiaoli\PO是處於Enterprise Admins組

為此,我又一次請教了Bloodhound,看到Enterprise Admins組裡有個child.xiaoli\Administrator使用者,因此我們偽造的使用者名稱填寫administrator(Administrator是我翻譯之後的結果,未翻譯前並非叫Administrator)

   mimikatz kerberos::golden /user:administrator /domain:m.child.xiaoli /sid:【m.child.xiaoli的sid】 /krbtgt:xxxxxxxxxxxxxxxx /sids:【Enterprise Admins組的Object ID】 /startoffset:0 /endin:600 /renewmax:10080 /ptt

(圖片我直接馬賽克了關鍵部分,但是能看到Extra SIDs最後的RID為519就沒錯了)

圖25

  這邊我在m.child.xiaoli的域控上隨便注入了個普通使用者程式上測試,並且目標為nl.child.xiaoli,是根域的一臺機子

  注入票據前:(即使打碼也掩蓋不住報錯的氣質)

圖26

  注入票據後:

圖27

  這時有個疑問了,為什麼我們的登入域還是M.child.xiaoli,卻說成Enterprise Admins?別急,我們remote-exec看看我們的這個使用者的組

圖28

  不難看到,M\Administrator確實處於Child\AS組,也就是child.xiaoli的Enterprise Admins組(後面的RID為證據)

  (PS:我個人實操過,對根域域控確實具有完全控制權)

(3-2)Form DA to child DA:Child to child(從子域到子域的子域)

為了方便理解,我把子域的子域稱為SUB-Child

  很多時候,SUB-Child的東西也挺多的,從上文Domain Trusts分析,我們看到m.child.xiaoli還有子域o/c/t/e/T.m.child.xiaoli,在接下來的實驗中,我們使用o.m.child.xiaoli作為我們的目標,我們從m.child.xiaoli向下移動,因此我們大約有三種攻擊方案

   第一種:從子域m.child.xiaoli到根域child.xiaoli後,然後從根域child.xiaoli使用Enterprise Admins組的使用者到o.m.child.xiaoli(不講武德)        第二種:使用SID-History Attack,從子域m.child.xiaoli到子域o.m.child.xiaoli

(3-2-1)攻擊過程略(極度不講武德,使用Enterprise Admins)

  圖解:   圖29


(3-2-2)使用SID-History攻擊

  圖解:  

圖30

這個是我心血來潮測試的,可能有不對的地方,如有不對的地方,麻煩大佬在私信提出,十分感謝

  我們可以在m.child.xiaoli裡面使用BloodHound收集資訊,或者手動收集

  自動:BloodHound Automatic Collected:(-d 指定收集域,zipfilename修改Output檔名)

圖31

  手動:使用Powersploit手動收集o.m.child.xiaoli的域控制器,可以看到該域的域控計算機名叫LO,FQDN=lo.o.m.child.xiaoli,其中我們還收集到了域的SID,不過被我打碼了   圖32

(這個語言的Domain Admins=Axxxo組,我們簡稱為AO組)

  使用powersploit收集該子域的域管理員,可以看到是Administrator

圖33

  現在我們對子域的資訊有

   域控制器:lo.o.m.child.xiaoli    該域管理員:Administrator    域控sid:SXXXXXXXXXXXXXXXXXXX    該域的Domain Admins組的ObjectID(SID+RID):SID+512=SXXXXXXXXXXXXXXXXXXX-512(RID為512為Domain Admins組)

  接著我們使用SID-History攻擊

   mimikatz kerberos::golden /user:Administrator /domain:m.child.xiaoli /sid:(m.child.xiaoli域的sid) /krbtgt:KRBTGT_HASH /sids:(域lo.o.m.child.xiaoli的Domain Admins ObjectID) /startoffset:0 /endin:600 /renewmax:10080 /ptt

圖34

  接著就可以訪問子域域控lo.o.m.child.xiaoli

圖35

  我們看看使用者組,確實處於o.m.child.xiaoli\Domain Admins,即使使用者登入域是m.child.xiaoli

圖36

3.二次進攻

主要是觀察DCAL和ACE,但是我寫的時候已經太累了,就不想寫,而且我怕修改了密碼之類的操作被發現,雖然密碼改了可以用mimikatz改回去,但是本文就這樣吧(不敢作死搞大動靜)


0x02 結尾

總結一下本文涉及的知識點:

  1. Cobalt Strike 使用

  2. 橫向移動

  3. 資訊收集:Bloodhound

  4. 資訊收集:PowerSploit

  5. 資訊收集:Cobalt Strike

  6. DCSync 攻擊

  7. DCSync:WriteDacl

  8. 域信任攻擊:DA to EA

  9. 域信任攻擊:DA to another DA


同時這個域控不止這麼少玩法,但是是實戰的原因,我不敢搞太多,結尾給大家上一張BloodHound的圖看看


到主域(child.xiaoli)Domain Admins的路徑:

圖37


到域m.child.xiaoli的Domain Admins路徑:

圖38






相關文章