Ha1ey@深蓝攻防实验室
前言
相信大家实战项目中遇到过很多某友NC或者NCCloud,关于这个产品的漏洞也是层出不穷,最多的就是反序列化漏洞了。
在NC6.5这个产品版本的时候大家常用的一条利用链是CC链的任意方法调用,但是在新的补丁中添加了CC的黑名单,这就导致了这条链触发不了了。
部分黑名单如下
但是在NCCloud环境找了黑名单之外的链子测试过后发现并没有想的那么简单。
分析
无补丁和黑名单
使用常见的利用链即可造成RCE
有补丁+黑名单
构造序列化数据避开补丁中的恶意类名,发送payload发现没有成功回显
后面在接口处断点调试,发现会抛出如下异常:
java.lang.UnsupportedOperationException: 启用了 Java 安全时, 将禁用对反序列化 TemplatesImpl 的支持。可以通过将 jdk.xml.enableTemplatesImplDeserialization 系统属性设置为“真”来覆盖此设置。
在后续的版本用友为了一劳永逸干脆直接把jdk.xml.enableTemplatesImplDeserialization
禁用掉了,由于目前大多数的利用链都要依赖getter
去调用getOutputProperties
方法,从而导致TemplatesImpl
加载恶意类,进而实现RCE。
关于 jdk.xml.enableTemplatesImplDeserialization 属性
Apache 官方在2015年发表的声明中提到关于com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
被滥用的问题,同时也给出解决方案可以通过将系统属性jdk.xml.enableTemplatesImplDeserialization
设置为true 以允许反序列化,反之拒绝。这个属性如果未设置默认就是禁止的。
官方声明:https://news.apache.org/foundation/entry/apache_commons_statement_to_widespread
Bypass思路
首先关于TemplatesImpl
类失效,就需要找其他加载恶意类的方式。
这里可以使用JNDI注入造成RCE
反序列化+JNDI
JNDI注入在JDK高版本的几种利用方式:反序列化和本地Factory类,反序列化就不能再用了,这里主要看和本地Factory的组合利用。
由于NC在某些环境下的的Tomcat版本小于8,就导致没有javax.el.ELProcessor
,不怎么通用。NC环境中比较常见的一个依赖bsh
,由于bsh同样满足具有无参构造方法
同时有一个String.class
参数类型的方法eval
可以执行bsh脚本,加载恶意字节码。
加一条链子
利用链的后一部分就算找到了,下面只要找一个也是可以任意调用getter的入口点,构造恶意的JdbcRowSetImpl
对象造成JNDI注入就可以组合起来了。前半段反序列化主要受黑名单的限制,找黑名单外的即可,这里不做指明。
测试效果如下
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)