漏洞原理
该远程代码执行漏洞起因有可能与对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+导致的远程代码执行漏洞复现
准备一台装载有vulhub的ubuntu,以及一台攻击机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>
<</