关于抓取明文密码的探究

news2025/1/22 19:39:46

基础知识

SSP(Security Support Provider)是windows操作系统安全机制的提供者。简单的说,SSP就是DLL文件,主要用于windows操作系统的身份认证功能,例如NTLM、Kerberos、Negotiate、Secure Channel(Schannel)、Digest、Credential(CredSSP)。

SSPI(Security Support Provider Interface,安全支持提供程序接口)是windows操作系统在执行认证操作时使用的API接口。可以说SSPI就是SSP的API接口。

在微软官方中对于Security Support Provider的解释如下所示

SSP

我们知道lsass.exewinlogin.exe进程是用来管理登录的两个进程,都包含在LSA(Local Security Authority)里面,它主要是负责运行windows系统安全策略。SSP在windows启动之后,会被加载到lsass.exe进程中,那么就衍生出了两种思路:

第一种思路就是删除一个任意的SSP DLL以便于与lsass进程进行交互,第二种思路则是直接伪造一个SSP的dll来提取用户登录时的明文密码

我们首先尝试对注册表进行修改,这里对应需要修改的注册表为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Security Packages,在mimikatz里面根据不同的系统位数提供了对应的dll,这里我们直接修改注册表里面的值即可

首先我们尝试一下任意位置直接加载dll,写一个修改注册表的代码,主要是使用RegOpenKeyWRegSetValueExW这两个api来实现

 

这里我把mimilib.dll放到C盘根目录下

注意一下这里需要用管理员权限启动否则会添加失败

可以看到这里我们已经修改成功

这里新建一个test用户来进行测试

当用户再次通过系统进行身份验证时,将创建一个名为 kiwissp 的新文件,该文件将记录帐户的凭据。默认情况下在以下路径

但是这里没有成功,可能是路径的问题

这里把mimilib.dll放到C:\Windows\System32文件目录下

修改注册表为mimilib.dll

在重新登录用户之后,就能够在System32目录下找到kiwissp.txt的明文文件

因为是登录就加载,所以如果想要删除只能清除注册表之后进行删除

另外mimikatz提供了一种更方便的方法,直接使用misc::memssp命令来直接注入,但是有一个缺点就是在重新启动之后不会持续存在

当用户再次通过系统进行身份验证时,会在C:\Windows\System32\mimilsa.log里面记录下明文密码

Hook PasswordChangeNotify

在上面的两种方法里面,都有或多或少的优缺点,在第一种方法中需要放置dll到system32目录下且需要修改注册表,但重启之后仍然有效,第二种方法虽然不需要直接修改注册表和放置dll,但是重启之后就会失效,而且使用mimikatz也需要考虑对抗杀软的问题。在这里有一种更方便且更隐蔽的方法就是hook PasswordChangeNotify这个api。

在修改密码时,用户输入新密码后,LSA 会调用 PasswordFileter 来检查该密码是否符合复杂性要求,如果密码符合要求,LSA 会调用 PasswordChangeNotify,在系统中同步密码。这个过程中会有明文形式的密码经行传参,只需要改变PasswordChangeNotify的执行流,获取到传入的参数,也就能够获取到明文密码。

还需要了解的相关背景知识如下:

  1. 函数PasswordChangeNotify存在于rassfm.dll

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

我们知道了在LSA调用PasswordChangeNotify的过程中密码是以明文的形式传输的,这里我们就可以通过Inline Hook的方式使用jmp跳转到我们自己的处理函数中,读取密码之后再还原到原地址继续传参。

这里已经有前辈写好了Inline Hook的代码:https://github.com/clymb3r/Misc-Windows-Hacking/blob/master/HookPasswordChange/HookPasswordChange/HookPasswordChange.cpp

我们简单的分析一下写的代码,首先创建一个vector容器,修改硬编码指向PasswordChangeNotifyHook函数的地址

首先保留rbx、rbp、rsi三个寄存器的值到堆栈里面,然后将字节码写入内存并还原被覆盖的指令,再跳转回原函数

然后再看下读取密码的这个函数,如果获取到密码,则在C:\windows\temp目录下创建一个passwords.txt来储存密码

这里使用session0注入来将dll注入lsass.exe,使用到ZwCreateThread这个内核函数,因为用一般的注入方式是不能够往系统进程中注入dll的。这里可以看到已经将我们的这个dll注入了lsass.exe进程

这里去更改一下密码

这里进行Inline hook之后应该是会把在传输中的明文密码保存到password.txt文件里面的,但是这里在目录下却没有找到,删除dll的时候也显示已经被打开,即已经注入到了进程空间里面,这里去搜索引擎里面看了一下,师傅们基本上都是使用的ps反射加载的方法来把dll注入到进程空间里面,而使用直接加载dll的师傅都没有成功抓取密码,这里研究半天也没搞出个所以然来,还是才疏学浅了。

那么这里我们再使用反射加载的方式进行尝试,利用Powershell tricks中的Process Injection将dll注入到lsass进程,项目地址如下

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

这里首先更改powershell的执行策略为可加载脚本,再执行命令

1、Set-ExecutionPolicy bypass

2、Import-Module .\Invoke-ReflectivePEInjection.ps1

3、Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass     

修改密码过后即可在目录下看到抓取的明文密码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1279730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

倒计时 1 天,2023 IoTDB 用户大会期待与您相见!

