实现效果

增强 Intruder 中的Payload能力:

  • 选择Payload时选择从扩展生成,如随机生成10个uuid作为payload
  • 对Payload进行二次加工,如给结尾增加随机的uuid字符串

image-20240926上午81956490

涉及接口:

  • IIntruderPayloadGeneratorFactory (Payload生成)
  • IIntruderPayloadProcessor (Payload加工)
  • IIntruderPayloadGenerator

实现代码

创建项目过程省略,直接从代码入手,使用旧版API开发。

package burp;

import java.util.UUID;

public class BurpExtender implements IBurpExtender, IIntruderPayloadGeneratorFactory, IIntruderPayloadProcessor{
    // 回调对象
    private IBurpExtenderCallbacks callbacks;
    // 辅助类,一般用于辅助分析数据包结构
    private IExtensionHelpers helpers;

    // 实现 IBurpExtender 接口函数
    @Override
    public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
        // 设置插件名字
        callbacks.setExtensionName("Demo");

        // callbacks到处都要用,搞成类变量
        this.callbacks = callbacks;

        // 辅助类,一般用于辅助分析数据包结构,类变量方便其他函数调用
        helpers = callbacks.getHelpers();

        // 注册相关接口,让burp知道它们存在
        callbacks.registerIntruderPayloadGeneratorFactory(this);
        callbacks.registerIntruderPayloadProcessor(this);
    }

    // IIntruderPayloadGeneratorFactory 的实现,生成Payload的

    // 生成器的名字
    @Override
    public String getGeneratorName() {
        return "random test";
    }

    // 生成器生成payload的实例实现
    @Override
    public IIntruderPayloadGenerator createNewInstance(IIntruderAttack attack) {
        return new RandomUUID();
    }

    private class RandomUUID implements IIntruderPayloadGenerator {
        private int index;

        // 是否还有payload;如果要一直生成payload就永远返回true
        @Override
        public boolean hasMorePayloads() {
            return index < 10;
        }

        // 生成Payload,随机uuid
        @Override
        public byte[] getNextPayload(byte[] baseValue) {
            String randuuid = UUID.randomUUID().toString();
            index += 1;
            return randuuid.getBytes();
        }

        // 初始化,可以设置一些值用于后续判断,如果要一直生成payload就不管
        @Override
        public void reset() {
            index = 0;
        }
    }

    // IIntruderPayloadProcessor 的实现,加工Payload的

    // 加工器的名字
    @Override
    public String getProcessorName() {
        return "add random uuid";
    }

    // 如何加工Payload
    @Override
    public byte[] processPayload(byte[] currentPayload, byte[] originalPayload, byte[] baseValue) {
        // 给每个payload后加一个随机的uuid
        String randuuid = UUID.randomUUID().toString();
        String payload = helpers.bytesToString(currentPayload) + randuuid;
        return payload.getBytes();
    }
}

实现测试

生成器测试

image-20240926上午83351390

image-20240926上午83929701

加工测试

image-20240926上午84029657

image-20240926上午84059832

扩展总结

  • 实现IIntruderPayloadGeneratorFactory IIntruderPayloadProcessor 接口即可
  • 如果payload的数量是有限的,那么可以先在初始化中设置一个初始值如 index = 0,然后在 hasMorePayloads 中对 index 的值进行判断

参考

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-09-28 14:13:36

results matching ""

    No results matching ""