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 上一篇文章的不合理之处,已经有所修改. 今天分 ...
随机推荐
- 扒一扒@Retryable注解,很优雅,有点意思!
你好呀,我是歪歪. 前几天我 Review 代码的时候发现项目里面有一坨逻辑写的非常的不好,一眼望去简直就是丑陋之极. 我都不知道为什么会有这样的代码存在项目里面,于是我看了一眼提交记录准备叫对应的同 ...
- IDEA2017 maven Spark HelloWorld项目(本地断点调试)
作为windows下的spark开发环境 1.应用安装 首先安装好idea2017 java8 scalaJDK spark hadoop(注意scala和spark的版本要匹配) 2.打开idea, ...
- QMainWindow(二)
mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class MainWindo ...
- gorm中的高级查询
智能选择字段 GORM 允许通过 Select 方法选择特定的字段,如果您在应用程序中经常使用此功能,你也可以定义一个较小的结构体,以实现调用 API 时自动选择特定的字段,例如: type User ...
- IoC容器-Bean管理XML方式(注入集合类型属性)
Ico操作Bean管理(xml注入集合属性) 1,注入数组类型属性 2,注入List集合类型属性 3,注入Map集合类型属性 (1)创建类,定义数组.list.map.set类型属性,生成对应set方 ...
- JavaScripts之迪卡算法求积(n*n)适用于SKU信息计算等场景
迪卡算法求积(n * n) 使用 array.reduce 的方式实现 笛卡尔积算法 const arr = [ ['黑色', '白色', '蓝色'], ['1.2KG', '2.0KG', '3.0 ...
- HBase安装教程
一.版本介绍 linux : CentOS7 Hadoop : 2.7.6 zookeeper : 3.4.6 hbase : 1.4.6 jdk : jdk1.8.0_171 三个节点的主机名分别为 ...
- C字符串倒置-中部对称
问题如图 Code #include<stdio.h> #include<string.h> #define MAX_LENGTH 10//最大字符串长度 void inver ...
- JVM学习八-(复习)年轻代、老年代、永久代
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示: 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old).新生代 ...
- js判断变量是否为空字符串、null、undefined
let _isEmpty = (input) => { return input + '' === 'null' || input + '' === 'undefined' || input.t ...