利用TemplatesImpl执行字节码在实战中的踩坑记录

admin 2024年10月29日00:14:19评论15 views字数 905阅读3分1秒阅读模式

利用TemplatesImpl执行字节码在实战中的踩坑记录

在平时,无论是JNDI注入,还是反序列化,只要涉及到不出网的场景,TemplatesImpl的利用就很广泛,这里记录一个在实战中遇到的踩坑记录,篇幅不多贵在记录。

假设当前服务器存在反序列化漏洞,不出网,当你兴高采烈的拿着工具去打的时候发现怎么也打不通,内存马上不去,回显也没有,这是怎么回事呢?且看下文。

既然需要使用TemplatesImpl加载字节码,那么就需要生成恶意类的Bytecode

这里我们再温习一下,最终在getTransletInstance方法处加载字节码到jvm,并调用newInstance实例化触发恶意代码的加载

利用TemplatesImpl执行字节码在实战中的踩坑记录

网上的各种工具,基本上都使用了javassist框架进行恶意类的生成,这里以TomcatEcho为例,大多数工具代码都类似下面的写法,创建类,添加方法,生成ByteCode

利用TemplatesImpl执行字节码在实战中的踩坑记录

问题就出在输出ByteCode的过程中,当调用ClassPool.getDefault()的过程中,会初始化ClassFile,根据某些不同版本特定存在的类来判断当前环境的MAJOR_VERSION(Ps:这里的反编译有点问题,从上到下ver其实是依次从49到55),这个MAJOR_VERSION其实就是我们java的主版本号从49-55分别为jdk1.5到jdk11

利用TemplatesImpl执行字节码在实战中的踩坑记录

因此这就很有意思了,这意味着使用javassist生成的字节码的属性信息和当前java运行环境有关

假设当前服务器是一个jdk1.6跑着的tomcat服务,你拿工具打,那很显然jdk1.6并不能运行1.8版本下编译的程序,那怎么办呢?其实很简单修改这个MAJOR_VERSION就行,只要这个属性的数值小于或等于当前运行的java环境那就能过检查并运行

而javassist本身也提供了对应的api去帮助我们修改,比如我们需要生成1.6能运行的字节码,我们只需要在原来的基础上加上clazz.getClassFile().setMajorVersion(50);即可

利用TemplatesImpl执行字节码在实战中的踩坑记录

那如果是asm框架怎么办,就更简单了,创建类的时候在第一个输入写上对应主版本号即可

利用TemplatesImpl执行字节码在实战中的踩坑记录

- source:y4tacker

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月29日00:14:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   利用TemplatesImpl执行字节码在实战中的踩坑记录https://cn-sec.com/archives/3314625.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息