首页 未命名正文

域渗透——Hook PasswordChangeNotify

0x00 前言

本文介绍了维持域控权限的两种 *** ——SSP和Skeleton Key,这两种 *** 都需要借助Mimikatz为了实现,或多或少存在一些不足,所以这次我们将介绍一个更隐蔽的,不需要使用Mimikatz的后门 *** ——Hook PasswordChangeNotify.

0x01 简介

Hook PasswordChangeNotify这早的概念是在2013年9月15日clymb3r提出,通过Hook PasswordChangeNotify拦截修改后的帐户密码。

相关背景知识如下:

修改域控密码时,将进行以下同步操作:

a. 修改域控密码时,LSA首先调用PasswordFileter判断新密码是否符合密码复杂要求 b. 如果符合,LSA接着调用PasswordChangeNotify密码同步更新

函数PasswordChangeNotify存在于rassfm.dll

rassfm.dll可理解为Remote Access Subauthentication dll,只存在于在Server系统下,xp、win7、win8等均不存在

可以使用dumpbin查看rassfm.dll导出函数验证结论2:

1dumpbin /exports c:\windows\system32\rassfm.dll

如图

0x02 特点

以前介绍过的Security Support Provider,在实际使用过程中不可避免地会出现以下缺陷:

系统安装后需要重启

需要在System32放置在文件夹下dll

注册表需要修改

而使用Hook PasswordChangeNotify但有以下优点:

不需要重启

注册表不需要修改

甚至不需要在系统中放置dll

可以说,在隐蔽性方面,使用Hook PasswordChangeNotify优于Security Support Provider

0x03 技术实现

根据clymb3r提供的poc,实现Hook PasswordChangeNotify包括两部分:

1、Hook dll

下载链接:

https://github.com/clymb3r/Misc-Windows-Hacking

(1)为PasswordChangeNotify创建一个inline Hook,将初始函数重定向到PasswordChangeNotifyHook

(2)在PasswordChangeNotifyHook实现记录密码的操作,然后将控制权重新交给PasswordChangeNotify

2、dll注入

可以利用 Powershell tricks中的Process Injection我们自己写的dll注入到lsass进程,实现Hook功能

0x04 实际测试

测试环境:

Server 2008 R2 x64

Server 2012 R2 x64

测试步骤:

1、生成Hook dll

poc下载地址:

https://github.com/clymb3r/Misc-Windows-Hacking

使用VS2015开发环境,MFC设置在静态库中使用MFC

生成编译工程HookPasswordChange.dll

2、生成dll注入的powershell脚本

下载Powershell的dll注入脚本

https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1

在代码尾部添加以下代码:

Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll –procname lsass

并命名为HookPasswordChangeNotify.ps1

3、Hook PasswordChangeNotify

上传HookPasswordChangeNotify.ps1和HookPasswordChange.dll

执行管理员权限:

1PowerShell.exe -ExecutionPolicy Bypass -File HookPasswordChangeNotify.ps1

如图

4、新密码自动记录

在Server 2012 R2 x64下面,手动修改域控密码后

在C:\Windows\Temp下可以找到passwords.txt,记录了新修改的密码

如图

在Server 2008 R2 x64同样成功

如图

0x05 小结

本文仍在演示常规功能,后续可自定义dll自动上传新密码等更先进的代码功能。

以下链接中的代码可作为参考,其中实现了将获取的新密码上传至Http服务器

http://carnal0wnage.attackresearch.com/2013/09/stealing-passwords-every-time-they.html

使用Hook PasswordChangeNotify记录新密码,如果放在以前,过程注入的操作很容易检测,但由于Powershell通过应用开发Powershell进程注入可绕过常规拦截。

当然,Hook PasswordChangeNotify仅仅是众多Hook其中一种 *** 。

我已经Fork了clymb3r下载地址如下:

https://github.com/3gstudent/Hook-PasswordChangeNotify

0x06 参考资料

https://clymb3r.wordpress.com/2013/09/15/intercepting-password-changes-with-function-hooking/

http://carnal0wnage.attackresearch.com/2013/09/stealing-passwords-every-time-they.html

http://www.processlibrary.com/en/directory/files/rassfm/305529/

https://github.com/clymb3r/Misc-Windows-Hacking/tree/master/HookPasswordChange

http://www.slideshare.net/nFrontSecurity/how-do-password-filters-work

   
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。