背景:
渗透测试经常碰到Spring的框架,但是Spring框架的漏洞利用都比较难,或者说是我找不到漏洞的应用背景(漏洞在什么地方?),一直很困惑。直接拉取docker的话又不太助于理解,所以就入坑了。
一、安装maven
安装过程略过,安装好后需要配置环境变量什么的,找个教程安装即可。
1.环境变量配置好是这样的(如果输入mvn -version也可以出来,但显示not find JDK什么的就是环境变量没配置好)
2.找到安装目录配置settings.xml
这里配置的是依赖下载到什么地方(我这里配置下载到了maven目录)
<localRepository>D:mavenmaven3.6manen_jar</localRepository>
这里配置中央仓库地址(这里必须配置)
<!-- 阿里云仓库 --> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror> <!-- 中央仓库1 --> <mirror> <id>repo1</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://repo1.maven.org/maven2/</url> </mirror> <!-- 中央仓库2 --> <mirror> <id>repo2</id> <mirrorOf>central</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://repo2.maven.org/maven2/</url> </mirror> </mirrors>
最后那还有个JDK配置(不知道起不起作用)
二、新建项目
1.选择Spring Initializr
.
2.选择JDK
3.选中Spring Web即可
4.下一步起个项目名称点击完成
5.选择pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <repositories> <repository> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> </repository> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/libs-snapshot</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>https://repo.spring.io/libs-snapshot</url> </pluginRepository> </pluginRepositories> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>spirngboot-rec</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spirngboot-rec</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
6.这里就不得不说超级大坑
遇到依赖包not found怎么办???现在也没太搞明白具体什么缘由,这里被坑了很长时间,总结下面几点
(1)maven环境配置正确
(2)maven版本和IDEA版本想接近,根据年份大致选版本
(3)maven的settings.xml必须配置正确
(4)我还根据百度的教程给jdk安装了个https的证书(不知道有没有效果)
(5)IDEA配置正确,在设置中配置(这个配置应该是从xml配置的中央库拉取,把本地库默认取消掉)6
(6)还有的说什么什么版本不太稳定,反正没研究透
三、Spring初体验
1.在相应目录下新建俩个java文件
package com.example.spirngbootrec; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class); } }
package com.example.spirngbootrec; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class StartController { @RequestMapping("/hello") @ResponseBody public String init(){ return "hi,springboot!"; } }
2.启动项目后访问8080端口,显示如下说明搭建成功
3.配置Spring配置文件
注:(1)如果这里不配置的话,Spring默认是开放Health/info,如果配置添加下面这行就全部开放访问;
(2)也就说Spring未授权的漏洞由此而来,完全是因为配置文件的错误导致信息泄露后的漏洞利用(也是为什么只有CNVD编号没有CVE编号的原因,大概);
(3)而且这里的配置完全可以控制哪个可访问哪个禁止访问,而且spring的actuator功能是提供应用监控的功能,非必要对公网开放
(4)Spring1是默认一级目录,Spring2*的是/actuator/目录下的
management.endpoints.web.exposure.include=*
4.配置成功访问确认
总结:
截至目前网上暴露的未授权RCE的利用方式以下两种都为复现:
1./jolokia/list 危险目录未配置成功,这个目录可以造成RCE
2./env 危险目录未复现RCE
3.Spring 大家族组件太多了,分也分不清,也不知道哪个能利用哪个不能利用,慢慢探索吧
参考连接:
https://www.cnblogs.com/zwqh/p/11851300.html //spring配置
https://github.com/LandGrey/SpringBootVulExploit //spring利用方式汇总