From 04989ee51f46b09e3a553a21a89ab9173aa604bf Mon Sep 17 00:00:00 2001 From: egru Date: Tue, 5 May 2015 23:52:49 -0500 Subject: [PATCH] UI & Error Handling - Fix parsing dialog window location - Add service name to tabs - Add additional checks for WSDL validity --- src/main/java/burp/Menu.java | 10 ++++++---- src/main/java/burp/WSDLParser.java | 26 ++++++++++++++++++++++---- src/main/java/burp/WSDLParserTab.java | 4 ++-- src/main/java/burp/WSDLTab.java | 4 ++-- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/main/java/burp/Menu.java b/src/main/java/burp/Menu.java index 50e5024..9b4d91e 100644 --- a/src/main/java/burp/Menu.java +++ b/src/main/java/burp/Menu.java @@ -38,7 +38,7 @@ public void mouseClicked(MouseEvent e) { public void mousePressed(MouseEvent e) { WSDLParser parser = new WSDLParser(helpers, tab); try { - new GuiWorker(parser,invocation, tab, callbacks).execute(); + new Worker(parser,invocation, tab, callbacks).execute(); } catch (Exception e1) { e1.printStackTrace(); } @@ -66,7 +66,7 @@ public void mouseExited(MouseEvent e) { } -class GuiWorker extends SwingWorker { +class Worker extends SwingWorker { private JDialog dialog = new JDialog(); private JProgressBar progressBar = new JProgressBar(); @@ -76,13 +76,13 @@ class GuiWorker extends SwingWorker { private IBurpExtenderCallbacks callbacks; private int status; - public GuiWorker(WSDLParser parser, IContextMenuInvocation invocation, WSDLParserTab tab, IBurpExtenderCallbacks callbacks) { + public Worker(WSDLParser parser, IContextMenuInvocation invocation, WSDLParserTab tab, IBurpExtenderCallbacks callbacks) { progressBar.setString("Parsing WSDL"); progressBar.setStringPainted(true); progressBar.setIndeterminate(true); dialog.getContentPane().add(progressBar); dialog.pack(); - dialog.setLocationRelativeTo(dialog.getParent()); + dialog.setLocationRelativeTo(tab.getUiComponent().getParent()); dialog.setModal(false); dialog.setVisible(true); this.parser = parser; @@ -106,6 +106,8 @@ protected void done() { } else if(status == -2){ JOptionPane.showMessageDialog(tab.getUiComponent().getParent(), "Error: Not a WSDL"); + } else if(status == -3){ + JOptionPane.showMessageDialog(tab.getUiComponent().getParent(), "Error: Can't Parse WSDL"); } else { final JTabbedPane parent = (JTabbedPane) tab.getUiComponent().getParent(); diff --git a/src/main/java/burp/WSDLParser.java b/src/main/java/burp/WSDLParser.java index 68eba79..105b9ec 100644 --- a/src/main/java/burp/WSDLParser.java +++ b/src/main/java/burp/WSDLParser.java @@ -43,6 +43,11 @@ public int parseWSDL(IHttpRequestResponse requestResponse, IBurpExtenderCallback IResponseInfo responseInfo = helpers.analyzeResponse(response); + if (!responseInfo.getStatedMimeType().contains("XML")){ + return -2; + + } + int bodyOffset = responseInfo.getBodyOffset(); String body = new String(response, bodyOffset, response.length - bodyOffset); @@ -52,11 +57,26 @@ public int parseWSDL(IHttpRequestResponse requestResponse, IBurpExtenderCallback return -2; } - Wsdl parser = Wsdl.parse(temp.toURI().toString()); + IRequestInfo request = helpers.analyzeRequest(requestResponse); + + String url = request.getUrl().toString(); + + String requestName = url.substring(url.lastIndexOf("/") + 1); + + if (requestName.contains(".")){ + requestName = requestName.substring(0,requestName.indexOf(".")); + } + Wsdl parser; + try { + parser = Wsdl.parse(temp.toURI().toString()); + } catch (Exception e){ + return -3; + } if (!temp.delete()){ System.out.println("Can't delete temp file"); } - WSDLTab wsdltab = tab.createTab(); + + WSDLTab wsdltab = tab.createTab(requestName); List bindings = parser.getBindings(); SoapBuilder builder; List operations; @@ -93,10 +113,8 @@ public int parseWSDL(IHttpRequestResponse requestResponse, IBurpExtenderCallback private File createTempFile(String body) { File temp = null; if (!body.contains("definitions")) { - System.out.println("WSDL definition not found"); return null; } - try { temp = File.createTempFile("temp", ".wsdl"); BufferedWriter bw = new BufferedWriter(new FileWriter(temp)); diff --git a/src/main/java/burp/WSDLParserTab.java b/src/main/java/burp/WSDLParserTab.java index 02bec3f..eea9bbf 100644 --- a/src/main/java/burp/WSDLParserTab.java +++ b/src/main/java/burp/WSDLParserTab.java @@ -22,9 +22,9 @@ public WSDLParserTab(final IBurpExtenderCallbacks callbacks) { } - public WSDLTab createTab() { + public WSDLTab createTab(String request) { - WSDLTab wsdltab = new WSDLTab((callbacks), tabs); + WSDLTab wsdltab = new WSDLTab((callbacks), tabs, request); tabs.setSelectedIndex(tabCount - removedTabCount); tabCount++; diff --git a/src/main/java/burp/WSDLTab.java b/src/main/java/burp/WSDLTab.java index 411b4c0..c49c6c0 100644 --- a/src/main/java/burp/WSDLTab.java +++ b/src/main/java/burp/WSDLTab.java @@ -18,7 +18,7 @@ public class WSDLTab extends AbstractTableModel implements IMessageEditorControl JSplitPane splitPane; JTabbedPane tabbedPane; - public WSDLTab(final IBurpExtenderCallbacks callbacks, JTabbedPane tabbedPane) { + public WSDLTab(final IBurpExtenderCallbacks callbacks, JTabbedPane tabbedPane, String request) { this.tabbedPane = tabbedPane; splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); wsdlTable = new WSDLTable(WSDLTab.this); @@ -32,7 +32,7 @@ public WSDLTab(final IBurpExtenderCallbacks callbacks, JTabbedPane tabbedPane) { tabs.addTab("Request", requestViewer.getComponent()); splitPane.setTopComponent(scrollPane); splitPane.setBottomComponent(tabs); - tabbedPane.add(Integer.toString(WSDLParserTab.tabCount), splitPane); + tabbedPane.add(request, splitPane); tabbedPane.setTabComponentAt(WSDLParserTab.tabCount - WSDLParserTab.removedTabCount, new ButtonTabComponent(tabbedPane)); }