diff --git a/ContentTypeConverter/src/main/java/burp/BurpExtender.java b/ContentTypeConverter/src/main/java/burp/BurpExtender.java index 4cc623d..c0c197e 100644 --- a/ContentTypeConverter/src/main/java/burp/BurpExtender.java +++ b/ContentTypeConverter/src/main/java/burp/BurpExtender.java @@ -6,12 +6,11 @@ public class BurpExtender implements IBurpExtender @Override public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) { - IExtensionHelpers helpers = callbacks.getHelpers(); callbacks.setExtensionName("Content-Type Converter"); - callbacks.registerContextMenuFactory(new Menu(callbacks, helpers)); + callbacks.registerContextMenuFactory(new Menu(helpers)); } } diff --git a/ContentTypeConverter/src/main/java/burp/Menu.java b/ContentTypeConverter/src/main/java/burp/Menu.java index bb47b4d..4e9b79d 100644 --- a/ContentTypeConverter/src/main/java/burp/Menu.java +++ b/ContentTypeConverter/src/main/java/burp/Menu.java @@ -3,22 +3,25 @@ import javax.swing.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; public class Menu implements IContextMenuFactory { - private final IBurpExtenderCallbacks m_callbacks; private final IExtensionHelpers m_helpers; - public Menu(IBurpExtenderCallbacks callbacks, IExtensionHelpers helpers) { - m_callbacks = callbacks; + public Menu(IExtensionHelpers helpers) { m_helpers = helpers; } public List createMenuItems(final IContextMenuInvocation invocation) { - JMenuItem sendXMLToRepeater = new JMenuItem("Convert to XML and Send to Repeater"); - JMenuItem sendJSONToRepeater = new JMenuItem("Convert to JSON and Send to Repeater"); + List menus = new ArrayList(); + + if (invocation.getToolFlag() != IBurpExtenderCallbacks.TOOL_INTRUDER && invocation.getInvocationContext() != IContextMenuInvocation.CONTEXT_MESSAGE_EDITOR_REQUEST){ + return menus; + } + + JMenuItem sendXMLToRepeater = new JMenuItem("Convert to XML"); + JMenuItem sendJSONToRepeater = new JMenuItem("Convert to JSON"); sendXMLToRepeater.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent arg0) { @@ -35,19 +38,21 @@ public void mouseExited(MouseEvent arg0) { public void mousePressed(MouseEvent arg0) { - IHttpRequestResponse[] selectedMessages = invocation.getSelectedMessages(); - for (IHttpRequestResponse iReqResp : selectedMessages) { - IHttpService httpService = iReqResp.getHttpService(); - try { - m_callbacks.sendToRepeater(httpService.getHost(), httpService.getPort(), (httpService.getProtocol().equals("https")), Utilities.convertToXML(m_helpers, iReqResp),null); - } catch (Exception e) { - e.printStackTrace(); - } - } + } public void mouseReleased(MouseEvent arg0) { + IHttpRequestResponse iReqResp = invocation.getSelectedMessages()[0]; + try { + byte[] request = Utilities.convertToXML(m_helpers, iReqResp); + if (request != null) { + + iReqResp.setRequest(request); + } + } catch (Exception e) { + e.printStackTrace(); + } } }); @@ -67,20 +72,25 @@ public void mouseExited(MouseEvent arg0) { public void mousePressed(MouseEvent arg0) { - IHttpRequestResponse[] selectedMessages = invocation.getSelectedMessages(); - for (IHttpRequestResponse iReqResp : selectedMessages) { - IHttpService httpService = iReqResp.getHttpService(); - m_callbacks.sendToRepeater(httpService.getHost(), httpService.getPort(), (httpService.getProtocol().equals("https")), Utilities.convertToJSON(m_helpers, iReqResp),null); - } } public void mouseReleased(MouseEvent arg0) { + IHttpRequestResponse iReqResp = invocation.getSelectedMessages()[0]; + try { + byte[] request = Utilities.convertToJSON(m_helpers, iReqResp); + if (request != null) { + + iReqResp.setRequest(request); + } + } catch (Exception e) { + e.printStackTrace(); + } } }); - List menus = new ArrayList(); + menus.add(sendXMLToRepeater); menus.add(sendJSONToRepeater); return menus; diff --git a/ContentTypeConverter/src/main/java/burp/Utilities.java b/ContentTypeConverter/src/main/java/burp/Utilities.java index 30cd548..55bdc18 100644 --- a/ContentTypeConverter/src/main/java/burp/Utilities.java +++ b/ContentTypeConverter/src/main/java/burp/Utilities.java @@ -5,6 +5,8 @@ import org.json.XML; import org.w3c.dom.*; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; @@ -16,7 +18,6 @@ import java.io.Writer; import java.net.URLDecoder; import java.util.*; -import javax.xml.parsers.*; public class Utilities { @@ -24,7 +25,7 @@ public static byte[] convertToXML(IExtensionHelpers helpers, IHttpRequestRespons byte[] request = requestResponse.getRequest(); - if (helpers.analyzeRequest(request).getMethod() == "GET"){ + if (Objects.equals(helpers.analyzeRequest(request).getMethod(), "GET")){ request = helpers.toggleRequestMethod(request); } @@ -34,7 +35,7 @@ public static byte[] convertToXML(IExtensionHelpers helpers, IHttpRequestRespons byte content_type = requestInfo.getContentType(); - String body = new String(request, bodyOffset, request.length - bodyOffset); + String body = new String(request, bodyOffset, request.length - bodyOffset, "UTF-8"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Document doc = new Document() { @@ -342,7 +343,7 @@ public Node renameNode(Node n, String namespaceURI, String qualifiedName) throws } if (!success) { - return request; + return null; } else { List headers; @@ -357,7 +358,7 @@ public Node renameNode(Node n, String namespaceURI, String qualifiedName) throws headers.add("Content-Type: application/xml;charset=UTF-8"); - return helpers.buildHttpMessage(headers, prettyPrint(doc).getBytes()); + return helpers.buildHttpMessage(headers,prettyPrint(doc).getBytes()); } @@ -367,7 +368,7 @@ public static byte[] convertToJSON(IExtensionHelpers helpers, IHttpRequestRespon byte[] request = requestResponse.getRequest(); - if (helpers.analyzeRequest(request).getMethod() == "GET"){ + if (Objects.equals(helpers.analyzeRequest(request).getMethod(), "GET")){ request = helpers.toggleRequestMethod(request); } @@ -423,7 +424,7 @@ public static byte[] convertToJSON(IExtensionHelpers helpers, IHttpRequestRespon } private static Map splitQuery(String body) throws UnsupportedEncodingException { - Map query_pairs = new LinkedHashMap(); + Map query_pairs = new LinkedHashMap<>(); List pairs = Arrays.asList(body.split("&")); for (String pair : pairs) { @@ -446,7 +447,4 @@ public static String prettyPrint(Document xml) throws Exception { tf.transform(new DOMSource(xml), new StreamResult(out)); return(out.toString()); } - - - }