软件攻防赛JDBCParty赛后解
1506847328721267 WEB安全 449浏览 · 2025-02-20 07:07

赛后晚上出了。可惜已经没环境进行测试了。 反编译

image.png
图片加载失败


存在反序列化点

image.png
图片加载失败


jdk17 fastjson2 oracle batik-swing

image.png
图片加载失败


最终思路


反序列化fastjson 打oracle jdbc getter去触发JNDI注入

高版本tomcat无forcestring,setter方式触发batik-swing中setURL造成RCE




反序列化

由于是jdk17,需要使用unsafe去打破反射限制

目前已经拥有了fastjson2.toString --> OracleCachedRowSet.getConnection(),需要一条toString

在尝试了多条常规链子后,选择了hashtable这条toString触发链

//hashtable.readObject ---> TextAndMnemonicHashMap.get ----> obj.toString

而然在测试的过程中发现,getter会调用到getCursorName中,抛出异常结束了运行

image.png
图片加载失败


实际上这与jackson在调用templates的getter不稳定是类似的

参考文章 https://xz.aliyun.com/t/12846

我们可以使用JdkDynamicAopProxy类指定OracleCachedRowSet的接口来进行对getConnection的稳定触发

image.png
图片加载失败


在其RowSetInternal接口中定义了getConncetion方法

image.png
图片加载失败


实现一个proxy即可

再次反序列化便能进入getConnection中,进行jndi注入

image.png
图片加载失败


image.png
图片加载失败






JNDI注入

image.png
图片加载失败


tomcat的版本为10.1.31,不存在forcestring,无法使用常规的方法进行RCE

相关文章 https://xz.aliyun.com/t/16719

尽管高版本的forcestring被修复了,但仍然存在着触发setter的方式,最终找到了JSVGCanvas.setURL来进行RCE

image.png
图片加载失败


https://mp.weixin.qq.com/s?__biz=MzkzOTQzOTE1NQ==&mid=2247483750&idx=1&sn=12a793075d0a8713bbfb4341b3591628&chksm=c2f1a43af5862d2cc898be9e4b43b24d24b29173501d3c10d812a8fcb7dd25d858e3095969ea#rd

https://github.com/Y4Sec-Team/CVE-2023-21939

这里踩了一个坑,mac打JarRCE是没反应的,具体原因未知,换成了windows才成功

image.png
图片加载失败


89fb53b9af9264ded7b642f36f0732b3_720.png
图片加载失败


编写RMIServer,方便一些

成功进入到了setURL

image.png
图片加载失败


但是在环境中却没能成功RCE



巨坑,换成windows进行深入调试

在JSVGCanvas.setURL加载类的过程中,会先在当前的类加载器的依赖中寻找是否存在该类,如果不存在,就从远程的jar中寻找该类并加载。

由于我们是jar调试,就导致了以下问题

会用jar协议往目标中寻找该类的路径。。很显然是不存在的,导致报错无法rce

image.png
图片加载失败


image.png
图片加载失败


而然在源码启动的项目中,是可以获取的

image.png
图片加载失败


image.png
图片加载失败


最终payload

rmi服务,用jdk8起即可

xmlserver和jarserver用项目中即可,记得更换成jdk17









3 条评论
某人
表情
可输入 255
IdiOt9
2025-04-06 12:49 0 回复
师傅,jar调试的问题能解决吗?现场比赛的时候应该就是jar环境吧,那这样不是都没法打通了吗?
IdiOt9
2025-04-09 06:47 0 回复
ok,我本地也是这个问题,应该是比赛环境出错了
1506847328721267
2025-04-07 07:57 0 回复
他比赛环境未知啊,不知道是不是因为我本地环境导致的这个问题,比赛时也是0解
目录