1 | sed -i '1s|^|nameserver 10.200.83.101\n|' /etc/resolv-dnsmasq |
常见ad域利用技术-介绍
现在已执行了内部侦察,拿到ad结构和环境情况。这个阶段将利用配置错误执行横向与提权。其通常与持久化结合以确保不会失去新获得的位置。
Exploiting Permission Delegation
利用权限委派AD
可以通过permission Delegation
权限委派的功能来委派权限和特权,利用委派,可以将部分特权委派给帮助团队来避免仅有少数用户可以访问AD
并处理所有用户请求的情况。原则上委派应遵循最小特权原则,而这里将利用委派配置错误权限委派
对其的利用通常被称为基于
ACL
的攻击:AD
允许管理员配置访问控制条目 (ACE),这些条目填充了自主访问控制列表 (DACL) 。几乎任何AD
对象都可以通过ACE进行安全配置,然后描述其他任何AD对象对目标对象具有的允许和拒绝权限而对于配置错误的ACE的例子:如果IT支持团队被授予了对
Domain Users
组的ForceChangePassword
ACE,在这种情况下,他们可以重置忘记密码的员工的密码,但同时可以重置特权账户的密码,如属于Domain Admins
组的账户,本质上允许特权提升ACE
访问控制条目的利用滥用ACE的数量很多,可以参考bloodhound的文档,以下是几个常用的:
ForceChangePassword
:在不知道用户当前密码的情况下设置其当前密码AddMembers
:将用户(包括自己的帐户)、组或计算机添加到目标组GenericAll
:对对象拥有完全控制权,包括更改用户密码、注册 SPN 或将 AD 对象添加到目标组的能力GenericWrite
:可以更新目标对象的任何非受保护参数。例如,可以更新scriptPath
参数,其将导致用户下次登录时执行脚本。WriteOwner
:可以更新目标对象的所有者。可以将自己设为所有者,从而获得对对象的额外权限。WriteDACL
:可以向目标对象的 DACL 中写入新的 ACE。例如,我们可以写入一个 ACE,授予我们的帐户对目标对象的完全控制。AllExtendedRights
:可以执行与目标对象相关的扩展 AD 权限的任何操作。这包括例如强制更改用户密码的能力。为了利用ACE,需要与AD交互来发出请求,可以使用
AD-RSAT Powershell cmdlet
或PowerSploit
使用
bloodhound
1
neo4j console start
然后启动
bloodhound
,把给的那堆拖进去对于我们已经获得的起点
DomainUser@za.tryhackme.loc
,研究其node info
发现并没有很多权限,其可以远程桌面到THMWRK1
,但这只有低权限的访问:由于域分层,第一步就是攻击第二层的基础设施,即第二层的管理员组
tier 2 admins@za.tryhackme.loc
,其对所有工作站具有管理员特权。bloodhound
提供的路径显示,域中错误的为IT支持组提供了对Domain Users
组的AddMembers
ACE,其意味着Domain Users
组中任何成员(包括我们的账户)都可以将账户添加到IT支持组中。并且该支持组对二层管理员组的成员都有ForceChangePassword
ACE,其并不能说是配置错误,但与AddMembers
错误结合后就可以允许我们利用ssh
连上去,切到powershell
:攻击的第一步就是把当前账户添加到IT支持组:
1
Add-ADGroupMember "IT Support" -Members "[账户名]"
用以下命令来查看是否生效
1
Get-ADGroupMember -Identity "IT Support"
既然已经是支持组成员,那么就有着对二层管理员组的
ForceChangePassword
的权限委派,首先选择一个该组的成员:1
Get-ADGroupMember -Identity "Tier 2 Admins"
这里ssh连接的显示有问题,
-
参数都没有显示出来1
2$Password = ConvertTo-SecureString "[新密码]" -AsPlainText -Force
Set-ADAccountPassword -Identity "[幸运挑选的管理员组成员]" -Reset -NewPassword $Password如果拒绝访问是因为当前权限还没有在域中传播,
!稍作等待我等了快20分钟,可以把下面的kerberos
委派看完再回来提权此时账密
t2_melanie.davies:admin12345ABC
1
ssh za.tryhackme.loc\\t2_melanie.davies@thmwrk1.za.tryhackme.loc
利用
Kerberos
委派在讨论
AD
委派时,通常指的就是Kerberos
委派而非权限委派Kerberos
委派其实际用途是使应用程序能访问托管在不同服务器上的资源,如
Web
服务器需要访问托管在数据库服务器上的SQL
以供其Web使用。如果没有委派,可能会使用一个AD
服务账户并直接授予其对数据库的访问权限,每当Web应用进行请求时,该服务账户用于对数据库进行身份验证和检索信息也可以允许该服务账户被委派到SQL服务器服务。一旦用户登录到Web应用,服务账户将代表该用户请求访问数据库。这意味着用户只能访问他们具有相关权限的数据库数据,而无需为服务账户本身提供任何数据库特权或权限
约束与无约束
存在两种
Kerberos
委派。对于最不安全的无约束委派Unconstrained Delegation
,其没有对委派设置任何限制。例如,一个设置了TRUSTED_FOR_DELEGATION
的用户在无约束委派配置的主机上进行了身份验证,就会生成并存储该用户账户的票据授权票证TGT
。此时如果攻击者入侵该配置着无约束委派的主机,就可以迫使一个特权账户对主机进行身份验证,进而拦截生成的TGT
并冒充特权服务。其案例可以参考这篇文章而为了解决此类安全问题,引入了约束委派,其限制了一个账户可以被委派到哪些服务从而在账户被入侵时限制暴露的范围
对于约束委派的利用更加复杂,例如:可以入侵一个配置了约束委派的
AD
账户,知道该账户的明文密码或者NTLM
哈希,可以为该账户生成一个TGT
,并使用其对任何非敏感用户账户执行票据授权服务器(TGS)请求以作为该用户访问服务,即冒充一个可以访问敏感数据库的账户基于资源的委派
kerberos
委派其实有三种,但基于资源的委派Resource-Based Constrained Delegation(RBCD)
值得单独拿出来说。其完全改变了委派模型,即不再指定那个对象可以委派给哪个服务,而是服务指定了哪些对象可以委派给他,这使得服务所有者可以控制谁可以访问它。按照上面的例子,数据库服务指定允许Web服务账户委派访问它。对其的利用参考这篇文章
约束委派的利用
首先利用
powerSploit
枚举出可用的委派:1
2Import-Module C:\Tools\PowerView.ps1
Get-NetUser -TrustedToAuth可以看到
svcIIS
账户可以委派THMSERVER1
上的HTTP
和WSMAN
。而值得注意的是,其不仅仅只用于模拟用户访问网站,Powershell
远程管理也使用这两个服务。那么一个理想的选择是冒充第一层管理员(即svcIIS账户)来提供对THMSERVER1
的管理访问权限