Skip to content

Commit f296f0d

Browse files
committed
add swagger-ui & ssrf of httpsyncclient
1 parent 2aa0b91 commit f296f0d

18 files changed

+273
-129
lines changed

java-sec-code.iml

+17-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.3.4.Final" level="project" />
5050
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
5151
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.0.Final" level="project" />
52-
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.3" level="project" />
5352
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.6" level="project" />
5453
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" level="project" />
5554
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.6" level="project" />
@@ -76,7 +75,7 @@
7675
<orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" />
7776
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.1" level="project" />
7877
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.4" level="project" />
79-
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.3.6" level="project" />
78+
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
8079
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.6" level="project" />
8180
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.10" level="project" />
8281
<orderEntry type="library" name="Maven: org.apache.httpcomponents:fluent-hc:4.3.6" level="project" />
@@ -200,5 +199,21 @@
200199
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.22" level="project" />
201200
<orderEntry type="library" name="Maven: org.jsoup:jsoup:1.10.2" level="project" />
202201
<orderEntry type="library" name="Maven: commons-io:commons-io:2.5" level="project" />
202+
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" />
203+
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.10" level="project" />
204+
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
205+
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
206+
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
207+
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
208+
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
209+
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.8.12" level="project" />
210+
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
211+
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
212+
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
213+
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.3" level="project" />
214+
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
215+
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
216+
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
217+
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
203218
</component>
204219
</module>

pom.xml

+22-2
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
<dependency>
8888
<groupId>org.apache.httpcomponents</groupId>
8989
<artifactId>httpclient</artifactId>
90-
<version>4.3.6</version>
90+
<version>4.5.12</version>
9191
</dependency>
9292

9393
<dependency>
@@ -222,12 +222,32 @@
222222
<version>1.10.2</version>
223223
</dependency>
224224

225-
<!-- ssrf -->
225+
<!-- SSRF -->
226226
<dependency>
227227
<groupId>commons-io</groupId>
228228
<artifactId>commons-io</artifactId>
229229
<version>2.5</version>
230230
</dependency>
231+
232+
<!-- SSRF -->
233+
<dependency>
234+
<groupId>org.apache.httpcomponents</groupId>
235+
<artifactId>httpasyncclient</artifactId>
236+
<version>4.1.4</version>
237+
</dependency>
238+
239+
<dependency>
240+
<groupId>io.springfox</groupId>
241+
<artifactId>springfox-swagger2</artifactId>
242+
<version>2.9.2</version>
243+
</dependency>
244+
245+
<dependency>
246+
<groupId>io.springfox</groupId>
247+
<artifactId>springfox-swagger-ui</artifactId>
248+
<version>2.9.2</version>
249+
</dependency>
250+
231251
</dependencies>
232252

233253
<dependencyManagement>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.joychou.config;
2+
3+
import org.springframework.beans.factory.annotation.Value;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import springfox.documentation.builders.PathSelectors;
7+
import springfox.documentation.builders.RequestHandlerSelectors;
8+
9+
import springfox.documentation.spi.DocumentationType;
10+
import springfox.documentation.spring.web.plugins.Docket;
11+
import springfox.documentation.swagger2.annotations.EnableSwagger2;
12+
13+
14+
@Configuration
15+
@EnableSwagger2
16+
public class SwaggerConfig {
17+
18+
@Value("${swagger.enable}")
19+
private boolean enableSwagger;
20+
21+
@Bean
22+
public Docket api() {
23+
return new Docket(DocumentationType.SWAGGER_2)
24+
.enable(enableSwagger)
25+
.select()
26+
.apis(RequestHandlerSelectors.any())
27+
.paths(PathSelectors.any())
28+
.build();
29+
}
30+
31+
}

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

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.joychou.controller;
22

33
import org.springframework.web.bind.annotation.CookieValue;
4+
import org.springframework.web.bind.annotation.GetMapping;
45
import org.springframework.web.bind.annotation.RequestMapping;
56

