Skip to content

Commit 65dc8ec

Browse files
authored
Merge pull request #13 from bit4woo/dev
to release v1.5
2 parents 5aacc5e + 247b526 commit 65dc8ec

File tree

13 files changed

+279
-229
lines changed

13 files changed

+279
-229
lines changed

README-zh.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@
8686
SQLMap-Options --- sqlmap命令的额外参数
8787
![runsqlmap](img/runsqlmap.gif)
8888

89+
9. Insert XSS
90+
91+
一键对当前数据包中非数字型和非cookie的参数插入XSS payload
92+
8993
##### Tab
9094

9195
1. U2C

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ A extension that add some small function[ one key to update cookie, one key add
4545

4646
One key to run sqlmap with current selected request.
4747

48+
9. Insert XSS
49+
50+
One key to insert XSS payload to parameters that not in cookie and not number.
51+
4852
##### Tab
4953

5054
1. U2C

pom.xml

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,15 @@
66
</properties>
77
<modelVersion>4.0.0</modelVersion>
88
<groupId>com.bit4woo.burp</groupId>
9-
<version>1.4</version>
9+
<version>1.5</version>
10+
11+
<repositories>
12+
<repository>
13+
<id>jitpack.io</id>
14+
<url>https://jitpack.io</url>
15+
</repository>
16+
</repositories>
17+
1018
<build>
1119
<sourceDirectory>src</sourceDirectory>
1220
<plugins>
@@ -60,6 +68,12 @@
6068
<version>1.7.22</version>
6169
</dependency>
6270

71+
<dependency>
72+
<groupId>com.github.bit4woo</groupId>
73+
<artifactId>burp-api-common</artifactId>
74+
<version>v0.0.6</version>
75+
</dependency>
76+
6377
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec <dependency>
6478
<groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.11</version>
6579
</dependency> -->
@@ -69,7 +83,7 @@
6983
<dependency>
7084
<groupId>com.alibaba</groupId>
7185
<artifactId>fastjson</artifactId>
72-
<version>1.2.51</version>
86+
<version>1.2.58</version>
7387
</dependency>
7488

7589
<!-- Files -->
@@ -107,6 +121,13 @@
107121
<version>2.3.1</version>
108122
</dependency>
109123

124+
<!-- https://mvnrepository.com/artifact/org.json/json -->
125+
<dependency>
126+
<groupId>org.json</groupId>
127+
<artifactId>json</artifactId>
128+
<version>20180813</version>
129+
</dependency>
130+
110131

111132
</dependencies>
112133

src/U2C/JSONBeautifier.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void setMessage(byte[] content, boolean isRequest)
6767
//Take the input, determine request/response, parse as json, then print prettily.
6868
Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().create();
6969
//Get only the JSON part of the content
70-
byte[] body = new Getter().getBody(isRequest, content);
70+
byte[] body = new Getter(helpers).getBody(isRequest, content);
7171
try {
7272
JsonParser jp = new JsonParser();
7373
JsonElement je = jp.parse(new String(body));

src/U2C/U2CTab.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.apache.commons.text.StringEscapeUtils;
88

9+
import burp.BurpExtender;
910
import burp.IBurpExtenderCallbacks;
1011
import burp.IExtensionHelpers;
1112
import burp.IMessageEditorController;
@@ -38,6 +39,13 @@ public Component getUiComponent()
3839
@Override
3940
public boolean isEnabled(byte[] content, boolean isRequest)
4041
{
42+
try {
43+
if (BurpExtender.jsonBeautifier.isEnabled(content, isRequest)) {
44+
return false;
45+
}
46+
} catch (Exception e) {
47+
48+
}
4149

4250
if(content!=null && !isRequest && needtoconvert(new String(content))) {
4351
originContent = content;

src/burp/BurpExtender.java

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
import java.io.PrintWriter;
55
import java.io.UnsupportedEncodingException;
66
import java.net.URL;
7-
import java.util.*;
7+
import java.util.ArrayList;
8+
import java.util.Arrays;
9+
import java.util.HashMap;
10+
import java.util.Iterator;
11+
import java.util.LinkedHashMap;
12+
import java.util.List;
813
import java.util.regex.Matcher;
914
import java.util.regex.Pattern;
1015

1116
import javax.swing.JMenu;
1217
import javax.swing.JMenuItem;
18+
1319
import com.alibaba.fastjson.JSON;
1420

1521
import U2C.JSONBeautifier;
@@ -29,7 +35,19 @@
2935
import hackbar.WebShell_Menu;
3036
import hackbar.XSS_Menu;
3137
import hackbar.XXE_Menu;
32-
import knife.*;
38+
import knife.AddHostToScopeMenu;
39+
import knife.ChunkedEncodingMenu;
40+
import knife.CookieUtils;
41+
import knife.DismissMenu;
42+
import knife.HeaderEntry;
43+
import knife.InsertXSSMenu;
44+
import knife.OpenWithBrowserMenu;
45+
import knife.RunSQLMap;
46+
import knife.SetCookieMenu;
47+
import knife.SetCookieWithHistoryMenu;
48+
import knife.UpdateCookieMenu;
49+
import knife.UpdateCookieWithHistoryMenu;
50+
import knife.UpdateHeaderMenu;
3351

3452
public class BurpExtender extends GUI implements IBurpExtender, IContextMenuFactory, ITab, IHttpListener,IProxyListener,IExtensionStateListener {
3553

@@ -44,6 +62,7 @@ public class BurpExtender extends GUI implements IBurpExtender, IContextMenuFact
4462
public PrintWriter stderr;
4563
public IContextMenuInvocation context;
4664
public int proxyServerIndex=-1;
65+
public static JSONBeautifier jsonBeautifier;
4766

4867

4968
@Override
@@ -67,11 +86,14 @@ public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {
6786
}
6887
table.setupTypeColumn();//call this function must after table data loaded !!!!
6988

89+
90+
jsonBeautifier = new JSONBeautifier(null, false, helpers, callbacks);
91+
7092
//各项数据初始化完成后在进行这些注册操作,避免插件加载时的空指针异常
7193
callbacks.setExtensionName(this.ExtensionName);
7294
callbacks.registerContextMenuFactory(this);// for menus
7395
callbacks.registerMessageEditorTabFactory(new U2CTab(null, false, helpers, callbacks));// for U2C
74-
callbacks.registerMessageEditorTabFactory(new JSONBeautifier(null, false, helpers, callbacks));
96+
callbacks.registerMessageEditorTabFactory(jsonBeautifier);
7597
callbacks.addSuiteTab(BurpExtender.this);
7698
callbacks.registerHttpListener(this);
7799
callbacks.registerProxyListener(this);
@@ -100,6 +122,10 @@ public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) {
100122

101123
if (context == IContextMenuInvocation.CONTEXT_MESSAGE_EDITOR_REQUEST) {
102124

125+
if (this.tableModel.getConfigByKey("XSS-Payload")!=null){
126+
menu_list.add(new InsertXSSMenu(this));
127+
}
128+
103129
menu_list.add(new UpdateCookieMenu(this));
104130
if (this.config.getUsedCookie()!=null){
105131
menu_list.add(new UpdateCookieWithHistoryMenu(this));
@@ -200,7 +226,9 @@ public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessa
200226
if (cookieToSetMap != null && !cookieToSetMap.isEmpty()){//第二次调用如果cookie不为空,就走到这里
201227

202228
IHttpRequestResponse messageInfo = message.getMessageInfo();
203-
String CurrentUrl = messageInfo.getHttpService().toString();
229+
//String CurrentUrl = messageInfo.getHttpService().toString();//这个方法获取到的url包含默认端口!
230+
Getter getter = new Getter(helpers);
231+
String CurrentUrl = getter.getShortUrl(messageInfo);
204232
//stderr.println(CurrentUrl+" "+targetUrl);
205233
HeaderEntry cookieToSet = cookieToSetMap.get(CurrentUrl);
206234
if (cookieToSet != null){
@@ -212,7 +240,6 @@ public void processProxyMessage(boolean messageIsRequest, IInterceptedProxyMessa
212240
byte[] newRequest = CookieUtils.updateCookie(messageInfo,cookieValue);
213241
messageInfo.setRequest(newRequest);
214242
}else {
215-
Getter getter = new Getter(helpers);
216243
List<String> responseHeaders = getter.getHeaderList(false,messageInfo);
217244
byte[] responseBody = getter.getBody(false,messageInfo);
218245
List<String> setHeaders = GetSetCookieHeaders(cookieValue);
@@ -240,10 +267,7 @@ public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequ
240267

241268
URL url = getter.getURL(messageInfo);
242269
String host = getter.getHost(messageInfo);
243-
String path = url.getPath();
244-
String firstLineOfHeader = getter.getHeaderFirstLine(messageIsRequest,messageInfo);
245-
LinkedHashMap headers = getter.getHeaderHashMap(messageIsRequest,messageInfo);
246-
IHttpService service = messageInfo.getHttpService();
270+
LinkedHashMap<String, String> headers = getter.getHeaderMap(messageIsRequest,messageInfo);
247271
byte[] body = getter.getBody(messageIsRequest,messageInfo);
248272

249273
boolean isRequestChanged = false;
@@ -332,8 +356,9 @@ public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequ
332356
int port = Integer.parseInt(proxyList.get(proxyServerIndex).split(":")[1].trim());
333357

334358
messageInfo.setHttpService(helpers.buildHttpService(proxyhost, port, messageInfo.getHttpService().getProtocol()));
335-
336-
firstLineOfHeader = firstLineOfHeader.replaceFirst(path, url.toString().split("\\?",0)[0]);
359+
360+
String method = helpers.analyzeRequest(messageInfo).getMethod();
361+
headers.put(method, url.toString());
337362
isRequestChanged = true;
338363
//success or failed,need to check?
339364
}
@@ -344,7 +369,7 @@ public void processHttpMessage(int toolFlag, boolean messageIsRequest, IHttpRequ
344369
}
345370
if (isRequestChanged){
346371
//set final request
347-
List<String> headerList = getter.HeaderMapToList(firstLineOfHeader,headers);
372+
List<String> headerList = getter.headerMapToHeaderList(headers);
348373
messageInfo.setRequest(helpers.buildHttpMessage(headerList,body));
349374
}
350375

@@ -396,5 +421,4 @@ public boolean isDismissedHost(String host){
396421
return false;
397422
}
398423

399-
400424
}

0 commit comments

Comments
 (0)