Skip to content

Commit f02f427

Browse files
committed
added burp headers for xsd requests
1 parent 24f7f50 commit f02f427

File tree

3 files changed

+34
-43
lines changed

3 files changed

+34
-43
lines changed

src/main/java/burp/WSDLParser.java

+6-39
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,12 @@
77
import org.xml.sax.SAXException;
88

99
import javax.swing.*;
10-
import javax.swing.ScrollPaneConstants;
1110
import javax.wsdl.WSDLException;
1211
import javax.xml.namespace.QName;
1312
import javax.xml.parsers.ParserConfigurationException;
1413
import java.awt.*;
15-
import java.io.BufferedWriter;
16-
import java.io.File;
17-
import java.io.FileWriter;
1814
import java.io.IOException;
19-
import java.net.URL;
20-
import java.net.URLConnection;
15+
import java.util.ArrayList;
2116
import java.util.Iterator;
2217
import java.util.List;
2318
import java.util.concurrent.ExecutionException;
@@ -26,6 +21,7 @@ public class WSDLParser {
2621

2722
private IExtensionHelpers helpers;
2823
private WSDLParserTab tab;
24+
public static List<String> headers;
2925

3026
public WSDLParser(IExtensionHelpers helpers, WSDLParserTab tab) {
3127
this.helpers = helpers;
@@ -55,17 +51,8 @@ public int parseWSDL(IHttpRequestResponse requestResponse, IBurpExtenderCallback
5551

5652
}
5753

58-
int bodyOffset = responseInfo.getBodyOffset();
59-
60-
String body = new String(response, bodyOffset, response.length - bodyOffset);
61-
62-
File temp = createTempFile(body);
63-
if (temp == null) {
64-
JOptionPane.showMessageDialog(tab.getUiComponent().getParent(), "Not a WSDL", "Error", JOptionPane.ERROR_MESSAGE);
65-
return -2;
66-
}
67-
6854
IRequestInfo request = helpers.analyzeRequest(requestResponse);
55+
headers = request.getHeaders();
6956

7057
String url = request.getUrl().toString();
7158

@@ -79,8 +66,7 @@ public int parseWSDL(IHttpRequestResponse requestResponse, IBurpExtenderCallback
7966
}
8067
Wsdl parser;
8168
try {
82-
URLConnection a = new URL(url.toString()).openConnection();
83-
parser = Wsdl.parse(url.toString());
69+
parser = Wsdl.parse(url);
8470
} catch (Exception e){
8571
StringBuilder sb = new StringBuilder();
8672
sb.append(e.getMessage());
@@ -103,9 +89,6 @@ public Dimension getPreferredSize() {
10389
tab.getUiComponent().getParent(), jsp, "Error", JOptionPane.ERROR_MESSAGE);
10490
return -3;
10591
}
106-
if (!temp.delete()){
107-
System.out.println("Can't delete temp file");
108-
}
10992

11093
WSDLTab wsdltab = tab.createTab(requestName);
11194
List<QName> bindings;
@@ -158,30 +141,12 @@ public Dimension getPreferredSize() {
158141
return 0;
159142
}
160143

161-
private File createTempFile(String body) {
162-
File temp = null;
163-
if (!body.contains("definitions")) {
164-
return null;
165-
}
166-
try {
167-
temp = File.createTempFile("temp", ".wsdl");
168-
BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
169-
170-
bw.write(body);
171-
bw.close();
172-
} catch (Exception e) {
173-
e.printStackTrace();
174-
}
175-
return temp;
176-
}
177-
178144
private byte[] createRequest(IHttpRequestResponse requestResponse, SoapBuilder builder, SoapOperation operation) {
179145
SoapContext context = SoapContext.builder()
180146
.alwaysBuildHeaders(true).exampleContent(true).typeComments(true).buildOptional(true).build();
181147
String message = builder.buildInputMessage(operation, context);
182148
String host = getHost(builder.getServiceUrls().get(0));
183149
String endpointURL = getEndPoint(builder.getServiceUrls().get(0), host);
184-
185150
List<String> headers;
186151

187152
headers = helpers.analyzeRequest(requestResponse).getHeaders();
@@ -199,9 +164,11 @@ private byte[] createRequest(IHttpRequestResponse requestResponse, SoapBuilder b
199164
iter.remove();
200165
}
201166
}
167+
headers.add("SOAPAction: " + operation.getOperationName());
202168
headers.add("Content-Type: text/xml;charset=UTF-8");
203169
headers.add("Host: " + host);
204170

171+
205172
return helpers.buildHttpMessage(headers, message.getBytes());
206173
}
207174

src/main/java/com/ibm/wsdl/xml/WSDLReaderImpl.java

+27-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import java.util.*;
1010
import javax.xml.namespace.*;
1111
import javax.xml.parsers.*;
12+
13+
import burp.WSDLParser;
14+
import com.sun.xml.internal.ws.api.model.wsdl.WSDLModel;
1215
import org.w3c.dom.*;
1316
import org.xml.sax.*;
1417
import javax.wsdl.*;
@@ -410,7 +413,14 @@ protected Import parseImport(Element importEl,
410413
if (importedDef == null)
411414
{
412415
URLConnection connection = new URL(url.toString()).openConnection();
413-
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
416+
for(Iterator<String> i = WSDLParser.headers.iterator(); i.hasNext(); ) {
417+
String item = i.next();
418+
if (item.contains(":") && !item.contains("Accept-Encoding:")) {
419+
String headerName = item.split(":")[0];
420+
String headerValue = item.split(":")[1];
421+
connection.setRequestProperty(headerName, headerValue);
422+
}
423+
}
414424
connection.connect();
415425
inputStream = connection.getInputStream();
416426

@@ -808,7 +818,14 @@ protected ExtensibilityElement parseSchema( Class parentType,
808818
{
809819
// We haven't read this schema in before so do it now
810820
URLConnection connection = new URL(url.toString()).openConnection();
811-
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
821+
for(Iterator<String> i = WSDLParser.headers.iterator(); i.hasNext(); ) {
822+
String item = i.next();
823+
if (item.contains(":") && !item.contains("Accept-Encoding:")) {
824+
String headerName = item.split(":")[0];
825+
String headerValue = item.split(":")[1];
826+
connection.setRequestProperty(headerName, headerValue);
827+
}
828+
}
812829
connection.connect();
813830
inputStream = connection.getInputStream();
814831

@@ -2276,7 +2293,14 @@ public Definition readWSDL(String contextURI, String wsdlURI)
22762293
: null;
22772294
URL url = StringUtils.getURL(contextURL, wsdlURI);
22782295
URLConnection connection = new URL(url.toString()).openConnection();
2279-
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
2296+
for(Iterator<String> i = WSDLParser.headers.iterator(); i.hasNext(); ) {
2297+
String item = i.next();
2298+
if (item.contains(":") && !item.contains("Accept-Encoding:")) {
2299+
String headerName = item.split(":")[0];
2300+
String headerValue = item.split(":")[1];
2301+
connection.setRequestProperty(headerName, headerValue);
2302+
}
2303+
}
22802304
connection.connect();
22812305
InputStream inputStream = connection.getInputStream();
22822306
InputSource inputSource = new InputSource(inputStream);

src/main/java/org/reficio/ws/legacy/SchemaUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public static void getSchemas(String wsdlUrl, Map<String, XmlObject> existing, S
243243
options.setErrorListener(errorList);
244244
options.setSaveSyntheticDocumentElement(new QName(Constants.XSD_NS, "schema"));
245245
XmlObject xmlObject;
246-
if(wsdlUrl.contains("wsdl")){
246+
if(wsdlUrl.toLowerCase().contains("wsdl")){
247247
xmlObject = XmlObject.Factory.parse(new URL(wsdlUrl), options);
248248
} else {
249249
xmlObject = SchemaDocument.Factory.parse(new URL(wsdlUrl), options);

0 commit comments

Comments
 (0)