记一次大型且细小的域渗透实战
记一次大型域渗透实战
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(忽略下面的主域)
![null](https://filescdn.proginn.com/304995d943fde0591954bd727989068a/fdcb075827f801d38e63468e866320ef.webp)
当前用户为ra,其完全用户名=m\ra
![null](https://filescdn.proginn.com/9a62846115b1e90562d6e16234cea472/4b06bdc62b6e9fd68e69dcfdded8b21d.webp)
(2) 当前机子所在域的FQDN(完全域名),我们接下来在文中统称为 m.child.xiaoli
![null](https://filescdn.proginn.com/ad3399dac85b93c1d5301fb0b51aada2/48988b777ba7eab6c7f34ed26a914185.webp)
(3)查看域控制器
可能不是英文的原因,CobaltStrike的net domain_controller没用了
![null](https://filescdn.proginn.com/11138dbf6ac061d2dcaeb527fc9a8825/74dcdee00e958e3161eb7e440bd7fd18.webp)
因此我们直接net group /domain查看域控即可,域控为po.m.child.xiaoli
![null](https://filescdn.proginn.com/97b96826556cf7688ead14eb329b8534/21d3d51d87532f7ce636031b6cfe4ca2.webp)
(4)枚举Enterprise Admins
这里我们要做笔记,在子域环境里面,域管理员有两种,一种是Domain Admins,另外一种是Enterprise Admins,我们net group /domain 看不到任何有关Enterprise Admins的信息,但是不慌,我们上powersploit神器
注意:由于不同语言,该域的Enterprise Admins组名 = A\***s组,文中直接称作AS组(这个组名是我翻译后得知的)*
首先我们使用net group常规查询→失败
![null](https://filescdn.proginn.com/a7e7e8b148a0d969a4e9d9df9fae65dc/8e1ad25dc924246c60055db2f39a7fce.webp)
导入powersploit,使用模块Get-DomainForeignUsers(枚举域内所有用户,并且返回同时拥有其他域组的用户),我们得知m.child.xiaoli的域用户PO同时处于child.xiaoli的AS组(Enterprise Admins)(这里打码不太行,耐心点看:)
![null](https://filescdn.proginn.com/f8b2c7df7757a9f74bd9a8d80c365e98/00c671b661939d61d0585a314719ad2d.webp)
(5)因为是个极大域,我们同时直接上神器BloodHound帮我们分析
Execute SharpHound Collector:
![null](https://filescdn.proginn.com/06bcfb8a420d2bae3fda37cc68afd9be/00a8fcc174228e453191c7707bb9a957.webp)
Download BloodHound File:
![null](https://filescdn.proginn.com/6314673ddd27b34803a0b5c427b2ebcb/df8c532daaffb613f944224eb6bdf747.webp)
(6)查看域信任(Domain Trusts)信息,可以看到是多域结构(这个图就将就点看吧,还是能看懂的)
![null](https://filescdn.proginn.com/d3d9521663feec77aece3633f15abbc2/7f360da0f33c5862452919fe4b0adbdd.webp)
为了方便理解,我使用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之间没有信任关系
![null](https://filescdn.proginn.com/8a44336d57b57ec1c489c98c0880df95/2f6e50818280580f738bb6a56e9d85fa.webp)
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】
![null](https://filescdn.proginn.com/6d739403d6a03a0799de6bf37f075817/71b1fc3402691949effb302d34ed8ee1.webp)
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
![null](https://filescdn.proginn.com/5afec3e655162af569e8c9383d4898c7/1a7a9e0b50f12c3a32c1cbf767816e1f.webp)
横向过去之后,我们使用名为【Priv_Esc】的TCP Beacon注入一个pgo用户进程,这里选择了PID为1632的explorer进程
![null](https://filescdn.proginn.com/d2fb7876d24ed13cc123e9fac6cd317a/cb674a71118379652f6df272d6ed381b.webp)
![null](https://filescdn.proginn.com/59ef16c7d9598fcdc93ba8ea2ca3f3ee/4538797bf0050550b0e4bf1db414b393.webp)
因为pgo用户是域控的管理员,此时我们能利用pgo用户去访问域控po.m.child.xiaoli了
![null](https://filescdn.proginn.com/429864e6dbea3d1e26d41547127ac1ae/c82c99a467ed5cf33ef886f97fee0796.webp)
用pgo用户横向到域控po.m.child.xiaoli,并且可以获得管理员权限的beacon
![null](https://filescdn.proginn.com/974d98b37e5200df7ce94d83003b7c85/bba559817db5649b364f2db5c49bc6ee.webp)
Cobalt Strike 横向图
![null](https://filescdn.proginn.com/4dccedb7b79289cdfd876aea03f03f0f/2ca572b39c2158a64294e9c7e8e8210a.webp)
(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)
![null](https://filescdn.proginn.com/0db93343d53b5a2bce6f0a0f4472cc76/3e6be55af911cc36abbf02704bca595a.webp)
笔记:
Enterprise Controller:cl.child.xiaoli
Enterprise Controller IP Address:192.168.1.241
我们同时看看pgo除了是Domain Admins组的用户,还是什么组的用户
![null](https://filescdn.proginn.com/3f417e38c1ce14d420ad18cdc7c72b87/d5fe8bac0c8b26c5395e442b90b0a900.webp)
可以看到,pgo用户还是Administrators组的用户,根据微软官方所述的话,个人理解该组用户权限比Domain Admins权限还高,并且拥有两条主要DCSync Attack所需要的Privilege:GetChangesALL和GetChanges,我们可以制定一些比较【不讲武德】的攻击方案
第一种:我们可以直接获取在域控注入一个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攻击(讲武德)
流程图:
![null](https://filescdn.proginn.com/8062b067f64819baabfccc701fd75959/57114ff6096318632cd478d3fd0844f7.webp)
(3-1-1)第一种攻击:略(极度不讲武德)
(3-1-2)第二种攻击:如下图所示,直接dcsync(同样不讲武德)
![null](https://filescdn.proginn.com/14b335d7c1e7e7555ee60c38cf6b4941/d86fe58f104580fec4cd62067ed3b406.webp)
(3-1-3)第三种攻击(有点不讲武德),相对于第二种多了一步,我们看看Bloodhound分析
![null](https://filescdn.proginn.com/143dcd770aab5986e0b69d57ff11e867/0f0f70e5e0f40b1c4305675e29f1e626.webp)
实际上相当于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.xiaoli的Enterprise Admins组的ObjectID(SID+RID)
这里我们使用Conver-NameToSid获取child.xiaoli\krbtgt用户的ObjectID
![null](https://filescdn.proginn.com/34266641199c7bb2726baf20e2bb9b8e/75adb0f03bbf56ac8be9d5f14ff54223.webp)
获取到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就没错了)
![null](https://filescdn.proginn.com/558a94452f0172beaaef8b4b885688df/6ab0815a24118e9ce9404f6895359d16.webp)
这边我在m.child.xiaoli的域控上随便注入了个普通用户进程上测试,并且目标为nl.child.xiaoli,是根域的一台机子
注入票据前:(即使打码也掩盖不住报错的气质)
![null](https://filescdn.proginn.com/c193871f0a0162b13ebe35c5a81f1849/b346ede4e0d2a01fc05ccb38391fd255.webp)
注入票据后:
![null](https://filescdn.proginn.com/57513de8fbff5c1248d2117110d0c9f8/0f31323946fcc9b2eca898beeff06e66.webp)
这时有个疑问了,为什么我们的登录域还是M.child.xiaoli,却说成Enterprise Admins?别急,我们remote-exec看看我们的这个用户的组
![null](https://filescdn.proginn.com/9816a954cce45933da362a8366ff34fe/4931d6e85b37aa2f5187c8d63daf6e2b.webp)
不难看到,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)
图解:
![null](https://filescdn.proginn.com/36de297e19d6413f9d9ce2bd5297f14d/67427a8908328f999c8293fbaeae0770.webp)
(3-2-2)使用SID-History攻击
图解:
![null](https://filescdn.proginn.com/dac1d4fde15be8daa1f756f0bdeed86f/0a2b0dcad478fbe3b37f87c4e9b6f063.webp)
这个是我心血来潮测试的,可能有不对的地方,如有不对的地方,麻烦大佬在私信提出,十分感谢
我们可以在m.child.xiaoli里面使用BloodHound收集信息,或者手动收集
自动:BloodHound Automatic Collected:(-d 指定收集域,zipfilename修改Output文件名)
![null](https://filescdn.proginn.com/4b1dcbbc27f95278dad675c67f5d1383/c999baeecf52f81b010791847a370f81.webp)
手动:使用Powersploit手动收集o.m.child.xiaoli的域控制器,可以看到该域的域控计算机名叫LO,FQDN=lo.o.m.child.xiaoli,其中我们还收集到了域的SID,不过被我打码了
![null](https://filescdn.proginn.com/eb076e54f6b2b4dbebc3ac4b982df59a/c93419659730d8f7585f34b29bbfb3bc.webp)
(这个语言的Domain Admins=Axxxo组,我们简称为AO组)
使用powersploit收集该子域的域管理员,可以看到是Administrator
![null](https://filescdn.proginn.com/4361cd0bf41a68828f82d00c1986e843/5ea50f136d903117465abe08f65cb6f8.webp)
现在我们对子域的信息有
域控制器: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
![null](https://filescdn.proginn.com/c7defd13c460514d58f8b8f2d22513c2/c8d8503a3f3b0ee0e0a32cb453dff89b.webp)
接着就可以访问子域域控lo.o.m.child.xiaoli了
![null](https://filescdn.proginn.com/037ea0d64f3d7cb02b953ccce5f06ce9/60900b2a1883c3702d0830d1af572e09.webp)
我们看看用户组,确实处于o.m.child.xiaoli\Domain Admins,即使用户登录域是m.child.xiaoli
![null](https://filescdn.proginn.com/ae9c10927a23be28af4d32dbb5d12304/d413c1a583fd2805d77cd6830fdc7563.webp)
3.二次进攻
主要是观察DCAL和ACE,但是我写的时候已经太累了,就不想写,而且我怕修改了密码之类的操作被发现,虽然密码改了可以用mimikatz改回去,但是本文就这样吧(不敢作死搞大动静)
0x02 结尾
总结一下本文涉及的知识点:
1.Cobalt Strike 使用2.横向移动3.信息收集:Bloodhound4.信息收集:PowerSploit5.信息收集:Cobalt Strike6.DCSync 攻击7.DCSync:WriteDacl8.域信任攻击:DA to EA9.域信任攻击:DA to another DA
同时这个域控不止这么少玩法,但是是实战的原因,我不敢搞太多,结尾给大家上一张BloodHound的图看看
到主域(child.xiaoli)Domain Admins的路径:
![null](https://filescdn.proginn.com/99467e37e771affa421692efd29dbd90/380e22a068e517320107a7cfc16fe1e5.webp)
到域m.child.xiaoli的Domain Admins路径:
![null](https://filescdn.proginn.com/9b70d1f7228116d38629792d34a6a2cd/54f2bca595273c41c096f9fb2210179e.webp)