Windows系统散列值获取分析与防范
LM Hash && NTLM Hash
Windows操作系统通常使用两种方法对用户的明文进行加密处理,在域环境中,用户信息存储在ntds.dit中,加密后为散列值。Windows操作系统中的密码一般由两部分组成,一部分为LM Hash,另一部分为NTLM Hash。在Windows操作系统中,Hash的结构通常如下:
username:RID:LM-HASH:NT-HASH
LM Hash的全名为“LAN Manager Hash”,是微软为了提高Windows操作系统的安全性而采用的散列值加密算法,其本质为DES加密算法。LM Hash的生成原理在这里就不再赘述(密码不足14字节将用0补全)。尽管LM Hash较容易被破解,但为了保证系统的兼容性,Windows只是将LM Hash禁用了。LM Hash明文密码被限定在14位以内,也就是说,如果要停止使用LM Hash,将用的密码设置为14位以上就可以了。如果LM Hash被禁用了,攻击者通过工具抓取的LM Hash通常为"aad3b435b51404eeaad3b435b51404ee"(表示LM Hash为空值或者被禁用了)
NTLM Hash是微软为了提高安全性的同时保证兼容性而设计的散列加密算法。NTLM Hash是基于MD4加密算法进行加密的。
一.单机密码抓取与防范
要想在Windows操作系统中抓取散列值或明文密码,必须将权限提升至System。本地用户名、散列值和其他安全验证信息都保存在SAM文件中。lsass.exe进程用于实现Windows的安全策略(本地安全策略和登录策略)。可以使用工具将散列值和明文密码从内存中的lsass.exe进程或SAM文件中导出。
在Windows操作系统中,SAM文件的保存位置是C:\Windows\System32\config。该文件是被锁定,不允许复制。在渗透测试中,可以采用传统方法,在关闭Windows操作系统之后,使用PE盘进入文件管理环境,直接复制SAM文件,也可以使用VSS等方法进行复制。
1.GetPass
打开GetPass工具所在的目录。运行该程序后,即可获得明文密码。
2.PwDump7
在命令行环境中运行PwDump7程序,可以得到系统中所有账户的NTLM Hash
3.QuarksPwDump
在命令行环境中输入“QuarksPwDump.exe --dump-hash-local”,导出三个用户的NTLM Hash

4.通过SAM和System文件抓取密码
(1)导出SAM和System文件
无工具导出SAM文件,命令如下

通过reg的save选项将注册表中的SAM、System文件导出到本地磁盘
(2)通过读取SAM文件和System文件获得NTLM Hash

(3)运行Cain读取SAM文件

(4)使用mimikatz直接读取本地SAM文件,导出Hash信息
通过远程下载目标及的SAM文件,然后通过在本机运行mimikatz来获取HASH,
privilege::debug //提升权限
token::elevate //将权限提升至System
lsadump::sam //获取本地SAM文件,获得NTLM Hash

5.使用mimikatz在线读取SAM文件
在mimikatz目录下打开命令行环境,输入以下命令,在线读取散列值及明文密码
mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"

6.使用mimikatz离线读取lsass.dmp文件
(1)导出lsass.dmp文件


(2)使用Procdump导出lsass.dmp文件

(3)使用mimikatz导出lsass.dmp文件中的密码散列值


加载成功

导出散列值
7.使用powershell对散列值进行Dump操作
NiShang的Get-PassHashs.ps1脚本可用于导出散列值
以管理员权限打开Powershell环境,进入Nishang目录,将Get-PassHashes.ps1脚本导入,命令如下
Import-Module .\Get-PassHashes.ps1
Get-PassHashes

8.使用Powershell远程加载mimikatz抓取散列值和明文密码

未完,,,,,,,
Windows系统散列值获取分析与防范的更多相关文章
- BLOB或TEXT字段使用散列值和前缀索引优化提高查询速度
1.创建表,存储引擎为myisam,对大文本字段blob使用MD5函数建立一个散列值 create table t2(id varchar(60), content blob, hash_value ...
- 关于同一密码使用generate_password_hash生成不同的密码散列值
在python的 werkzeug.security 库中有两个函数generate_password_hash与check_password_hash用于对密码明文生成散列值以及检查密码是否与提供的 ...
- java 散列运算浅分析 hash()
文章部分代码图片和总结来自参考资料 哈希和常用的方法 散列,从中文字面意思就很好理解了,分散排列,我们知道数组地址空间连续,查找快,增删慢,而链表,查找慢,增删快,两者结合起来形成散列 ...
- Windows 系统判断MD5 值的办法
Linux 系统的文件要传到Windows系统里面,传输过程中网络不稳定,为了判断文件是否完整传输,所以就用md5的方式判断是否同一个文件 Linux系统 [root@augusite ~]# md5 ...
- Windows系统中使用WMI获取远程服务器的信息
使用WMI获取远程服务器的状态 我做的项目里边主要包含两个内容: (1)对发布在服务器上的服务(IIS服务.WCF服务)是否可以正常访问: (2)获取服务器上的部分指标:如CPU.内存.磁盘空间信息等 ...
- 在Windows系统下搭建ELK日志分析平台
简介: ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索 ...
- os.system('cmd')在linux和windows系统下返回值的差异
今天,用os.system('cmd')分别在windows和linux平台上执行同一ping命令,命令执行失败时返回码不同,windows为1,而linux下返回为256,如下: linux下: & ...
- Shiro入门学习之散列算法与凭证配置(六)
一.散列算法概述 散列算法一般用于生成数据的摘要信息,是一种不可逆的算法,一般适合存储密码之类的数据,常见的散列算法如MD5.SHA等,一般进行散列时最好提供一个salt(“盐”),什么意思?举个栗子 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之处,已经有所修改. 今天分 ...
随机推荐
- thinkpad s5 电源功率不足提示
相关答案 作者:路灯瓜 链接:https://www.zhihu.com/question/47551448/answer/122578101 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...
- Express框架的简单使用
Express框架的简单使用 这个框架是基于Node.js的框架平台 需要先安装node.js 安装完node.js后使用指令操作 npm init --yes 初始化 npm i express 安 ...
- 带你学习BFS最小步数模型
最小步数模型 一.简介 最小步数模型和最短路模型的区别? 最短路模型:某一个点到另一个点的最短距离(坐标与坐标之间) 最小步数模型:不再是点(坐标),而是状态到另一个状态的转变 BFS难点所在(最短路 ...
- FilterConfig接口(Servlet)
Javax.Servet 包中提供了一个 FilterCofig 接口,它与 ServletConfig 接口相似,用于在过滤器初始化期间向其传递信息.FilterConfig 接口由容器实现,容器将 ...
- Go 常用函数
#### Go 常用函数,错误处理这一节我们来学习一下Go 常用的函数,这些函数有些是内置的,有些是官方标准库内的, 熟悉这些函数对程序开发来讲还是很重要的; 1. len("abc&quo ...
- 不难懂————Promise对象 + 详解
1.Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了P ...
- String 不可变
String 源码,String 的修饰符是 final String 采用的是共享模式,被放进常量池 String strA = "abc"; String strB = &qu ...
- Spring Security过滤器链体系
以下摘自胖哥分享的 2022开工福利教程. 在学习Spring Security的时候你有没有下面这两个疑问: Spring Security的登录是怎么配置的? Spring Security的访问 ...
- Core Animation的使用步骤
- oracle查看当前正在使用的数据库
select name from V$DATABASE; 也可以用 select SYS_CONTEXT('USERENV','INSTANCE_NAME') from dual;