本文主要探讨在工作组和域横向移动中,由于默认remote UAC启用对横向移动造成的影响以及一些解决办法。主要分为了工作组横向和域横向两个板块。
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目录进行共享。
我们可以使用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等横向手法提供了更多可能。
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限制,所以当获取到高权限域用户凭据时,可以比较方便地进行横向。