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,那么内网只能够从内网其他机器打进去;而如果在公网,则容易被发现和攻击。

posted @ 2022-02-19 17:09  Bl0od  阅读(2462)  评论(0编辑  收藏  举报