67
import javax.servlet.http.Cookie;
@@ -17,14 +18,14 @@ public class Cookies {
1718

1819
private static String NICK = "nick";
1920

20-
@RequestMapping(value = "/vuln01")
21+
@GetMapping(value = "/vuln01")
2122
public String vuln01(HttpServletRequest req) {
2223
String nick = WebUtils.getCookieValueByName(req, NICK); // key code
2324
return "Cookie nick: " + nick;
2425
}
2526

2627

27-
@RequestMapping(value = "/vuln02")
28+
@GetMapping(value = "/vuln02")
2829
public String vuln02(HttpServletRequest req) {
2930
String nick = null;
3031
Cookie[] cookie = req.getCookies();
@@ -37,7 +38,7 @@ public String vuln02(HttpServletRequest req) {
3738
}
3839

3940

40-
@RequestMapping(value = "/vuln03")
41+
@GetMapping(value = "/vuln03")
4142
public String vuln03(HttpServletRequest req) {
4243
String nick = null;
4344
Cookie cookies[] = req.getCookies();
@@ -53,7 +54,7 @@ public String vuln03(HttpServletRequest req) {
5354
}
5455

5556

56-
@RequestMapping(value = "/vuln04")
57+
@GetMapping(value = "/vuln04")
5758
public String vuln04(HttpServletRequest req) {
5859
String nick = null;
5960
Cookie cookies[] = req.getCookies();
@@ -68,13 +69,13 @@ public String vuln04(HttpServletRequest req) {
6869
}
6970

7071

71-
@RequestMapping(value = "/vuln05")
72+
@GetMapping(value = "/vuln05")
7273
public String vuln05(@CookieValue("nick") String nick) {
7374
return "Cookie nick: " + nick;
7475
}
7576

7677

77-
@RequestMapping(value = "/vuln06")
78+
@GetMapping(value = "/vuln06")
7879
public String vuln06(@CookieValue(value = "nick") String nick) {
7980
return "Cookie nick: " + nick;
8081
}

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

+13-12
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.joychou.util.LoginUtils;
55
import org.springframework.security.web.csrf.CsrfToken;
66
import org.springframework.web.bind.annotation.CrossOrigin;
7+
import org.springframework.web.bind.annotation.GetMapping;
78
import org.springframework.web.bind.annotation.RequestMapping;
89
import org.springframework.web.bind.annotation.RestController;
910

@@ -21,25 +22,25 @@ public class Cors {
2122

2223
private static String info = "{\"name\": \"JoyChou\", \"phone\": \"18200001111\"}";
2324

24-
@RequestMapping("/vuln/origin")
25-
public static String vuls1(HttpServletRequest request, HttpServletResponse response) {
25+
@GetMapping("/vuln/origin")
26+
public String vuls1(HttpServletRequest request, HttpServletResponse response) {
2627
String origin = request.getHeader("origin");
2728
response.setHeader("Access-Control-Allow-Origin", origin); // 设置Origin值为Header中获取到的
2829
response.setHeader("Access-Control-Allow-Credentials", "true"); // cookie
2930
return info;
3031
}
3132

32-
@RequestMapping("/vuln/setHeader")
33-
public static String vuls2(HttpServletResponse response) {
33+
@GetMapping("/vuln/setHeader")
34+
public String vuls2(HttpServletResponse response) {
3435
// 后端设置Access-Control-Allow-Origin为*的情况下,跨域的时候前端如果设置withCredentials为true会异常
3536
response.setHeader("Access-Control-Allow-Origin", "*");
3637
return info;
3738
}
3839

3940

40-
@CrossOrigin("*")
41+
@GetMapping("*")
4142
@RequestMapping("/vuln/crossOrigin")
42-
public static String vuls3() {
43+
public String vuls3() {
4344
return info;
4445
}
4546

@@ -50,8 +51,8 @@ public static String vuls3() {
5051
* 代码:org/joychou/security/CustomCorsProcessor
5152
*/
5253
@CrossOrigin(origins = {"joychou.org", "http://test.joychou.me"})
53-
@RequestMapping("/sec/crossOrigin")
54-
public static String secCrossOrigin() {
54+
@GetMapping("/sec/crossOrigin")
55+
public String secCrossOrigin() {
5556
return info;
5657
}
5758

@@ -61,7 +62,7 @@ public static String secCrossOrigin() {
6162
* 支持自定义checkOrigin
6263
* 代码:org/joychou/config/CorsConfig.java
6364
*/
64-
@RequestMapping("/sec/webMvcConfigurer")
65+
@GetMapping("/sec/webMvcConfigurer")
6566
public CsrfToken getCsrfToken_01(CsrfToken token) {
6667
return token;
6768
}
@@ -72,7 +73,7 @@ public CsrfToken getCsrfToken_01(CsrfToken token) {
7273
* 不支持自定义checkOrigin,因为spring security优先于setCorsProcessor执行
7374
* 代码:org/joychou/security/WebSecurityConfig.java
7475
*/
75-
@RequestMapping("/sec/httpCors")
76+
@GetMapping("/sec/httpCors")
7677
public CsrfToken getCsrfToken_02(CsrfToken token) {
7778
return token;
7879
}
@@ -83,7 +84,7 @@ public CsrfToken getCsrfToken_02(CsrfToken token) {
8384
* 支持自定义checkOrigin
8485
* 代码:org/joychou/filter/OriginFilter.java
8586
*/
86-
@RequestMapping("/sec/originFilter")
87+
@GetMapping("/sec/originFilter")
8788
public CsrfToken getCsrfToken_03(CsrfToken token) {
8889
return token;
8990
}
@@ -100,7 +101,7 @@ public CsrfToken getCsrfToken_04(CsrfToken token) {
100101
}
101102

102103

103-
@RequestMapping("/sec/checkOrigin")
104+
@GetMapping("/sec/checkOrigin")
104105
public String seccode(HttpServletRequest request, HttpServletResponse response) {
105106
String origin = request.getHeader("Origin");
106107

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class Fastjson {
1616

1717
@RequestMapping(value = "/deserialize", method = {RequestMethod.POST})
1818
@ResponseBody
19-
public static String Deserialize(@RequestBody String params) {
19+
public String Deserialize(@RequestBody String params) {
2020
// 如果Content-Type不设置application/json格式,post数据会被url编码
2121
try {
2222
// 将post提交的string转换为json

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.slf4j.LoggerFactory;
66
import org.springframework.util.AntPathMatcher;
77
import org.springframework.util.PathMatcher;
8+
import org.springframework.web.bind.annotation.GetMapping;
89
import org.springframework.web.bind.annotation.RequestMapping;
910
import org.springframework.web.bind.annotation.RestController;
1011

@@ -30,7 +31,7 @@ public class GetRequestURI {
3031

3132
private final Logger logger = LoggerFactory.getLogger(this.getClass());
3233

33-
@RequestMapping(value = "/exclued/vuln")
34+
@GetMapping(value = "/exclued/vuln")
3435
public String exclued(HttpServletRequest request) {
3536

3637
String[] excluedPath = {"/css/**", "/js/**"};

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.joychou.controller;
22

3+
import org.springframework.web.bind.annotation.GetMapping;
34
import org.springframework.web.bind.annotation.RequestMapping;
4-
import org.springframework.web.bind.annotation.ResponseBody;
55
import org.springframework.web.bind.annotation.RestController;
66

77
import java.io.BufferedInputStream;
@@ -17,8 +17,7 @@
1717
@RequestMapping("/rce")
1818
public class Rce {
1919

20-
@RequestMapping("/exec")
21-
@ResponseBody
20+
@GetMapping("/exec")
2221
public String CommandExec(String cmd) {
2322
Runtime run = Runtime.getRuntime();
2423
StringBuilder sb = new StringBuilder();

0 commit comments

Comments
 (0)