buby 1.3.3-java → 1.5.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/README.rdoc +28 -14
  2. data/Rakefile +96 -6
  3. data/VERSION.yml +5 -0
  4. data/bin/buby +2 -0
  5. data/buby.gemspec +102 -17
  6. data/{java/src → ext/buby/burp}/BurpExtender.java +189 -29
  7. data/ext/burp_interfaces/burp/IBurpExtender.java +31 -0
  8. data/ext/burp_interfaces/burp/IBurpExtenderCallbacks.java +785 -0
  9. data/ext/burp_interfaces/burp/IContextMenuFactory.java +38 -0
  10. data/ext/burp_interfaces/burp/IContextMenuInvocation.java +156 -0
  11. data/ext/burp_interfaces/burp/ICookie.java +53 -0
  12. data/ext/burp_interfaces/burp/IExtensionHelpers.java +352 -0
  13. data/ext/burp_interfaces/burp/IExtensionStateListener.java +27 -0
  14. data/ext/burp_interfaces/burp/IHttpListener.java +37 -0
  15. data/ext/burp_interfaces/burp/IHttpRequestResponse.java +102 -0
  16. data/ext/burp_interfaces/burp/IHttpRequestResponsePersisted.java +26 -0
  17. data/ext/burp_interfaces/burp/IHttpRequestResponseWithMarkers.java +44 -0
  18. data/ext/burp_interfaces/burp/IHttpService.java +39 -0
  19. data/ext/burp_interfaces/burp/IInterceptedProxyMessage.java +116 -0
  20. data/ext/burp_interfaces/burp/IIntruderAttack.java +31 -0
  21. data/ext/burp_interfaces/burp/IIntruderPayloadGenerator.java +50 -0
  22. data/ext/burp_interfaces/burp/IIntruderPayloadGeneratorFactory.java +40 -0
  23. data/ext/burp_interfaces/burp/IIntruderPayloadProcessor.java +45 -0
  24. data/{java/src → ext/burp_interfaces}/burp/IMenuItemHandler.java +36 -40
  25. data/ext/burp_interfaces/burp/IMessageEditor.java +64 -0
  26. data/ext/burp_interfaces/burp/IMessageEditorController.java +49 -0
  27. data/ext/burp_interfaces/burp/IMessageEditorTab.java +102 -0
  28. data/ext/burp_interfaces/burp/IMessageEditorTabFactory.java +38 -0
  29. data/ext/burp_interfaces/burp/IParameter.java +104 -0
  30. data/ext/burp_interfaces/burp/IProxyListener.java +37 -0
  31. data/ext/burp_interfaces/burp/IRequestInfo.java +95 -0
  32. data/ext/burp_interfaces/burp/IResponseInfo.java +54 -0
  33. data/ext/burp_interfaces/burp/IScanIssue.java +120 -0
  34. data/ext/burp_interfaces/burp/IScanQueueItem.java +80 -0
  35. data/ext/burp_interfaces/burp/IScannerCheck.java +89 -0
  36. data/ext/burp_interfaces/burp/IScannerInsertionPoint.java +156 -0
  37. data/ext/burp_interfaces/burp/IScannerInsertionPointProvider.java +38 -0
  38. data/ext/burp_interfaces/burp/IScannerListener.java +30 -0
  39. data/ext/burp_interfaces/burp/IScopeChangeListener.java +25 -0
  40. data/ext/burp_interfaces/burp/ISessionHandlingAction.java +51 -0
  41. data/ext/burp_interfaces/burp/ITab.java +38 -0
  42. data/ext/burp_interfaces/burp/ITempFile.java +33 -0
  43. data/ext/burp_interfaces/burp/ITextEditor.java +90 -0
  44. data/lib/buby/burp_extender/console_frame.rb +33 -0
  45. data/lib/buby/burp_extender/console_pane.rb +26 -0
  46. data/lib/buby/burp_extender/console_tab.rb +15 -0
  47. data/lib/buby/burp_extender/context_menu.rb +29 -0
  48. data/lib/buby/burp_extender/context_menu_factory.rb +17 -0
  49. data/lib/buby/burp_extender/context_menu_item.rb +13 -0
  50. data/lib/buby/burp_extender/jcheck_box_menu_item.rb +12 -0
  51. data/lib/buby/burp_extender/jmenu.rb +11 -0
  52. data/lib/buby/burp_extender/jmenu_item.rb +12 -0
  53. data/lib/buby/burp_extender/menu.rb +11 -0
  54. data/lib/buby/burp_extender/menu_item.rb +12 -0
  55. data/lib/buby/burp_extender.rb +339 -0
  56. data/lib/buby/context_menu_factory.rb +35 -0
  57. data/lib/buby/cookie.rb +37 -0
  58. data/lib/buby/extender.rb +156 -0
  59. data/lib/buby/http_listener.rb +29 -0
  60. data/lib/buby/{extends → implants}/buby_array_wrapper.rb +0 -0
  61. data/lib/buby/implants/context_menu_invocation.rb +113 -0
  62. data/lib/buby/implants/cookie.rb +47 -0
  63. data/lib/buby/implants/extension_helpers.rb +286 -0
  64. data/lib/buby/{extends → implants}/http_request_response.rb +8 -1
  65. data/lib/buby/implants/intercepted_proxy_message.rb +53 -0
  66. data/lib/buby/implants/intruder_attack.rb +42 -0
  67. data/lib/buby/implants/jruby.rb +64 -0
  68. data/lib/buby/implants/message_editor.rb +70 -0
  69. data/lib/buby/implants/message_editor_controller.rb +60 -0
  70. data/lib/buby/implants/parameter.rb +84 -0
  71. data/lib/buby/implants/request_info.rb +47 -0
  72. data/lib/buby/implants/response_info.rb +44 -0
  73. data/lib/buby/{extends → implants}/scan_issue.rb +1 -2
  74. data/lib/buby/implants/scan_queue_item.rb +53 -0
  75. data/lib/buby/implants/scanner_insertion_point.rb +92 -0
  76. data/lib/buby/implants/temp_file.rb +43 -0
  77. data/lib/buby/implants/text_editor.rb +63 -0
  78. data/lib/buby/implants.rb +28 -0
  79. data/lib/buby/intruder_payload_generator.rb +60 -0
  80. data/lib/buby/intruder_payload_generator_factory.rb +32 -0
  81. data/lib/buby/intruder_payload_processor.rb +38 -0
  82. data/lib/buby/message_editor_controller.rb +41 -0
  83. data/lib/buby/message_editor_tab.rb +98 -0
  84. data/lib/buby/message_editor_tab_factory.rb +28 -0
  85. data/lib/buby/parameter/base.rb +40 -0
  86. data/lib/buby/parameter/body.rb +7 -0
  87. data/lib/buby/parameter/cookie.rb +7 -0
  88. data/lib/buby/parameter/url.rb +7 -0
  89. data/lib/buby/parameter.rb +15 -0
  90. data/lib/buby/proxy_listener.rb +26 -0
  91. data/lib/buby/scan_issue.rb +112 -0
  92. data/lib/buby/scanner_check.rb +84 -0
  93. data/lib/buby/scanner_insertion_point.rb +118 -0
  94. data/lib/buby/scanner_insertion_point_provider.rb +27 -0
  95. data/lib/buby/scanner_listener.rb +22 -0
  96. data/lib/buby/scope_change_listener.rb +19 -0
  97. data/lib/buby/session_handling_action.rb +43 -0
  98. data/lib/buby/tab.rb +37 -0
  99. data/lib/buby/version.rb +9 -0
  100. data/lib/buby.rb +892 -101
  101. metadata +118 -22
  102. data/VERSION +0 -1
  103. data/java/buby.jar +0 -0
  104. data/java/src/burp/IBurpExtender.java +0 -180
  105. data/java/src/burp/IBurpExtenderCallbacks.java +0 -373
  106. data/java/src/burp/IHttpRequestResponse.java +0 -156
  107. data/java/src/burp/IScanIssue.java +0 -106
  108. data/java/src/burp/IScanQueueItem.java +0 -76
  109. data/lib/buby/extends.rb +0 -4
