
XMLDecoder反序列化漏洞底层
参考的文章已经分析的非常详细了,这里我主要是就是一下最后的执行是怎么样的。也就是Expression类的使用
import java.beans.Expression;
public class test {
public static void main(String[] args)throws Exception {
Parameter();//有参数
NoParameter();//无参数
}
public static void Parameter() throws Exception{
Object var3 = new ProcessBuilder();
String var4 = "command";
String[] strings = new String[]{
"calc"};
Object[] var2 = new Object[]{
strings};
Expression var5 = new Expression(var3, var4, var2);
Object value = var5.getValue();//获得参数的类
String var1 = "start";
Object[] var6 = new Object[]{
};
Expression expression = new Expression(value, var1, var6);//执行start方法
expression.getValue();
// 为什么不能执行?因为class.newInstance只能调用无参构造函数而ProcessBuilder没有无参数构造函数。
// Class<?> aClass = value.getClass();
// Object o = aClass.newInstance();
// Method start = aClass.getMethod("start");
// start.invoke(o);
}
public static void NoParameter(){
String[] strings = new String[]{
"cmd.exe","/c","calc"};
Object var3 = new ProcessBuilder(strings);
String var4 = "start";
Object[] var2 = new Object[]{
};
Expression var5 = new Expression(var3, var4, var2);
try {
var5.getValue();
} catch (Exception e) {
e.printStackTrace();
}
}
}

并且通过测试可以发现Expression的使用,给出下面的例子。
public class cmd {
public void Noparameter(){
System.out.println("无参数调用....");
}
public void Parameter(Object[] obj){
System.out.println("有参数调用....");
}
}
import java.beans.Expression;
public class test1 {
public static void main(String[] args)throws Exception {
Object var3 = new cmd(</

本文探讨了XMLDecoder反序列化漏洞的底层机制,展示了如何利用Expression类制作WebShell。同时,讲解了ScriptEngineManager如何实现Java与JS的交互,以及其执行远程JS代码的尝试与限制。此外,还介绍了ELProcessor在表达式语言中的应用,同样利用反射执行命令。文章总结了各种表达式执行的共同点——Java反射技术,并提到了JNDI注入的绕过策略。
最低0.47元/天 解锁文章
1351





