软件攻防赛JDBCParty赛后解
1506847328721267 WEB安全 422浏览 · 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
目录