From f6d7a50c2d1397d73e386ff284a2675d801b2e0e Mon Sep 17 00:00:00 2001 From: Niklas Herz Date: Mon, 29 Jan 2024 16:32:19 +0100 Subject: [PATCH] fix filter issue where one activated filters activates all filters --- src/main/java/burp/CstcHttpHandler.java | 4 ++-- .../usd/cstchef/view/RequestFilterDialog.java | 10 +++++----- .../de/usd/cstchef/view/filter/Filter.java | 19 ++++++++++--------- .../usd/cstchef/view/filter/FilterState.java | 11 ++++++----- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/java/burp/CstcHttpHandler.java b/src/main/java/burp/CstcHttpHandler.java index 7933f1d..3fd58ea 100644 --- a/src/main/java/burp/CstcHttpHandler.java +++ b/src/main/java/burp/CstcHttpHandler.java @@ -24,7 +24,7 @@ public class CstcHttpHandler implements HttpHandler { @Override public RequestToBeSentAction handleHttpRequestToBeSent(HttpRequestToBeSent requestToBeSent) { - if (BurpUtils.getInstance().getFilterState().shouldProcess(FilterState.BurpOperation.OUTGOING)) { + if (BurpUtils.getInstance().getFilterState().shouldProcess(FilterState.BurpOperation.OUTGOING, requestToBeSent.toolSource())) { ByteArray request = requestToBeSent.toByteArray(); ByteArray modifiedRequest = view.getOutgoingRecipePanel().bake(request); Logger.getInstance().log("modified request: \n" + new String(modifiedRequest.getBytes())); @@ -37,7 +37,7 @@ public RequestToBeSentAction handleHttpRequestToBeSent(HttpRequestToBeSent reque @Override public ResponseReceivedAction handleHttpResponseReceived(HttpResponseReceived responseReceived) { - if (BurpUtils.getInstance().getFilterState().shouldProcess(FilterState.BurpOperation.INCOMING)) { + if (BurpUtils.getInstance().getFilterState().shouldProcess(FilterState.BurpOperation.INCOMING, responseReceived.toolSource())) { ByteArray response = responseReceived.toByteArray(); ByteArray modifiedResponse = view.getIncomingRecipePanel().bake(response); Logger.getInstance().log("modified response: \n" + new String(modifiedResponse.getBytes())); diff --git a/src/main/java/de/usd/cstchef/view/RequestFilterDialog.java b/src/main/java/de/usd/cstchef/view/RequestFilterDialog.java index 616142d..ec410ea 100644 --- a/src/main/java/de/usd/cstchef/view/RequestFilterDialog.java +++ b/src/main/java/de/usd/cstchef/view/RequestFilterDialog.java @@ -52,13 +52,13 @@ private RequestFilterDialog() { private JPanel createPanel(BurpOperation operation) { if (BurpUtils.getInstance().getFilterState().getFilterMask(operation).isEmpty()) { - BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter("Proxy", ToolType.PROXY.ordinal()), false); - BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter("Repeater", ToolType.REPEATER.ordinal()), + BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter(ToolType.PROXY, ToolType.PROXY.ordinal()), false); + BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter(ToolType.REPEATER, ToolType.REPEATER.ordinal()), false); - BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter("Scanner", ToolType.SCANNER.ordinal()), false); - BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter("Intruder", ToolType.INTRUDER.ordinal()), + BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter(ToolType.SCANNER, ToolType.SCANNER.ordinal()), false); + BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter(ToolType.INTRUDER, ToolType.INTRUDER.ordinal()), false); - BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter("Extender", ToolType.EXTENSIONS.ordinal()), + BurpUtils.getInstance().getFilterState().getFilterMask(operation).put(new Filter(ToolType.EXTENSIONS, ToolType.EXTENSIONS.ordinal()), false); } diff --git a/src/main/java/de/usd/cstchef/view/filter/Filter.java b/src/main/java/de/usd/cstchef/view/filter/Filter.java index 39c93fa..518ecf9 100644 --- a/src/main/java/de/usd/cstchef/view/filter/Filter.java +++ b/src/main/java/de/usd/cstchef/view/filter/Filter.java @@ -3,28 +3,29 @@ import com.fasterxml.jackson.annotation.JsonValue; import burp.Logger; +import burp.api.montoya.core.ToolType; public class Filter { - private String name; + private ToolType toolType; private int value; - public Filter(String name, int value) { - this.name = name; + public Filter(ToolType toolType, int value) { + this.toolType = toolType; this.value = value; } public Filter(String s) { String[] pairs = s.split(":"); - this.name = pairs[0].trim(); + this.toolType = ToolType.valueOf(pairs[0].trim()); this.value = Integer.parseInt(pairs[1].trim()); } - public String getName() { - return name; + public ToolType getToolType() { + return toolType; } - public void setName(String name) { - this.name = name; + public void setToolType(ToolType name) { + this.toolType = name; } public int getValue() { @@ -38,6 +39,6 @@ public void setValue(int value) { @Override @JsonValue public String toString() { - return name + ": " + value; + return toolType.toString() + ": " + value; } } diff --git a/src/main/java/de/usd/cstchef/view/filter/FilterState.java b/src/main/java/de/usd/cstchef/view/filter/FilterState.java index a6fbb0e..bd49d7d 100644 --- a/src/main/java/de/usd/cstchef/view/filter/FilterState.java +++ b/src/main/java/de/usd/cstchef/view/filter/FilterState.java @@ -6,6 +6,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import burp.api.montoya.core.ToolSource; + public class FilterState implements Serializable{ @JsonDeserialize(keyUsing = FilterStateDeserializer.class) private LinkedHashMap incomingFilterSettings; @@ -63,7 +65,7 @@ public void setFilterMask(LinkedHashMap incomingFilterMask, this.formatFilterSettings = formatFilterMask; } - public boolean shouldProcess(BurpOperation operation) { + public boolean shouldProcess(BurpOperation operation, ToolSource toolSource) { LinkedHashMap filterSettings; int filterMask = 0; switch (operation) { @@ -83,12 +85,11 @@ public boolean shouldProcess(BurpOperation operation) { for (Map.Entry entry : filterSettings.entrySet()) { Filter filter = entry.getKey(); - boolean selected = entry.getValue(); - if (selected) { - filterMask |= filter.getValue(); + if(filter.getToolType().equals(toolSource.toolType())){ + return entry.getValue() == true; } } - return filterMask != 0; + return false; } public LinkedHashMap getIncomingFilterSettings() {