域渗透——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 参考资料

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

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/149925.html<

(0)
管理的头像管理
上一篇2025-03-12 20:26
下一篇 2025-03-12 20:28

相关推荐

  • 服务器SLA服务协议是什么有什么用,有哪些注意事项?

    服务器SLA服务协议是服务商与用户之间关于服务可用性、性能等方面的正式承诺,它直接决定了业务稳定性和运维成本,什么是服务器SLA服务协议服务器SLA(Service Level Agreement)是服务等级协议的缩写,在IDC和云服务领域,它是一份具有法律效力的合同附件,明确服务商必须提供的服务水平基准,这份……

    2026-07-26
    0
  • 站群服务器泛站和泛目录有什么区别?,怎么选

    泛站基于多个独立域名构建独立站点,泛目录则在同一域名下通过目录结构构建内容,这直接影响SEO权重分配和资源管理,什么是泛站和泛目录泛站模式泛站模式使用多个独立域名,每个域名部署独立网站,内容互不关联,这种结构下,每个站点各自积累SEO权重,适合需要大量外链或分散风险的场景,推广不同产品时,泛站能避免单一站点被处……

    2026-07-26
    0
  • 服务器防火墙硬件和软件哪个效果更好,怎么选

    在服务器防火墙的选型中,硬件防火墙与软件防火墙并非非此即彼,而是互补关系,对于追求高安全等级与稳定性的生产环境,采用硬件防火墙做网络层隔离,配合软件防火墙做主机层加固,是当前公认效果最好的组合方案,硬件防火墙与软件防火墙的核心差异性能与资源占用硬件防火墙依托专用ASIC芯片或FPGA处理数据包,转发延迟通常在微……

    2026-07-26
    0
  • 站群服务器做GEO的核心逻辑是什么?,怎么做

    站群服务器做SEO的核心逻辑,是通过独立IP和资源隔离,彻底切断站点间的关联性,让搜索引擎对每个网站进行独立评估,从而降低连带风险并提升整体排名效率,站群服务器的核心价值:独立性与隔离性IP独立性:为什么是命门搜索引擎在评估网站时,会记录IP地址,如果多个站点共享同一个IP,它们之间很容易被判定为同一主体控制……

    2026-07-26
    0
  • 弹性云服务器到底是什么意思怎么收费,多少钱一个月

    弹性云服务器(Elastic Cloud Server,ECS)是一种可随时调整计算资源的云服务器,收费方式以按需付费和包年包月为主,用户只需为实际使用的资源买单,什么是弹性云服务器弹性云服务器本质上是一台运行在云端、配置可以灵活调整的虚拟机,它不像物理服务器那样固定规格,你可以在业务高峰期快速增加CPU、内存……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注