基于请求/响应对象搜索的Java中间件通用回显方法(针对HTTP)

探讨了在Java中间件中利用反序列化漏洞进行回显的技术细节,通过搜索内存中的request和response对象,实现命令执行并返回结果。在Tomcat、Jetty和Weblogic等多种环境中进行了测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先感谢一下scz大佬给的博客推荐,受宠若惊+10086。

心血来潮有这么个想法,验证一下。

只讨论思路,工具木有~

前言

  1. 看了很多师傅们在研究针对Java中间件+Java反序列化漏洞回显的研究:

    • https://xz.aliyun.com/t/7740
    • https://xz.aliyun.com/t/7348
    • https://paper.seebug.org/1233/
    • (。。。应该还有挺多,就不翻了)
  2. 又看到了c0ny1师傅的作品:《java内存对象搜索辅助工具》

    配合IDEA在Java应用运行时,对内存中的对象进行搜索。比如可以可以用挖掘request对象用于回显等场景。

    按照经验来讲Web中间件是多线程的应用,一般requst对象都会存储在线程对象中,可以通过Thread.currentThread()Thread.getThreads()获取。

  3. 并且目前回显思路主要是基于加载类,执行static块或者构造方法(原生反序列化、FastJson、Jackson一类的都有):

    • TemplatesImpl类的反序列化链,内嵌类的bytecode,defineClass。
    • 其他反序列化链使用URLClassLoader进行远程加载类。
    • JNDI远程加载类。

所以想到: 我们能否写单个类,让它能够触发时,使用2的思路去寻找request和response,从request中获取命令参数,然后向Response中写入呢?

先说结论: 可以实现,在Tomcat、Jetty和Weblogic中都可使用(只测了这三,个人觉得其它Java中间件也没差),还测试了Shiro、Fastjson、Jackson反序列化的场景。

Tomcat6+Shiro会报java.io.StreamCorruptedException: invalid type code:错误,很迷,有空再解决吧。

精简后的编译完的class文件大小在2800-2900B左右,Shiro反序列化用的Cookie值大小可以控制在5000字节左右,勉强可以接受。

响应时间一般在3S内。

基本思路

javax.servlet.http.HttpServletRequest

javax.servlet.http.HTTPServletResponse

  1. java类中间件的request和response分别实现以上两个接口
  2. 从Thread.currentThread()起始搜索实现了如上两个接口的对象
  3. 通过HttpServletRequest的getHeader方法可以获取到请求头
  4. 通过HTTPServletResponse的getWriter方法可以获取到响应的Writer(开始用的ServletResponse的getOutputStream接口,但是会报重复获取的OutputStream的错误,此处就改为使用getWriter了)
  5. 都搜索到后,该执行执行,该输出输出

初始代码

有点多,都贴上有水字数的嫌疑,还是贴gist链接吧。┓( ´∀` )┏

https://gist.github.com/fnmsd/89118c2967cd53c244389564d2f8b368

编译完的class 3888字节,好吉利~

  • 为了类能小一些,没有做c0ny1师傅那么细致的搜索分类和剪枝。

  • 为了方便,纯粹使用深度优先搜索(DFS),依次搜索字段

  • 然而接下来为了瘦身,各种先定逻辑还得继续砍砍砍

**PS:**在搜索Tomcat的Request过程中,不知道为何会搜出一个并非当前Request的对象,所以这里限制了Request必须包含cmd头,才认为找到了真的Request,Response目前没有发现这个问题。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值