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
值(在测试时我发现该值似乎是不会变化的,也就是说该值的计算没有时间因子参与)。下面是分别通过nslookup
和ping
拼接的利用请求。
nslookup拼接字符串利用:
ping拼接字符串利用:
请求中的路径问题
windows的路径处理问题,一些小细节:
- 因为最终调用的是
CreateProcess
,参数lpApplicationName
固定为0
,所以可执行文件需要从lpCommandLine
参数中,以空格分隔的第一个字符串作为新起进程的启动路径。而windows又不会一级一级得验证目录的有效性,所以只要在ping/nslookup后不加空格并配合多个../
和目标可执行文件的路径,从而启动任意目标进程,以空格分隔命令参数; - Cmd.exe路径前面必须为反斜杠
"\\"
,而不能是斜杠"/"
,不然无法找到目标文件,powershell.exe则没有这方面限制。究其原因是因为cmd中以斜杠"/"
作为命令参数的标记使用,未免路径斜杠和其混淆,便固定反斜杠作为路径分隔符。如果使用了"/cmd.exe"
,会出现"cmd.exe /cmd.exe"
的情况,/c
作为参数指定后面的字符串作为命令,那么md
命令会创建.exe
目录,这就是为什么有时候第二次执行会出现"子目录或文件 .exe 已经存在"的原因;如果使用了/cmd
,没有后缀,那么就是"命令语法错误"的回显。 - 使用反斜杠时注意转义字符,保险起见使用双方斜杠。
其他
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,那么内网只能够从内网其他机器打进去;而如果在公网,则容易被发现和攻击。
本文来自博客园,作者:Bl0od
转载请注明原文链接:https://www.cnblogs.com/zUotTe0/p/15913108.html