终于!就在明天,2023 IoTDB 用户大会即将在北京与大家见面! 这场筹备已久的盛会,汇集了超 20 位大咖嘉宾带来的精彩议题,届时来自美国国家工程院、清华大学软件学院的产业大拿,与能源电力、钢铁冶炼、城轨运…

数据结构:堆的实现思路

我们之前写过堆的实现代码:数据结构:堆的实现-CSDN博客 这篇文章我们了解一下堆到底是如何实现的 1.堆向下调整算法 现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆 向下调…

CyclicBarrier实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标) 目录 时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)预测效果基本介绍环境准备程序设计参考资料预测效果 基本介绍 LSTM是一种递归神经网络(RNN)的变体

JVM之基本概念(一)

(1) 基本概念: JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。 (2) 运行过程: 我们都…

2 文本分类入门:TextCNN

论文链接:https://arxiv.org/pdf/1408.5882.pdf TextCNN 是一种用于文本分类的卷积神经网络模型。它在卷积神经网络的基础上进行了一些修改,以适应文本数据的特点。 TextCNN 的主要思想是使用一维卷积层来提取文本中的局部特征,并通过池化操…

使用Python免费调用通义千问大模型

Qwen-72b开源模型 模型的主要用途是预测或描述一个系统或现象的行为模式。它可以帮助人们更好地理解这个系统或现象,例如预测股市变化、天气预报、地震预警、交通流量等。模型也常用于设计和优化产品和工艺。在科学研究中,模型也是一种方法,用…

Stm32F401RCT6内部FLASH数据擦除读写方法

Stm32F401RCT6内部FLASH数据的分区和F103的已经不一样了,读写格式化的方法网上内容不多,自己摸索了一下,基本可以,还存在一个问题 读取: uint16_t f[5];uint8_t tx[10];f[0] *(volatile uint16_t*)0x08020000; //ST…

同旺科技 USB TO SPI / I2C --- 调试W5500_读写网关地址

所需设备: 内附链接 1、USB转SPI_I2C适配器(专业版); 首先,连接W5500模块与同旺科技USB TO SPI / I2C适配器,如下图: 这里的网关地址设置为192.168.1.1 先将网关地址写入寄存器,然后再读取出来:

【SpringBoot】讲清楚日志文件lombok

文章目录 前言一、日志是什么?二、⽇志怎么⽤?三.自定义打印日志3.1在程序中得到日志对象3.2使用日志打印对象 四.⽇志级别4.1日志级别有什么用4.2 ⽇志级别的分类与使⽤ 五.日志持久化六.lombok6.1添加lobok依赖注意:使⽤ Slf4j 注解&#x…

Linux命令与shell脚本编程大全【读书笔记 + 思考总结】

Linux命令与shell脚本编程大全 第 1 章 初识Linux shellLinux的组成及关系结构图是什么?Linux系统内核的作用是什么?内核的主要功能是什么?(4点)物理内存和虚拟内存是什么关系?内核如何实现虚拟内存&#x…

idea不需安装插件,自动生成mybatis-plus对应的实体类entity,带注解@TableName、@TableId、@TableField

目录 1、修改Generate poJOs.groovy文件 2、idea中连接数据库 3、生成entity代码 4、查看生成的实体类 1、修改Generate poJOs.groovy文件 在项目下方点击Scratches and Consoles→ Extensions→ Database Tools and SQL箭头→schema→ Generate POJOs.groovy 替换为以下文…

ssl下载根证书和中间证书

为了保证客户端和服务端通过HTTPS成功通信,您在安装SSL证书时,也需要安装根证书和中间证书。本文介绍如何获取根证书和中间证书。 使用说明 如果您的业务用户通过浏览器访问您的Web业务,则您无需关注根证书和中间证书,因为根证书…

如何学习 Spring ?学习 Spring 前要学习什么?

整理了一下Spring的核心概念BeanDefinitionBeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如:class,表示Bean类型scope,表示Bean作用域,单例或原型等lazyInit:表示Be…

PyQt6 QDialogButtonBox组合按钮控件

锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计34条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…

【开源威胁情报挖掘3】开源威胁情报融合评价

基于开源信息平台的威胁情报挖掘综述 写在最前面5. 开源威胁情报关联分析5.1 开源威胁情报网络狩猎:技术、方法和最新研究应用实例和未来方向 5.2 开源威胁情报态势感知关键技术和方法应用实例和未来方向 5.3 开源威胁情报恶意检测关键技术和方法应用实例和未来方向…

【PTA题目】7-18 6翻了 分数 15

7-18 6翻了 分数 15 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 “666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界&…

Mindspore实现手写数字识别

废话不多说,首先说一下我使用的环境: python3.9 mindspore 2.1 使用jupyter notebook Step1:导入相关依赖的包 import os from matplotlib import pyplot as plt import numpy as np import mindspore as ms import mindspore.context a…

【SpringMVC】Spring Web MVC入门(一)

文章目录 前言什么是Spring Web MVC?什么是MVC什么是Spring MVC? Spring Boot 和 Spring MVC 的区别什么是Spring Boot?关系和区别 Spring MVC 学习注解介绍1. SpringBootApplication2. RestController3. RequestMapping3.1 RequestMapping 使…

CSS3 修改滚动条样式

上图: 上代码: /* 修改垂直滚动条 */ .right-list::-webkit-scrollbar {width: 2px; /* 修改宽度 */height: 5px; /* 修改高度 */ } /* 修改滚动条轨道背景色 */ .right-list::-webkit-scrollbar-track {background-color: #f1f1f1; } /* 修改滚动条滑块…