一开始跟着这个(https://blog.csdn.net/rfrder/article/details/120007644 ),死活也找不到哪里调用了计算器,后来才发现,它把利用函数简化了,完整的是:https://blog.csdn.net/rfrder/article/details/121236409
java没有servializable这样的序列化函数
要实现仅仅需要继承Servializable这个模块,然后写入流(ByteArrayOutputStream和ObjectOutputStream)即可,激活需要读出流(ByteArrayInputStream和ObjectInputStream)
另外就是一般喜欢调用的计算器的指令是“calc”(一开始看别人代码演示弹出计算器,死命找哪里调用都没找到,反而把“calc”这样的字符串当成填充字符略过了……)
演示用例:
1 | import java.io.*; |
反射机制:
1 | import java.lang.reflect.Constructor; |
在反序化中的应用:
1 | import java.io.*; |
runtime有个exec指令可以用
看一下runtime的内部
1 | private static Runtime currentRuntime = new Runtime(); |
1 | public static Runtime getRuntime() { |
1 | public Process exec(String command) throws IOException { |
所以先调用getRuntime()会获得返回值是new了这个类,然后调用这个类的exec,传参就行
获取私有变量内容:
1 | import java.lang.reflect.Constructor; |
例子:CVE-2015-6420
commons-collections-3.1.jar
1.导包:
2.com.deelmind.st.java
1 | package com.deelmind; |