1.ysoserial-URLDNS调试分析
ysoserial-URLDNS调试分析
ysoserial是源码强大的反序列化工具,深入研究其利用链能帮助理解Java语言特性,源码为Java安全学习打下坚实基础。源码本文将重点分析URLDNS的源码4399论坛源码利用过程。
利用链分析如图所示,源码当HashMap的源码key为URL类对象时,调用key.hashCode实际上触发了URL类对象的源码hashCode方法,从而引发DNS解析。源码实现自定义exp较为简单,源码通过设置hashCode为1,源码使得putval时重新计算hashCode,源码五柒源码以触发DNS解析。源码
使用IDEA,源码结合ysoserial jar (jitpack.io/com/github/f...)和ysoserial源码 (codeload.github.com/fro...)进行实践。源码
进行反序列化操作,源码查看dnslog,atf源码倒推分析过程。通过urldns类文件,我们发现ysoserial调用getobject方法,URLStreamHandler类处理url解析。URL类解析出协议、transaction 源码主机名、端口号等信息,协议决定交互规范,如HTTP、FTP等。sparkstreaming源码在成功构造URL实例后,openConnection()方法返回URLConnection对象,URL对象代理调用URLStreamHandler的openConnection()方法。
接着,实例化HashMap类,调用readobject方法进行反序列化。观察反序列化代码,发现调用putVal方法进行hash计算。首先深入hash方法,处理null和非null情况。对于URL对象作为key,可追踪到URL类的hashCode方法。判断hashCode是否等于-1,返回或调用handler的hashCode方法,最终调用实际的URL对象方法。
深入跟踪getHostAddress方法,其中InetAddress.getByName(host)实现DNS请求。通过DEBUG调试,发现反序列化过程中执行了实际的DNS查询。最后,反序列化的值即为利用过程的结果。