在之前的文章中介绍了一些域环境中的渗透方法和技巧,所以这次接着介绍一个用来维持域控权限的方法——SSP.
SSP:
Security Support Provider,直译为安全支持提供者,又名Security Package.
简单的理解为SSP就是一个DLL,用来实现身份认证,例如:
1
2
3
4
5
6
|
NTLM
Kerberos
Negotiate
Secure Channel (Schannel)
Digest
Credential (CredSSP)
|
SSPI:
Security Support Provider Interface,直译为安全支持提供程序接口,是Windows系统在执行认证操作所使用的API。
简单的理解为SSPI是SSP的API接口
LSA:
Local Security Authority,用于身份认证,常见进程为lsass.exe
特别的地方在于LSA是可扩展的,在系统启动的时候SSP会被加载到进程lsass.exe中.
这相当于我们可以自定义一个dll,在系统启动的时候被加载到进程lsass.exe!
如图,这是正常的SSPI结构图,Client APP是我们自定义的dll,通过Secur32.dll可以调用 "credential capture API
"来获取LSA的信息
上图展示了攻击思路,既然可以自定义dll,那么我们就可以定制dll的功能,通过Named Pipe
和Shared Memory
直接获取lsass.exe
中的明文密码,并且能够在其更改密码时立即获得新密码!
mimikatz早已支持这个功能,而这个文件就是我们使用的时候常常忽略的mimilib.dll
下面就实际测试一下如何通过mimilib伪造SSP记录明文密码.
mimikatz poc地址:
https://github.com/gentilkiwi/mimikatz/blob/bb371c2acba397b4006a6cddc0f9ce2b5958017b/mimilib/kssp.c
测试环境
1
2
|
域控:server 2008 r2 x64
域内主机: win7 x64
|
测试步骤:
将mimilib.dll复制到域控c:\windows\system32
下
注:
64位系统要用64位的mimilib.dll,32位的会失败
修改域控注册表位置:
1
|
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages\
|
在Security Packages下添加mimilib.dll
点击确认,Security Packages已被添加mimilib.dll
域控重启后在c:\windows\system32
可看到新生成的文件kiwissp.log
Tips:
mimilib只实现了将密码保存到本地,如果把密码发送到远程服务器岂不是威力无穷?
mimikatz同时还支持通过内存更新ssp,这样就不需要重启再获取账户信息
需要使用mimikatz.exe,命令如下:
1
2
|
privilege::debug
misc::memssp
|
注:
1、64系统需要64位的mimikatz,如图
2、内存更新的方法在重启后会失效.
检测注册表位置:
1
|
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Security Packages\
|
检测%windir%\System32
是否有可疑dll
使用工具Autoruns检测LSA
本文仅对SSP的常规用法做了演示,实现了在本地保存域控的账户和密码,而且基于这个思路,可以开发出更多高级的利用方法。
如果站在防御的角度,常规方法已经力不从心,只有更多的了解攻击才能更好的防御。