Spring Framework 远程代码执行漏洞 CVE-2022-22965
影响范围
- Spring Framework < 5.3.18
- Spring Framework < 5.2.20
漏洞类型
参数绑定漏洞
操作系统限制
无
配置要求
无
漏洞利用
执行命令,可以进行反弹 shell
利用原理
利用 Java 特性,对象互通且允许通过点号. 访问属性的属性,在 JDK9 中引入了 Module,Spring 没防住 class.module.classLoader,可以直接通过参数访问到 Tomcat 的类加载器。在 Tomcat 中有一个 AccessLogValve 组件负责记录访问日志,可以通过参数绑定来修改其配置,directory(日志存放目录)、prefix(日志文件名)、suffix(日志后缀)、fileDateFormat(日期后缀)、pattern(日志格式),将目录修改到 Web 根目录,将日志文件名确定,日志后缀改成.jsp,将日期后缀清空,防止文件名额外添加上日期,将 Java 恶意代码注入到日志格式中。最后通过日志功能,当攻击者发送请求,将设定好的文件存放到 Web 根目录,内容即构造的恶意 payload。pattern 模块有一段代码为 pattern=%25 {参数 1} i+ 其他代码 +%25 {参数 2} i,其中两个参数要放到 HTTP 请求头,后面分别接上 <% 和 %>//作为参数替换的内容,最后拼接成一段完整的 jsp 可执行代码。
漏洞复现
用现成的 vulhub 来拉取镜像
1 | #下载vulhub源代码 |

访问 http://公网: 8080

用 burpsuite 抓取首页的数据包

发送到 Repeater 模块

在 GET 请求后添加 payload
1 | #注入的payload |

返回响应码 200

访问 http://公网: 8080/final_shell.jsp,返回响应码 500 说明成功注入 jsp 文件

添加参数 cmd = id,即访问 http://公网: 8080/final_shell.jsp?cmd = id,返回页面如下

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Johan的秘密小窝!
评论