跳到主要内容

为暴破模块增加Payload和加工payload

实现效果

增强 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 的值进行判断

参考