Burp插件之SpringSpider项目分析

admin 2022年11月7日22:09:32评论89 views字数 2844阅读9分28秒阅读模式

项目地址

https://github.com/whwlsfb/SpringSpider

编译安装过程


执行mvn install 命令


Burp插件之SpringSpider项目分析


编译之后生成的文件


Burp插件之SpringSpider项目分析


针对项目结构的分析


在burpExtender.java中核心五行代码调用逻辑,代码功能依次为设置插件界面、定义扫描器、注册扫描器、注册监听器。


    this.uiHandler = new UIHandler(this);    callbacks.addSuiteTab(this.uiHandler);            scanner = new SpringScanner();            callbacks.registerScannerCheck(scanner);            callbacks.registerExtensionStateListener(this);

同时代码结构也非常清晰


Burp插件之SpringSpider项目分析


在界面绘制相关类中,UIHandler继承了burp的插件类,之后调用initUI函数完成了一系列的界面工作。


    public UIHandler(BurpExtender parent) {
this.parent = parent;
this.initUI();
}


接下来看Scanner的相关操作,及如何操作数据。Scanner实现burp的IScannerCheck接口中的doPassiveScan方法,深入如下代码,发现继续调用了子扫描接口。


    public List<IScanIssue> doPassiveScan(IHttpRequestResponse baseRequestResponse) {
if (ConfigUtils.getBoolean(ConfigUtils.ENABLE, true)) {
URL originUrl = cleanURL(Utils.Helpers.analyzeRequest(baseRequestResponse).getUrl());
List<IScanIssue> result = new ArrayList<>();
URL[] urls = Utils.splitUrls(originUrl);
for (URL url : urls) {
if (!isChecked(url.toString()))
for (ISubScanner subScanner : subScanners) {
result.addAll(subScanner.check(url, baseRequestResponse));
}
}
return result;
} else {
return null;
}
}


子扫描接口中的check函数,该行代码处发送构造好的request请求包


HttpRequestResponse resp = scanner.doRequest(originHeaders, originRequestResponse, newUrl);


其中处理响应包,匹配规则这一部分,Java语法有点超纲了,语法细节上有点不太理解在干啥


private final List<Payload> payloads = new ArrayList<Payload>() {{
add(new Payload(new ArrayList<String[]>() {{
add(new String[]{"env"});
add(new String[]{"actuator", "env"});
}}, (baseRequestResponse, checkRequest, newUrl) -> {
IResponseKeywords founds = Utils.Helpers.analyzeResponseKeywords(new ArrayList<String>() {{
add("java.version");
add("os.arch");
}}, checkRequest.getResponse());
if (BypassPayloadUtils.hasFound(founds, 0) && Utils.Helpers.analyzeResponse(checkRequest.getResponse()).getStatusCode() == 200) {
Utils.Callback.printOutput("found " + newUrl + ".rn");
return new Issue(
baseRequestResponse.getHttpService(),
newUrl,
new IHttpRequestResponse[]{checkRequest},
"Spring Actuator-Env found.",
"URL: " + newUrl,
"Medium", true);
} else {
return null;
}
}));
add(new Payload(new ArrayList<String[]>() {{
add(new String[]{"actuator"});
}}, (baseRequestResponse, checkRequest, newUrl) -> {
IResponseKeywords founds = Utils.Helpers.analyzeResponseKeywords(new ArrayList<String>() {{
add("health");
add("{"self":{");
add("{"_links":{");
}}, checkRequest.getResponse());
if (BypassPayloadUtils.hasFound(founds, 0) && Utils.Helpers.analyzeResponse(checkRequest.getResponse()).getStatusCode() == 200) {
Utils.Callback.printOutput("found " + newUrl + ".rn");
return new Issue(
baseRequestResponse.getHttpService(),
newUrl,
new IHttpRequestResponse[]{checkRequest},
"Spring Actuator found.",
"URL: " + newUrl,
"Medium", false);
} else {
return null;
}
}));
}};


两个add函数,但大致意思就是泛型实现了该部分的处理逻辑,在返回包识别特征后,将结果保存到了issue中。最后保存到了扫描器check函数的result中。


public Payload(List<String[]> resources, IResponseChecker responseChecker) {
this.resources = resources;
this.responseChecker = responseChecker;
}


结果最终反馈到IScanIssue变量中,主干流程中已经注册了监听函数,最终结果反馈到burp的Issue activity界面。

原文始发于微信公众号(here404):Burp插件之SpringSpider项目分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月7日22:09:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Burp插件之SpringSpider项目分析http://cn-sec.com/archives/1394617.html

发表评论

匿名网友 填写信息