• Sunlogin RCE漏洞分析和使用


    介绍

      前两天网上曝出了关于向日葵远控工具(Sunlogin)Windows个人版的RCE漏洞POC。因为利用简单并且网上出现了公开的自动化扫描脚本,所以测试的人很多,也出现了一些真实攻击。漏洞的问题主要是出现在Sunlogin客户端的几个对外开放的接口中,现在我对其中一部分利用进行简要的分析。

    未授权认证

      分析的向日葵客户端版本为11.0.0.33162,当SunloginCLient.exe在Windows上执行时,会连接远程Oray的服务器,同时也会打开一个大于40000的端口监听外部的连接访问(具体是否从40000往上随即开启端口,这个没有调试,网上是这么说的,我们主要看的是发生利用的代码部分)。
      对其中一部分接口,Sunlogin统一对其进行处理。

      接着会执行至函数sub_140E21528,分别对不同接口进行不同的处理。在接口/cgi-bin/rpc的Handler处理函数中可以进行未授权认证。

      获取action参数值,如果值为verify-haras,即action=verify-haras,那么可以在没有识别码和验证码的情况下认证成功。


      成功后返回一个verify_string,作为之后再次访问时Cookie字段中使用的CID值。

    RCE

      漏洞发生在接口/check处,如下图,当参数cmd的值以ping或者nslookup开头时可以构造命令实现远程命令执行利用。

      发送请求时需要在请求头中指定Cookie字段中CID的值为之前/cgi-bin/rpc返回的verify_string值(在测试时我发现该值似乎是不会变化的,也就是说该值的计算没有时间因子参与)。下面是分别通过nslookupping拼接的利用请求。
      nslookup拼接字符串利用:

      ping拼接字符串利用:

    请求中的路径问题

      windows的路径处理问题,一些小细节:

    1. 因为最终调用的是CreateProcess,参数lpApplicationName固定为0,所以可执行文件需要从lpCommandLine参数中,以空格分隔的第一个字符串作为新起进程的启动路径。而windows又不会一级一级得验证目录的有效性,所以只要在ping/nslookup后不加空格并配合多个../和目标可执行文件的路径,从而启动任意目标进程,以空格分隔命令参数;
    2. Cmd.exe路径前面必须为反斜杠"\\",而不能是斜杠"/",不然无法找到目标文件,powershell.exe则没有这方面限制。究其原因是因为cmd中以斜杠"/"作为命令参数的标记使用,未免路径斜杠和其混淆,便固定反斜杠作为路径分隔符。如果使用了"/cmd.exe",会出现"cmd.exe /cmd.exe"的情况,/c作为参数指定后面的字符串作为命令,那么md命令会创建.exe目录,这就是为什么有时候第二次执行会出现"子目录或文件 .exe 已经存在"的原因;如果使用了/cmd,没有后缀,那么就是"命令语法错误"的回显。
    3. 使用反斜杠时注意转义字符,保险起见使用双方斜杠。

    其他

    1. assist接口问题:
      我参考的这篇分析中提到了接口/assist,但是没利用成功并发表了疑问。

      然后我尝试了一下,确实不行,经过分析后判断下来这个接口恐怕是没法用的。在/assist这个接口会用到API CreateProcessAsUser,同样lpApplicationName为0,由lpCommandLine空格分割后的第一个字符串指定执行文件路径。
      至于为什么说这个接口没法利用,是因为虽然可以通过fastcode指定参数值,并作为命令执行。但是并不和/check接口中的处理方式一样是直接执行,/assist接口处理函数是取当前进程(即当前SunloginClient.exe实例)路径,程序执行参数为"--mod=fastcode --fastcode=<fastcode传入的参数>",复制当前进程令牌后作为新进程的令牌启动。整个命令行尖括号才是我们可控的,而由于启动的进程已经固定不变了,为Sunloginclient.exe,后面所有字符串全部作为Sunloginclient.exe的参数,因此无法利用该接口指定其他命令。

      像&、|、||、&&这些符号也就是cmd.exe等shell终端中能有命令的效果,其他软件如Sunloginclient.exe不对其进行处理,因此不能用。
    2. 其他接口:
      比如/fastcode接口,无需传入参数,可以直接获取被控端的识别码;其他还有比如/micro-live/enable/micro-live/enable/sunlogin-tools等,不过简单地测试了一下,会出现初始化失败的问题,可能需要登录。
    客户端执行插件功能时,大多通过指定命令行新起一个进程实现。

    3. 内网外网问题
      因为需要直接访问向日葵客户端的ip,那么内网只能够从内网其他机器打进去;而如果在公网,则容易被发现和攻击。

  • 相关阅读:
    在NestJS应用程序中使用 Unleash 实现功能切换的指南
    【广州华锐互动】车辆零部件检修AR远程指导系统有效提高维修效率和准确性
    网络安全(黑客)自学
    RabbitMq(二)
    Java 类加载器 详解
    2022年中科磐云——服务器内部信息获取 解析flag
    【Java】javadoc生成文档/用户交互Scanner
    22-9-18学习笔记-MySQL和Redis
    nginx详细安装教程
    JWT的基础介绍
  • 原文地址:https://www.cnblogs.com/zUotTe0/p/15913108.html