实现效果
增强 Intruder
中的Payload能力:
- 选择Payload时选择从扩展生成,如随机生成10个uuid作为payload
- 对Payload进行二次加工,如给结尾增加随机的uuid字符串
涉及接口:
- 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();
}
}
实现测试
生成器测试
加工测试
扩展总结
- 实现
IIntruderPayloadGeneratorFactory
IIntruderPayloadProcessor
接口即可 - 如果payload的数量是有限的,那么可以先在初始化中设置一个初始值如
index = 0
,然后在hasMorePayloads
中对index
的值进行判断