本文主要探讨在工作组和域横向移动中,由于默认remote UAC启用对横向移动造成的影响以及一些解决办法。主要分为了工作组横向和域横向两个板块。

1.工作组横向

workgroup相关环境如下

主机A:
ip地址 192.168.178.169
操作系统版本 windows 10
主机名 DESKTOP-CBBH65I
主机B:
ip地址 192.168.178.225
操作系统版本 windows server 2008

工作组横向比较常见,用以下一个攻击场景为例:

​ 渗透测试人员在B主机上,获取到了A服务器一个名为dev的管理员账户密码(或hash),那在B服务器上应当怎么登陆A服务器进行远程管理?(排除RDP)

常见的有sc类(psexec,scshell)、wmi类(wmiexec.wmic)、smb类(smbexec,ipc,smbclient)、winrm类等工具可以进行横向移动

​ 但是,在windows Vista之后引入了一种默认开启的remote UAC,计算机的任何非SID 500本地管理员帐户, 用户在远程计算机上没有特权提升能力,并且用户无法执行管理任务。

下图是当remote UAC启用时,对以上部分工具的测试:

Schtasks:

Psexec:

Wmiexec:

IPC:

Reg:

Scshell:

​ 默认情况下,这些工具都无法正常工作。根据官方文档中的方法,我们可以使用如下命令,修改A主机的注册表键值:LocalAccountTokenFilterPolicy 为1,即在主机A执行以下命令:

reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

​ 然后即可在主机B使用dev账户凭据进行远程管理,其他师傅已经写了不少这类文章,这里不再赘述,提一种比较新的方法:

​ 通过ChangeServiceConfigA接口来无文件横向移动。这种方法依赖于DCERPC,优点在于无文件,不会注册创建服务也不通过smb认证。

项目地址:https://github.com/Mr-Un1k0d3r/SCShell

​ 作者原文中采用了XblAuthManager这个xbox服务进行测试,我们可以用例如 vss(卷影拷贝服务) 这样更加通用的服务来进行远程命令执行,效果如下图:

​ 以上方法都依赖于LocalAccountTokenFilterPolicy值为1,那么在LocalAccountTokenFilterPolicy值为0的时,有没有可能进行远程管理呢?

1.当管理员对C:\usser内任意文件进行共享后,即使关闭了文件共享,也会默认将Users目录进行共享。

​ 详见:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/ff660257(v=ws.10)?redirectedfrom=MSDN

​ 我们可以使用dev用户的凭据建立ipc连接然后查看共享资源

​ 随后,我们对启动项等目录复制文件,达到进一步控制的效果。当然这种方法需要目标主机曾经共享过C:\users下的文件且需要主机dev用户重启触发payload(可能还需要绕过uac)。

2.winrm

​ 如下图,我在主机A上对winrm进行快速设置时候,会将LocalAccountTokenFilterPolicy设置为1

此时意味着之前sc类(psexec,scshell)、wmi类(wmiexec.wmic)、smb类(smbexec,ipc,smbclient)等远程访问工具都可用,z=这里就不再详细测试了,winrm只需要在B主机上添加信任A主机即可,直接连接会被拒绝。当然,在本机添加信任对我们来说很简单。

如下图,我在主机B上添加了信任所有主机。

然后在主机B上通过ps remoting进程远程管理主机A

总结:

从以上结果可以看出,在工作组环境中,由于默认LocalAccountTokenFilterPolicy=1,极大地限制了横向移动。但是由于一些windows自身或者其他程序的配置,将LocalAccountTokenFilterPolicy设置为0,又为pth等横向手法提供了更多可能。


2.域横向

testdomain.local相关环境如下

主机A:
ip地址 192.168.124.134
操作系统版本 windows server 2012
主机名 DC1
域管理员 administrator、admin
主机B:
ip地址 192.168.124.135
操作系统版本 windows server 2008
主机名 SQL01
本地管理员用户 administrator、dev

​ 在域环境中,remote UAC只是对本地用户进行限制,并没有对域用户进行限制,所以当获取到域管理员的密码(或hash),我们可以使用sc类(psexec,scshell)、wmi类(wmiexec.wmic)、smb类(smbexec,ipc,smbclient)、winrm类等工具进行远程连接,如下图所示,在SQL01上运行mimikatz,使用域管理员admin账号,可以进行进行pth:

​ 同样地,由于remote UAC存在,即使域内互相信任的主机使用非sid500的本地管理员凭据也无法登陆。即在DC1上使用SQL01上的管理员用户dev凭据登录SQL01,也无法成功。

​ 值得一提的是,由于多数域环境中,为了方便管理,采用域策略使域内所有电脑默认启用了winrm服务,这为内网横向提供了便利。如果主机没有开启winrm服务,远程启用winrm也比较简单,以psexec为例,只需要如下命令即可:

psexec \ComputerName -s winrm.cmd quickconfig -q

​ 我们都知道,psexec、wmiexec等工具可以使用哈希传递而不使用明文,那winrm能否使用pth呢?答案是可行的。方法有很多,以CobaltStrike为例,我们可以通过pth然后启动进程然后steal_token,使用winrm执行命令,效果如下图:

总结:由于域用户不受LocalAccountTokenFilterPolicy限制,所以当获取到高权限域用户凭据时,可以比较方便地进行横向。

点击收藏 | 4 关注 | 3
登录 后跟帖