XMLDecoder反序列化
基础知识
就简单讲讲吧,就是为了解析xml内容的
一般我们的xml都是标签属性这样的写法
比如person对象以xml的形式存储在文件中
在decode反序列化方法后,控制台成功打印出反序列化的对象。
就是可以根据我们的标签识别是什么成分的
漏洞原因
我们有些xml标签有特殊的作用
object标签的使用相当于new一个新对象,其中的string标签为构造方法需要的参数。
<object class="javax.swing.JButton">
<string>Press me</string>
</object>
new JButton("Press me");
void标签的method属性可以在反序列化的过程中自动执行,其中的string标签为方法调用的参数。
python
<object class="javax.swing.JButton">
<string>Press me</string>
<void method="setName">
<string>Greeting</string>
</void>
</object>
JButton button1 = new JButton("Press me");
button1.setName("Greeting");
其实有了上面的这些标签,我们就能够执行命令了
漏洞演示
使用网上找到POC,其中object反序列化类为java.lang.ProcessBuilder,构造方法参数为calc(windows操作系统上的计算器程序),void标签声明了反序列化过程中调用的方法为start方法。
就可以实例化我们的ProcessBuilder,调用它的start方法,然后传入calc参数
总结
因为比较简单,自己也没有去复现一下怎么的,也没有去调试,其实调试就是调试对标签的解析过程
参考https://www.freebuf.com/articles/web/321222.html
的解析过程
参考https://www.freebuf.com/articles/web/321222.html
图片都是用的这个链接的