Spring框架Data Binding与JDK 9+导致的远程代码执行漏洞复现

本文介绍了Spring框架由于Data Binding和JDK 9+的改变引发的远程代码执行漏洞。漏洞源于Spring Core的异常克隆函数弃用,导致Java不受信任的字符串值反序列化执行代码。攻击者通过构造特定输入,如在查询参数中注入`class class class class`,可触发远程代码执行。文章提供了漏洞复现步骤,包括在vulhub环境中搭建靶机,利用Burp Suite进行攻击,成功执行命令并创建文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏洞原理

该远程代码执行漏洞起因有可能与对Spring Core所做的更改有关,该更改弃用了使用Java序列化和反序列化的旧“异常克隆”函数。该操作导致Java中使用不受信任的字符串值的反序列化运行远程代码。

当在使用了该框架的页面输入查询语句时,如:

http://localhost:8080/greeting?id=test

该语句就会被解析为Plain Old Java Object 类型(POJO),这个看似正常的请求,Spring会使用setter for 将 POJO 的名称字段设置为 :id=test request Greeting RequestMapping id"test"

由于可以设置其他的值,恶意攻击者便可以构造一个既可以写入又对程序执行有意义的字段:class class class class

详细解析原文:https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/

Spring框架Data Binding与JDK 9+导致的远程代码执行漏洞复现

准备一台装载有vulhububuntu,以及一台攻击机windows 10,靶机进入vulhub文件夹,直接就是一套丝滑连招

cd spring/CVE-2022-22965
sudo docker-compose up -d
sudo docker-compose ps

然后就可以看到网站端口,在攻击机输入URL:http://靶机IP:8080,该页面的页源代码是

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false" %>
<html>
<body>
<h2>Hello, my name is ${
   person.name}, I am ${
   person.age} years old.</h2>

</body>
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值