前言:
现在看官们对“chinanetxsym”大概比较关怀,我们都需要剖析一些“chinanetxsym”的相关知识。那么小编同时在网络上网罗了一些对于“chinanetxsym””的相关资讯,希望同学们能喜欢,看官们快快来了解一下吧!1.漏洞信息
2021年9月,Zoho官网发布了CVE-2021-40539漏洞补丁。从描述来看,CVE-2021-40539是一个认证绕过漏洞,影响版本包括`ADSelfService Plus builds up to 6113`,漏洞在`ADSelfService Plus build 6114`版本中进行修复(可以bypass)。漏洞脆弱点位于Restful API接口中,攻击者可以构造特殊URL请求,绕过认证后实现RCE,官方给出了漏洞利用的完整示意图:
2.调试配置
下载6113版本,安装完毕后运行自启动命令如下:
修改`wrapper.conf`文件,加入远程调试信息:
重新启动成功打开远程调试端口:
3.Restful API认证绕过
查看`web.xml`,Restful API接口对应的servlet为`action`:
URL以`/RestAPI/*`开头,查看`action`定义:
Restful API接口采用struts架构生成,访问接口的定义位于`*.xml`配置文件中。
`web.xml`定义了一个名为`ADSFilter`的全局过滤器:
定位`com.manageengine.ads.fw.filter.ADSFilter#doFilter`函数:
第65行首先判断如果是Restful API访问,尝试提取认证信息,然后调用`doSubFilters`:
经过一系列判断,进入第136行,对Restful API访问进行检查:
调用`isRestAPIRequest`函数判断是否为Restful API访问,如果为`true`,将调用`RestAPIFilter.doAction`进行认证信息验证等处理,看下`isRestAPIRequest`函数定义:
通过`request.getRequestURI`提取URL信息,这里通过正则表达式`/RestAPI/.*`来判断是否为Restful API访问,因为Zoho ManageEngine ADSelfService Plus使用的是Tomcat容器,下面的两个请求等价:
/RestAPI/LicenseMgr
/./RestAPI/LicenseMgr
`/RestAPI/LicenseMgr`对应的处理类为`LicenseMgr`,打下断点:
请求一:`/RestAPI/LicenseMgr`
可以发现在`com.manageengine.ads.fw.filter.ADSFilter#doSubFilters`没有通过权限检查,返回`false`。
请求二:`/./RestAPI/LicenseMgr`:
绕过了认证检查。
下面继续分析在绕过认证之后,是否存在进一步利用的可能性。
4.任意文件上传
前面提到了Restful API的接口定义位于`*.xml`文件之中,在`struts-config.xml`中找到`LogonCustomization`:
`com.adventnet.sym.adsm.common.webclient.admin.LogonCustomization`:
对参数进行一系列判断后,进入`sCAction.addSmartCardConfig`:
跟进`addSmartCardConfig`:
第94行调用`FileActionHandler.getFileFromRequest`提取`certFileJson`,进入函数:
其中参数`paramName`来源于请求提交的`CERTIFICATE_PATH`参数,实际上就是将上传的文件(来源于参数`CERTIFICATE_PATH`)进行保存。
下面构造一个文件上传的POST请求,根据前面的分析设置参数,最终请求如下:
文件上传至`\ManageEngine\ADSelfService Plus\bin`目录,尝试利用`../`进行穿越,但是`formFile.getFileName`只会提取文件名称,导致前面的`../`无效,无法进行穿越。
5.命令注入
现在可以实现未授权向`bin`目录写入任意文件,文件名称和文件内容完全可控,由于无法实现路径穿越,也就无法直接Getshell。在`struts-config.xml`中找到`ConnectionAction`:
`com.adventnet.sym.adsm.common.webclient.admin.ConnectionAction#openSSLTool`:
进入`SSLUtil.createCSR`:
实例化`JSONObject`对象`sslParams`,其中的参数全部来自于`request`,然后调用`createCSR`,跟进:
实例化字符串`keyCmd`,然后根据`JSONObject`的值完成字符串拼接,最后调用`runCommand`:
猜测可能会调用`runtime`执行命令,在`exec`处打下断点,构造请求进行测试:
确定调用了`Runtime.exec`来执行命令。`keytool.exe`是Java提供的一个生成数字证书的工具:
其中参数`providerclass`和`providerpath`可以用于指定Java字节码class文件的名称和路径,当调用`keytool.exe`时,会自动执行对应Java代码。很自然可以想到结合上面的任意文件上传漏洞,上传一个恶意class文件到bin目录,然后通过构造POST参数实现RCE。
首先构造一个恶意类`evil.java`:
编译evil.class文件后,上传至bin目录:
利用接口`ConnectionAction`构造如下请求:
触发断点,实际执行的命令如下:
成功实现RCE:
6.小结
CVE-2021-40539实现RCE的过程由3个漏洞组成,分别是Restful API认证绕过、任意文件上传以及命令拼接。在深入分析过程中,发现文件上传和命令执行还有其他的触发点,这里不过多赘述。此外,在`ADSelfService Plus build 6114`版本中,补丁更新的地方非常多,但对漏洞的修复并不完善,仍然可以被bypass,直到在更新的版本中,漏洞才得到较为完善的修复,有兴趣的小伙伴可以自行分析。
有需要了解更多漏洞情报小伙伴,请关注微信公众号:且听安全。聪者听于无形,明者见于未形;专注网络安全,关注漏洞态势;拒绝重复搬运,只做精品原创。
7.参考
;mid=2247485533&idx=1&sn=cc6a888c8fcf5c4c24bd12c792572d31&chksm=cefdb149f98a385f275d737c4200608b953b8f9fffad23536a271c4330e5b4265b925f8a99e5&scene=178&cur_album_id=2054199860790083586#rd
标签: #chinanetxsym