@@ -0,0 +1,38 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IContextMenuFactory.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.util.List;
13
+ import javax.swing.JMenuItem;
14
+
15
+ /**
16
+ * Extensions can implement this interface and then call
17
+ * <code>IBurpExtenderCallbacks.registerContextMenuFactory()</code> to register
18
+ * a factory for custom context menu items.
19
+ */
20
+ public interface IContextMenuFactory
21
+ {
22
+ /**
23
+ * This method will be called by Burp when the user invokes a context menu
24
+ * anywhere within Burp. The factory can then provide any custom context
25
+ * menu items that should be displayed in the context menu, based on the
26
+ * details of the menu invocation.
27
+ *
28
+ * @param invocation An object that implements the
29
+ * <code>IMessageEditorTabFactory</code> interface, which the extension can
30
+ * query to obtain details of the context menu invocation.
31
+ * @return A list of custom menu items (which may include sub-menus,
32
+ * checkbox menu items, etc.) that should be displayed. Extensions may
33
+ * return
34
+ * <code>null</code> from this method, to indicate that no menu items are
35
+ * required.
36
+ */
37
+ List<JMenuItem> createMenuItems(IContextMenuInvocation invocation);
38
+ }
@@ -0,0 +1,156 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IContextMenuInvocation.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.awt.event.InputEvent;
13
+
14
+ /**
15
+ * This interface is used when Burp calls into an extension-provided
16
+ * <code>IContextMenuFactory</code> with details of a context menu invocation.
17
+ * The custom context menu factory can query this interface to obtain details of
18
+ * the invocation event, in order to determine what menu items should be
19
+ * displayed.
20
+ */
21
+ public interface IContextMenuInvocation
22
+ {
23
+ /**
24
+ * Used to indicate that the context menu is being invoked in a request
25
+ * editor.
26
+ */
27
+ static final byte CONTEXT_MESSAGE_EDITOR_REQUEST = 0;
28
+ /**
29
+ * Used to indicate that the context menu is being invoked in a response
30
+ * editor.
31
+ */
32
+ static final byte CONTEXT_MESSAGE_EDITOR_RESPONSE = 1;
33
+ /**
34
+ * Used to indicate that the context menu is being invoked in a non-editable
35
+ * request viewer.
36
+ */
37
+ static final byte CONTEXT_MESSAGE_VIEWER_REQUEST = 2;
38
+ /**
39
+ * Used to indicate that the context menu is being invoked in a non-editable
40
+ * response viewer.
41
+ */
42
+ static final byte CONTEXT_MESSAGE_VIEWER_RESPONSE = 3;
43
+ /**
44
+ * Used to indicate that the context menu is being invoked in the Target
45
+ * site map tree.
46
+ */
47
+ static final byte CONTEXT_TARGET_SITE_MAP_TREE = 4;
48
+ /**
49
+ * Used to indicate that the context menu is being invoked in the Target
50
+ * site map table.
51
+ */
52
+ static final byte CONTEXT_TARGET_SITE_MAP_TABLE = 5;
53
+ /**
54
+ * Used to indicate that the context menu is being invoked in the Proxy
55
+ * history.
56
+ */
57
+ static final byte CONTEXT_PROXY_HISTORY = 6;
58
+ /**
59
+ * Used to indicate that the context menu is being invoked in the Scanner
60
+ * results.
61
+ */
62
+ static final byte CONTEXT_SCANNER_RESULTS = 7;
63
+ /**
64
+ * Used to indicate that the context menu is being invoked in the Intruder
65
+ * payload positions editor.
66
+ */
67
+ static final byte CONTEXT_INTRUDER_PAYLOAD_POSITIONS = 8;
68
+ /**
69
+ * Used to indicate that the context menu is being invoked in an Intruder
70
+ * attack results.
71
+ */
72
+ static final byte CONTEXT_INTRUDER_ATTACK_RESULTS = 9;
73
+ /**
74
+ * Used to indicate that the context menu is being invoked in a search
75
+ * results window.
76
+ */
77
+ static final byte CONTEXT_SEARCH_RESULTS = 10;
78
+
79
+ /**
80
+ * This method can be used to retrieve the native Java input event that was
81
+ * the trigger for the context menu invocation.
82
+ *
83
+ * @return The <code>InputEvent</code> that was the trigger for the context
84
+ * menu invocation.
85
+ */
86
+ InputEvent getInputEvent();
87
+
88
+ /**
89
+ * This method can be used to retrieve the Burp tool within which the
90
+ * context menu was invoked.
91
+ *
92
+ * @return A flag indicating the Burp tool within which the context menu was
93
+ * invoked. Burp tool flags are defined in the
94
+ * <code>IBurpExtenderCallbacks</code> interface.
95
+ */
96
+ int getToolFlag();
97
+
98
+ /**
99
+ * This method can be used to retrieve the context within which the menu was
100
+ * invoked.
101
+ *
102
+ * @return An index indicating the context within which the menu was
103
+ * invoked. The indices used are defined within this interface.
104
+ */
105
+ byte getInvocationContext();
106
+
107
+ /**
108
+ * This method can be used to retrieve the bounds of the user's selection
109
+ * into the current message, if applicable.
110
+ *
111
+ * @return An int[2] array containing the start and end offsets of the
112
+ * user's selection in the current message. If the user has not made any
113
+ * selection in the current message, both offsets indicate the position of
114
+ * the caret within the editor. If the menu is not being invoked from a
115
+ * message editor, the method returns <code>null</code>.
116
+ */
117
+ int[] getSelectionBounds();
118
+
119
+ /**
120
+ * This method can be used to retrieve details of the HTTP requests /
121
+ * responses that were shown or selected by the user when the context menu
122
+ * was invoked.
123
+ *
124
+ * <b>Note:</b> For performance reasons, the objects returned from this
125
+ * method are tied to the originating context of the messages within the
126
+ * Burp UI. For example, if a context menu is invoked on the Proxy intercept
127
+ * panel, then the
128
+ * <code>IHttpRequestResponse</code> returned by this method will reflect
129
+ * the current contents of the interception panel, and this will change when
130
+ * the current message has been forwarded or dropped. If your extension
131
+ * needs to store details of the message for which the context menu has been
132
+ * invoked, then you should query those details from the
133
+ * <code>IHttpRequestResponse</code> at the time of invocation, or you
134
+ * should use
135
+ * <code>IBurpExtenderCallbacks.saveBuffersToTempFiles()</code> to create a
136
+ * persistent read-only copy of the
137
+ * <code>IHttpRequestResponse</code>.
138
+ *
139
+ * @return An array of <code>IHttpRequestResponse</code> objects
140
+ * representing the items that were shown or selected by the user when the
141
+ * context menu was invoked. This method returns <code>null</code> if no
142
+ * messages are applicable to the invocation.
143
+ */
144
+ IHttpRequestResponse[] getSelectedMessages();
145
+
146
+ /**
147
+ * This method can be used to retrieve details of the Scanner issues that
148
+ * were selected by the user when the context menu was invoked.
149
+ *
150
+ * @return An array of <code>IScanIssue</code> objects representing the
151
+ * issues that were selected by the user when the context menu was invoked.
152
+ * This method returns <code>null</code> if no Scanner issues are applicable
153
+ * to the invocation.
154
+ */
155
+ IScanIssue[] getSelectedIssues();
156
+ }
@@ -0,0 +1,53 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)ICookie.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.util.Date;
13
+
14
+ /**
15
+ * This interface is used to hold details about an HTTP cookie.
16
+ */
17
+ public interface ICookie
18
+ {
19
+ /**
20
+ * This method is used to retrieve the domain for which the cookie is in
21
+ * scope.
22
+ *
23
+ * @return The domain for which the cookie is in scope. <b>Note:</b> For
24
+ * cookies that have been analyzed from responses (by calling
25
+ * <code>IExtensionHelpers.analyzeResponse()</code> and then
26
+ * <code>IResponseInfo.getCookies()</code>, the domain will be
27
+ * <code>null</code> if the response did not explicitly set a domain
28
+ * attribute for the cookie.
29
+ */
30
+ String getDomain();
31
+
32
+ /**
33
+ * This method is used to retrieve the expiration time for the cookie.
34
+ *
35
+ * @return The expiration time for the cookie, or
36
+ * <code>null</code> if none is set (i.e., for non-persistent session
37
+ * cookies).
38
+ */
39
+ Date getExpiration();
40
+
41
+ /**
42
+ * This method is used to retrieve the name of the cookie.
43
+ *
44
+ * @return The name of the cookie.
45
+ */
46
+ String getName();
47
+
48
+ /**
49
+ * This method is used to retrieve the value of the cookie.
50
+ * @return The value of the cookie.
51
+ */
52
+ String getValue();
53
+ }
@@ -0,0 +1,352 @@
1
+ package burp;
2
+
3
+ /*
4
+ * @(#)IExtensionHelpers.java
5
+ *
6
+ * Copyright PortSwigger Ltd. All rights reserved.
7
+ *
8
+ * This code may be used to extend the functionality of Burp Suite Free Edition
9
+ * and Burp Suite Professional, provided that this usage does not violate the
10
+ * license terms for those products.
11
+ */
12
+ import java.net.URL;
13
+ import java.util.List;
14
+
15
+ /**
16
+ * This interface contains a number of helper methods, which extensions can use
17
+ * to assist with various common tasks that arise for Burp extensions.
18
+ *
19
+ * Extensions can call
20
+ * <code>IBurpExtenderCallbacks.getHelpers</code> to obtain an instance of this
21
+ * interface.
22
+ */
23
+ public interface IExtensionHelpers
24
+ {
25
+ /**
26
+ * This method can be used to analyze an HTTP request, and obtain various
27
+ * key details about it.
28
+ *
29
+ * @param request An
30
+ * <code>IHttpRequestResponse</code> object containing the request to be
31
+ * analyzed.
32
+ * @return An
33
+ * <code>IRequestInfo</code> object that can be queried to obtain details
34
+ * about the request.
35
+ */
36
+ IRequestInfo analyzeRequest(IHttpRequestResponse request);
37
+
38
+ /**
39
+ * This method can be used to analyze an HTTP request, and obtain various
40
+ * key details about it.
41
+ *
42
+ * @param httpService The HTTP service associated with the request. This is
43
+ * optional and may be
44
+ * <code>null</code>, in which case the resulting
45
+ * <code>IRequestInfo</code> object will not include the full request URL.
46
+ * @param request The request to be analyzed.
47
+ * @return An
48
+ * <code>IRequestInfo</code> object that can be queried to obtain details
49
+ * about the request.
50
+ */
51
+ IRequestInfo analyzeRequest(IHttpService httpService, byte[] request);
52
+
53
+ /**
54
+ * This method can be used to analyze an HTTP request, and obtain various
55
+ * key details about it. The resulting
56
+ * <code>IRequestInfo</code> object will not include the full request URL.
57
+ * To obtain the full URL, use one of the other overloaded
58
+ * <code>analyzeRequest()</code> methods.
59
+ *
60
+ * @param request The request to be analyzed.
61
+ * @return An
62
+ * <code>IRequestInfo</code> object that can be queried to obtain details
63
+ * about the request.
64
+ */
65
+ IRequestInfo analyzeRequest(byte[] request);
66
+
67
+ /**
68
+ * This method can be used to analyze an HTTP response, and obtain various
69
+ * key details about it.
70
+ *
71
+ * @param response The response to be analyzed.
72
+ * @return An
73
+ * <code>IResponseInfo</code> object that can be queried to obtain details
74
+ * about the response.
75
+ */
76
+ IResponseInfo analyzeResponse(byte[] response);
77
+
78
+ /**
79
+ * This method can be used to retrieve details of a specified parameter
80
+ * within an HTTP request. <b>Note:</b> Use
81
+ * <code>analyzeRequest()</code> to obtain details of all parameters within
82
+ * the request.
83
+ *
84
+ * @param request The request to be inspected for the specified parameter.
85
+ * @param parameterName The name of the parameter to retrieve.
86
+ * @return An
87
+ * <code>IParameter</code> object that can be queried to obtain details
88
+ * about the parameter, or
89
+ * <code>null</code> if the parameter was not found.
90
+ */
91
+ IParameter getRequestParameter(byte[] request, String parameterName);
92
+
93
+ /**
94
+ * This method can be used to URL-decode the specified data.
95
+ *
96
+ * @param data The data to be decoded.
97
+ * @return The decoded data.
98
+ */
99
+ String urlDecode(String data);
100
+
101
+ /**
102
+ * This method can be used to URL-encode the specified data. Any characters
103
+ * that do not need to be encoded within HTTP requests are not encoded.
104
+ *
105
+ * @param data The data to be encoded.
106
+ * @return The encoded data.
107
+ */
108
+ String urlEncode(String data);
109
+
110
+ /**
111
+ * This method can be used to URL-decode the specified data.
112
+ *
113
+ * @param data The data to be decoded.
114
+ * @return The decoded data.
115
+ */
116
+ byte[] urlDecode(byte[] data);
117
+
118
+ /**
119
+ * This method can be used to URL-encode the specified data. Any characters
120
+ * that do not need to be encoded within HTTP requests are not encoded.
121
+ *
122
+ * @param data The data to be encoded.
123
+ * @return The encoded data.
124
+ */
125
+ byte[] urlEncode(byte[] data);
126
+
127
+ /**
128
+ * This method can be used to Base64-decode the specified data.
129
+ *
130
+ * @param data The data to be decoded.
131
+ * @return The decoded data.
132
+ */
133
+ byte[] base64Decode(String data);
134
+
135
+ /**
136
+ * This method can be used to Base64-decode the specified data.
137
+ *
138
+ * @param data The data to be decoded.
139
+ * @return The decoded data.
140
+ */
141
+ byte[] base64Decode(byte[] data);
142
+
143
+ /**
144
+ * This method can be used to Base64-encode the specified data.
145
+ *
146
+ * @param data The data to be encoded.
147
+ * @return The encoded data.
148
+ */
149
+ String base64Encode(String data);
150
+
151
+ /**
152
+ * This method can be used to Base64-encode the specified data.
153
+ *
154
+ * @param data The data to be encoded.
155
+ * @return The encoded data.
156
+ */
157
+ String base64Encode(byte[] data);
158
+
159
+ /**
160
+ * This method can be used to convert data from String form into an array of
161
+ * bytes. The conversion does not reflect any particular character set, and
162
+ * a character with the hex representation 0xWXYZ will always be converted
163
+ * into a byte with the representation 0xYZ. It performs the opposite
164
+ * conversion to the method
165
+ * <code>bytesToString()</code>, and byte-based data that is converted to a
166
+ * String and back again using these two methods is guaranteed to retain its
167
+ * integrity (which may not be the case with conversions that reflect a
168
+ * given character set).
169
+ *
170
+ * @param data The data to be converted.
171
+ * @return The converted data.
172
+ */
173
+ byte[] stringToBytes(String data);
174
+
175
+ /**
176
+ * This method can be used to convert data from an array of bytes into
177
+ * String form. The conversion does not reflect any particular character
178
+ * set, and a byte with the representation 0xYZ will always be converted
179
+ * into a character with the hex representation 0x00YZ. It performs the
180
+ * opposite conversion to the method
181
+ * <code>stringToBytes()</code>, and byte-based data that is converted to a
182
+ * String and back again using these two methods is guaranteed to retain its
183
+ * integrity (which may not be the case with conversions that reflect a
184
+ * given character set).
185
+ *
186
+ * @param data The data to be converted.
187
+ * @return The converted data.
188
+ */
189
+ String bytesToString(byte[] data);
190
+
191
+ /**
192
+ * This method searches a piece of data for the first occurrence of a
193
+ * specified pattern. It works on byte-based data in a way that is similar
194
+ * to the way the native Java method
195
+ * <code>String.indexOf()</code> works on String-based data.
196
+ *
197
+ * @param data The data to be searched.
198
+ * @param pattern The pattern to be searched for.
199
+ * @param caseSensitive Flags whether or not the search is case-sensitive.
200
+ * @param from The offset within
201
+ * <code>data</code> where the search should begin.
202
+ * @param to The offset within
203
+ * <code>data</code> where the search should end.
204
+ * @return The offset of the first occurrence of the pattern within the
205
+ * specified bounds, or -1 if no match is found.
206
+ */
207
+ int indexOf(byte[] data,
208
+ byte[] pattern,
209
+ boolean caseSensitive,
210
+ int from,
211
+ int to);
212
+
213
+ /**
214
+ * This method builds an HTTP message containing the specified headers and
215
+ * message body. If applicable, the Content-Length header will be added or
216
+ * updated, based on the length of the body.
217
+ *
218
+ * @param headers A list of headers to include in the message.
219
+ * @param body The body of the message, of
220
+ * <code>null</code> if the message has an empty body.
221
+ * @return The resulting full HTTP message.
222
+ */
223
+ byte[] buildHttpMessage(List<String> headers, byte[] body);
224
+
225
+ /**
226
+ * This method creates a GET request to the specified URL. The headers used
227
+ * in the request are determined by the Request headers settings as
228
+ * configured in Burp Spider's options.
229
+ *
230
+ * @param url The URL to which the request should be made.
231
+ * @return A request to the specified URL.
232
+ */
233
+ byte[] buildHttpRequest(URL url);
234
+
235
+ /**
236
+ * This method adds a new parameter to an HTTP request, and if appropriate
237
+ * updates the Content-Length header.
238
+ *
239
+ * @param request The request to which the parameter should be added.
240
+ * @param parameter An
241
+ * <code>IParameter</code> object containing details of the parameter to be
242
+ * added. Supported parameter types are:
243
+ * <code>PARAM_URL</code>,
244
+ * <code>PARAM_BODY</code> and
245
+ * <code>PARAM_COOKIE</code>.
246
+ * @return A new HTTP request with the new parameter added.
247
+ */
248
+ byte[] addParameter(byte[] request, IParameter parameter);
249
+
250
+ /**
251
+ * This method removes a parameter from an HTTP request, and if appropriate
252
+ * updates the Content-Length header.
253
+ *
254
+ * @param request The request from which the parameter should be removed.
255
+ * @param parameter An
256
+ * <code>IParameter</code> object containing details of the parameter to be
257
+ * removed. Supported parameter types are:
258
+ * <code>PARAM_URL</code>,
259
+ * <code>PARAM_BODY</code> and
260
+ * <code>PARAM_COOKIE</code>.
261
+ * @return A new HTTP request with the parameter removed.
262
+ */
263
+ byte[] removeParameter(byte[] request, IParameter parameter);
264
+
265
+ /**
266
+ * This method updates the value of a parameter within an HTTP request, and
267
+ * if appropriate updates the Content-Length header. <b>Note:</b> This
268
+ * method can only be used to update the value of an existing parameter of a
269
+ * specified type. If you need to change the type of an existing parameter,
270
+ * you should first call
271
+ * <code>removeParameter()</code> to remove the parameter with the old type,
272
+ * and then call
273
+ * <code>addParameter()</code> to add a parameter with the new type.
274
+ *
275
+ * @param request The request containing the parameter to be updated.
276
+ * @param parameter An
277
+ * <code>IParameter</code> object containing details of the parameter to be
278
+ * updated. Supported parameter types are:
279
+ * <code>PARAM_URL</code>,
280
+ * <code>PARAM_BODY</code> and
281
+ * <code>PARAM_COOKIE</code>.
282
+ * @return A new HTTP request with the parameter updated.
283
+ */
284
+ byte[] updateParameter(byte[] request, IParameter parameter);
285
+
286
+ /**
287
+ * This method can be used to toggle a request's method between GET and
288
+ * POST. Parameters are relocated between the URL query string and message
289
+ * body as required, and the Content-Length header is created or removed as
290
+ * applicable.
291
+ *
292
+ * @param request The HTTP request whose method should be toggled.
293
+ * @return A new HTTP request using the toggled method.
294
+ */
295
+ byte[] toggleRequestMethod(byte[] request);
296
+
297
+ /**
298
+ * This method constructs an
299
+ * <code>IHttpService</code> object based on the details provided.
300
+ *
301
+ * @param host The HTTP service host.
302
+ * @param port The HTTP service port.
303
+ * @param protocol The HTTP service protocol.
304
+ * @return An
305
+ * <code>IHttpService</code> object based on the details provided.
306
+ */
307
+ IHttpService buildHttpService(String host, int port, String protocol);
308
+
309
+ /**
310
+ * This method constructs an
311
+ * <code>IHttpService</code> object based on the details provided.
312
+ *
313
+ * @param host The HTTP service host.
314
+ * @param port The HTTP service port.
315
+ * @param useHttps Flags whether the HTTP service protocol is HTTPS or HTTP.
316
+ * @return An
317
+ * <code>IHttpService</code> object based on the details provided.
318
+ */
319
+ IHttpService buildHttpService(String host, int port, boolean useHttps);
320
+
321
+ /**
322
+ * This method constructs an
323
+ * <code>IParameter</code> object based on the details provided.
324
+ *
325
+ * @param name The parameter name.
326
+ * @param value The parameter value.
327
+ * @param type The parameter type, as defined in the
328
+ * <code>IParameter</code> interface.
329
+ * @return An
330
+ * <code>IParameter</code> object based on the details provided.
331
+ */
332
+ IParameter buildParameter(String name, String value, byte type);
333
+
334
+ /**
335
+ * This method constructs an
336
+ * <code>IScannerInsertionPoint</code> object based on the details provided.
337
+ * It can be used to quickly create a simple insertion point based on a
338
+ * fixed payload location within a base request.
339
+ *
340
+ * @param insertionPointName The name of the insertion point.
341
+ * @param baseRequest The request from which to build scan requests.
342
+ * @param from The offset of the start of the payload location.
343
+ * @param to The offset of the end of the payload location.
344
+ * @return An
345
+ * <code>IScannerInsertionPoint</code> object based on the details provided.
346
+ */
347
+ IScannerInsertionPoint makeScannerInsertionPoint(
348
+ String insertionPointName,
349
+ byte[] baseRequest,
350
+ int from,
351
+ int to);
352
+ }