44import java .io .PrintWriter ;
55import java .io .UnsupportedEncodingException ;
66import 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 ;
813import java .util .regex .Matcher ;
914import java .util .regex .Pattern ;
1015
1116import javax .swing .JMenu ;
1217import javax .swing .JMenuItem ;
18+
1319import com .alibaba .fastjson .JSON ;
1420
1521import U2C .JSONBeautifier ;
2935import hackbar .WebShell_Menu ;
3036import hackbar .XSS_Menu ;
3137import 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
3452public 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