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.
- data/README.rdoc +28 -14
- data/Rakefile +96 -6
- data/VERSION.yml +5 -0
- data/bin/buby +2 -0
- data/buby.gemspec +102 -17
- data/{java/src → ext/buby/burp}/BurpExtender.java +189 -29
- data/ext/burp_interfaces/burp/IBurpExtender.java +31 -0
- data/ext/burp_interfaces/burp/IBurpExtenderCallbacks.java +785 -0
- data/ext/burp_interfaces/burp/IContextMenuFactory.java +38 -0
- data/ext/burp_interfaces/burp/IContextMenuInvocation.java +156 -0
- data/ext/burp_interfaces/burp/ICookie.java +53 -0
- data/ext/burp_interfaces/burp/IExtensionHelpers.java +352 -0
- data/ext/burp_interfaces/burp/IExtensionStateListener.java +27 -0
- data/ext/burp_interfaces/burp/IHttpListener.java +37 -0
- data/ext/burp_interfaces/burp/IHttpRequestResponse.java +102 -0
- data/ext/burp_interfaces/burp/IHttpRequestResponsePersisted.java +26 -0
- data/ext/burp_interfaces/burp/IHttpRequestResponseWithMarkers.java +44 -0
- data/ext/burp_interfaces/burp/IHttpService.java +39 -0
- data/ext/burp_interfaces/burp/IInterceptedProxyMessage.java +116 -0
- data/ext/burp_interfaces/burp/IIntruderAttack.java +31 -0
- data/ext/burp_interfaces/burp/IIntruderPayloadGenerator.java +50 -0
- data/ext/burp_interfaces/burp/IIntruderPayloadGeneratorFactory.java +40 -0
- data/ext/burp_interfaces/burp/IIntruderPayloadProcessor.java +45 -0
- data/{java/src → ext/burp_interfaces}/burp/IMenuItemHandler.java +36 -40
- data/ext/burp_interfaces/burp/IMessageEditor.java +64 -0
- data/ext/burp_interfaces/burp/IMessageEditorController.java +49 -0
- data/ext/burp_interfaces/burp/IMessageEditorTab.java +102 -0
- data/ext/burp_interfaces/burp/IMessageEditorTabFactory.java +38 -0
- data/ext/burp_interfaces/burp/IParameter.java +104 -0
- data/ext/burp_interfaces/burp/IProxyListener.java +37 -0
- data/ext/burp_interfaces/burp/IRequestInfo.java +95 -0
- data/ext/burp_interfaces/burp/IResponseInfo.java +54 -0
- data/ext/burp_interfaces/burp/IScanIssue.java +120 -0
- data/ext/burp_interfaces/burp/IScanQueueItem.java +80 -0
- data/ext/burp_interfaces/burp/IScannerCheck.java +89 -0
- data/ext/burp_interfaces/burp/IScannerInsertionPoint.java +156 -0
- data/ext/burp_interfaces/burp/IScannerInsertionPointProvider.java +38 -0
- data/ext/burp_interfaces/burp/IScannerListener.java +30 -0
- data/ext/burp_interfaces/burp/IScopeChangeListener.java +25 -0
- data/ext/burp_interfaces/burp/ISessionHandlingAction.java +51 -0
- data/ext/burp_interfaces/burp/ITab.java +38 -0
- data/ext/burp_interfaces/burp/ITempFile.java +33 -0
- data/ext/burp_interfaces/burp/ITextEditor.java +90 -0
- data/lib/buby/burp_extender/console_frame.rb +33 -0
- data/lib/buby/burp_extender/console_pane.rb +26 -0
- data/lib/buby/burp_extender/console_tab.rb +15 -0
- data/lib/buby/burp_extender/context_menu.rb +29 -0
- data/lib/buby/burp_extender/context_menu_factory.rb +17 -0
- data/lib/buby/burp_extender/context_menu_item.rb +13 -0
- data/lib/buby/burp_extender/jcheck_box_menu_item.rb +12 -0
- data/lib/buby/burp_extender/jmenu.rb +11 -0
- data/lib/buby/burp_extender/jmenu_item.rb +12 -0
- data/lib/buby/burp_extender/menu.rb +11 -0
- data/lib/buby/burp_extender/menu_item.rb +12 -0
- data/lib/buby/burp_extender.rb +339 -0
- data/lib/buby/context_menu_factory.rb +35 -0
- data/lib/buby/cookie.rb +37 -0
- data/lib/buby/extender.rb +156 -0
- data/lib/buby/http_listener.rb +29 -0
- data/lib/buby/{extends → implants}/buby_array_wrapper.rb +0 -0
- data/lib/buby/implants/context_menu_invocation.rb +113 -0
- data/lib/buby/implants/cookie.rb +47 -0
- data/lib/buby/implants/extension_helpers.rb +286 -0
- data/lib/buby/{extends → implants}/http_request_response.rb +8 -1
- data/lib/buby/implants/intercepted_proxy_message.rb +53 -0
- data/lib/buby/implants/intruder_attack.rb +42 -0
- data/lib/buby/implants/jruby.rb +64 -0
- data/lib/buby/implants/message_editor.rb +70 -0
- data/lib/buby/implants/message_editor_controller.rb +60 -0
- data/lib/buby/implants/parameter.rb +84 -0
- data/lib/buby/implants/request_info.rb +47 -0
- data/lib/buby/implants/response_info.rb +44 -0
- data/lib/buby/{extends → implants}/scan_issue.rb +1 -2
- data/lib/buby/implants/scan_queue_item.rb +53 -0
- data/lib/buby/implants/scanner_insertion_point.rb +92 -0
- data/lib/buby/implants/temp_file.rb +43 -0
- data/lib/buby/implants/text_editor.rb +63 -0
- data/lib/buby/implants.rb +28 -0
- data/lib/buby/intruder_payload_generator.rb +60 -0
- data/lib/buby/intruder_payload_generator_factory.rb +32 -0
- data/lib/buby/intruder_payload_processor.rb +38 -0
- data/lib/buby/message_editor_controller.rb +41 -0
- data/lib/buby/message_editor_tab.rb +98 -0
- data/lib/buby/message_editor_tab_factory.rb +28 -0
- data/lib/buby/parameter/base.rb +40 -0
- data/lib/buby/parameter/body.rb +7 -0
- data/lib/buby/parameter/cookie.rb +7 -0
- data/lib/buby/parameter/url.rb +7 -0
- data/lib/buby/parameter.rb +15 -0
- data/lib/buby/proxy_listener.rb +26 -0
- data/lib/buby/scan_issue.rb +112 -0
- data/lib/buby/scanner_check.rb +84 -0
- data/lib/buby/scanner_insertion_point.rb +118 -0
- data/lib/buby/scanner_insertion_point_provider.rb +27 -0
- data/lib/buby/scanner_listener.rb +22 -0
- data/lib/buby/scope_change_listener.rb +19 -0
- data/lib/buby/session_handling_action.rb +43 -0
- data/lib/buby/tab.rb +37 -0
- data/lib/buby/version.rb +9 -0
- data/lib/buby.rb +892 -101
- metadata +118 -22
- data/VERSION +0 -1
- data/java/buby.jar +0 -0
- data/java/src/burp/IBurpExtender.java +0 -180
- data/java/src/burp/IBurpExtenderCallbacks.java +0 -373
- data/java/src/burp/IHttpRequestResponse.java +0 -156
- data/java/src/burp/IScanIssue.java +0 -106
- data/java/src/burp/IScanQueueItem.java +0 -76
- data/lib/buby/extends.rb +0 -4
@@ -0,0 +1,37 @@
|
|
1
|
+
package burp;
|
2
|
+
|
3
|
+
/*
|
4
|
+
* @(#)IProxyListener.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
|
+
/**
|
13
|
+
* Extensions can implement this interface and then call
|
14
|
+
* <code>IBurpExtenderCallbacks.registerProxyListener()</code> to register a
|
15
|
+
* Proxy listener. The listener will be notified of requests and responses being
|
16
|
+
* processed by the Proxy tool. Extensions can perform custom analysis or
|
17
|
+
* modification of these messages, and control in-UI message interception, by
|
18
|
+
* registering a proxy listener.
|
19
|
+
*/
|
20
|
+
public interface IProxyListener
|
21
|
+
{
|
22
|
+
/**
|
23
|
+
* This method is invoked when an HTTP message is being processed by the
|
24
|
+
* Proxy.
|
25
|
+
*
|
26
|
+
* @param messageIsRequest Indicates whether the HTTP message is a request
|
27
|
+
* or a response.
|
28
|
+
* @param message An
|
29
|
+
* <code>IInterceptedProxyMessage</code> object that extensions can use to
|
30
|
+
* query and update details of the message, and control whether the message
|
31
|
+
* should be intercepted and displayed to the user for manual review or
|
32
|
+
* modification.
|
33
|
+
*/
|
34
|
+
void processProxyMessage(
|
35
|
+
boolean messageIsRequest,
|
36
|
+
IInterceptedProxyMessage message);
|
37
|
+
}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
package burp;
|
2
|
+
|
3
|
+
/*
|
4
|
+
* @(#)IRequestInfo.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 is used to retrieve key details about an HTTP request.
|
17
|
+
* Extensions can obtain an
|
18
|
+
* <code>IRequestInfo</code> object for a given request by calling
|
19
|
+
* <code>IExtensionHelpers.analyzeRequest()</code>.
|
20
|
+
*/
|
21
|
+
public interface IRequestInfo
|
22
|
+
{
|
23
|
+
/**
|
24
|
+
* Used to indicate that there is no content.
|
25
|
+
*/
|
26
|
+
static final byte CONTENT_TYPE_NONE = 0;
|
27
|
+
/**
|
28
|
+
* Used to indicate URL-encoded content.
|
29
|
+
*/
|
30
|
+
static final byte CONTENT_TYPE_URL_ENCODED = 1;
|
31
|
+
/**
|
32
|
+
* Used to indicate multi-part content.
|
33
|
+
*/
|
34
|
+
static final byte CONTENT_TYPE_MULTIPART = 2;
|
35
|
+
/**
|
36
|
+
* Used to indicate XML content.
|
37
|
+
*/
|
38
|
+
static final byte CONTENT_TYPE_XML = 3;
|
39
|
+
/**
|
40
|
+
* Used to indicate JSON content.
|
41
|
+
*/
|
42
|
+
static final byte CONTENT_TYPE_JSON = 4;
|
43
|
+
/**
|
44
|
+
* Used to indicate AMF content.
|
45
|
+
*/
|
46
|
+
static final byte CONTENT_TYPE_AMF = 5;
|
47
|
+
/**
|
48
|
+
* Used to indicate unknown content.
|
49
|
+
*/
|
50
|
+
static final byte CONTENT_TYPE_UNKNOWN = -1;
|
51
|
+
|
52
|
+
/**
|
53
|
+
* This method is used to obtain the HTTP method used in the request.
|
54
|
+
*
|
55
|
+
* @return The HTTP method used in the request.
|
56
|
+
*/
|
57
|
+
String getMethod();
|
58
|
+
|
59
|
+
/**
|
60
|
+
* This method is used to obtain the URL in the request.
|
61
|
+
*
|
62
|
+
* @return The URL in the request.
|
63
|
+
*/
|
64
|
+
URL getUrl();
|
65
|
+
|
66
|
+
/**
|
67
|
+
* This method is used to obtain the HTTP headers contained in the request.
|
68
|
+
*
|
69
|
+
* @return The HTTP headers contained in the request.
|
70
|
+
*/
|
71
|
+
List<String> getHeaders();
|
72
|
+
|
73
|
+
/**
|
74
|
+
* This method is used to obtain the parameters contained in the request.
|
75
|
+
*
|
76
|
+
* @return The parameters contained in the request.
|
77
|
+
*/
|
78
|
+
List<IParameter> getParameters();
|
79
|
+
|
80
|
+
/**
|
81
|
+
* This method is used to obtain the offset within the request where the
|
82
|
+
* message body begins.
|
83
|
+
*
|
84
|
+
* @return The offset within the request where the message body begins.
|
85
|
+
*/
|
86
|
+
int getBodyOffset();
|
87
|
+
|
88
|
+
/**
|
89
|
+
* This method is used to obtain the content type of the message body.
|
90
|
+
*
|
91
|
+
* @return An indication of the content type of the message body. Available
|
92
|
+
* types are defined within this interface.
|
93
|
+
*/
|
94
|
+
byte getContentType();
|
95
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
package burp;
|
2
|
+
|
3
|
+
/*
|
4
|
+
* @(#)IResponseInfo.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
|
+
|
14
|
+
/**
|
15
|
+
* This interface is used to retrieve key details about an HTTP response.
|
16
|
+
* Extensions can obtain an
|
17
|
+
* <code>IResponseInfo</code> object for a given response by calling
|
18
|
+
* <code>IExtensionHelpers.analyzeResponse()</code>.
|
19
|
+
*/
|
20
|
+
public interface IResponseInfo
|
21
|
+
{
|
22
|
+
/**
|
23
|
+
* This method is used to obtain the HTTP headers contained in the response.
|
24
|
+
*
|
25
|
+
* @return The HTTP headers contained in the response.
|
26
|
+
*/
|
27
|
+
List<String> getHeaders();
|
28
|
+
|
29
|
+
/**
|
30
|
+
* This method is used to obtain the offset within the response where the
|
31
|
+
* message body begins.
|
32
|
+
*
|
33
|
+
* @return The offset within the response where the message body begins.
|
34
|
+
*/
|
35
|
+
int getBodyOffset();
|
36
|
+
|
37
|
+
/**
|
38
|
+
* This method is used to obtain the HTTP status code contained in the
|
39
|
+
* response.
|
40
|
+
*
|
41
|
+
* @return The HTTP status code contained in the response.
|
42
|
+
*/
|
43
|
+
short getStatusCode();
|
44
|
+
|
45
|
+
/**
|
46
|
+
* This method is used to obtain details of the HTTP cookies set in the
|
47
|
+
* response.
|
48
|
+
*
|
49
|
+
* @return A list of
|
50
|
+
* <code>ICookie</code> objects representing the cookies set in the
|
51
|
+
* response, if any.
|
52
|
+
*/
|
53
|
+
List<ICookie> getCookies();
|
54
|
+
}
|
@@ -0,0 +1,120 @@
|
|
1
|
+
package burp;
|
2
|
+
|
3
|
+
/*
|
4
|
+
* @(#)IScanIssue.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
|
+
/**
|
13
|
+
* This interface is used to retrieve details of Scanner issues. Extensions can
|
14
|
+
* obtain details of issues by registering an
|
15
|
+
* <code>IScannerListener</code> or by calling
|
16
|
+
* <code>IBurpExtenderCallbacks.getScanIssues()</code>. Extensions can also add
|
17
|
+
* custom Scanner issues by registering an
|
18
|
+
* <code>IScannerCheck</code> or calling
|
19
|
+
* <code>IBurpExtenderCallbacks.addScanIssue()</code>, and providing their own
|
20
|
+
* implementations of this interface
|
21
|
+
*/
|
22
|
+
public interface IScanIssue
|
23
|
+
{
|
24
|
+
/**
|
25
|
+
* This method returns the URL for which the issue was generated.
|
26
|
+
*
|
27
|
+
* @return The URL for which the issue was generated.
|
28
|
+
*/
|
29
|
+
java.net.URL getUrl();
|
30
|
+
|
31
|
+
/**
|
32
|
+
* This method returns the name of the issue type.
|
33
|
+
*
|
34
|
+
* @return The name of the issue type (e.g. "SQL injection").
|
35
|
+
*/
|
36
|
+
String getIssueName();
|
37
|
+
|
38
|
+
/**
|
39
|
+
* This method returns a numeric identifier of the issue type. See the Burp
|
40
|
+
* Scanner help documentation for a listing of all the issue types.
|
41
|
+
*
|
42
|
+
* @return A numeric identifier of the issue type.
|
43
|
+
*/
|
44
|
+
int getIssueType();
|
45
|
+
|
46
|
+
/**
|
47
|
+
* This method returns the issue severity level.
|
48
|
+
*
|
49
|
+
* @return The issue severity level. Expected values are "High", "Medium",
|
50
|
+
* "Low", "Information" or "False positive".
|
51
|
+
*
|
52
|
+
*/
|
53
|
+
String getSeverity();
|
54
|
+
|
55
|
+
/**
|
56
|
+
* This method returns the issue confidence level.
|
57
|
+
*
|
58
|
+
* @return The issue confidence level. Expected values are "Certain", "Firm"
|
59
|
+
* or "Tentative".
|
60
|
+
*/
|
61
|
+
String getConfidence();
|
62
|
+
|
63
|
+
/**
|
64
|
+
* This method returns a background description for this type of issue.
|
65
|
+
*
|
66
|
+
* @return A background description for this type of issue, or
|
67
|
+
* <code>null</code> if none applies.
|
68
|
+
*/
|
69
|
+
String getIssueBackground();
|
70
|
+
|
71
|
+
/**
|
72
|
+
* This method returns a background description of the remediation for this
|
73
|
+
* type of issue.
|
74
|
+
*
|
75
|
+
* @return A background description of the remediation for this type of
|
76
|
+
* issue, or
|
77
|
+
* <code>null</code> if none applies.
|
78
|
+
*/
|
79
|
+
String getRemediationBackground();
|
80
|
+
|
81
|
+
/**
|
82
|
+
* This method returns detailed information about this specific instance of
|
83
|
+
* the issue.
|
84
|
+
*
|
85
|
+
* @return Detailed information about this specific instance of the issue,
|
86
|
+
* or
|
87
|
+
* <code>null</code> if none applies.
|
88
|
+
*/
|
89
|
+
String getIssueDetail();
|
90
|
+
|
91
|
+
/**
|
92
|
+
* This method returns detailed information about the remediation for this
|
93
|
+
* specific instance of the issue.
|
94
|
+
*
|
95
|
+
* @return Detailed information about the remediation for this specific
|
96
|
+
* instance of the issue, or
|
97
|
+
* <code>null</code> if none applies.
|
98
|
+
*/
|
99
|
+
String getRemediationDetail();
|
100
|
+
|
101
|
+
/**
|
102
|
+
* This method returns the HTTP messages on the basis of which the issue was
|
103
|
+
* generated.
|
104
|
+
*
|
105
|
+
* @return The HTTP messages on the basis of which the issue was generated.
|
106
|
+
* <b>Note:</b> The items in this array should be instances of
|
107
|
+
* <code>IHttpRequestResponseWithMarkers</code> if applicable, so that
|
108
|
+
* details of the relevant portions of the request and response messages are
|
109
|
+
* available.
|
110
|
+
*/
|
111
|
+
IHttpRequestResponse[] getHttpMessages();
|
112
|
+
|
113
|
+
/**
|
114
|
+
* This method returns the HTTP service for which the issue was generated.
|
115
|
+
*
|
116
|
+
* @return The HTTP service for which the issue was generated.
|
117
|
+
*/
|
118
|
+
IHttpService getHttpService();
|
119
|
+
|
120
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
package burp;
|
2
|
+
|
3
|
+
/*
|
4
|
+
* @(#)IScanQueueItem.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
|
+
/**
|
13
|
+
* This interface is used to retrieve details of items in the Burp Scanner
|
14
|
+
* active scan queue. Extensions can obtain references to scan queue items by
|
15
|
+
* calling
|
16
|
+
* <code>IBurpExtenderCallbacks.doActiveScan()</code>.
|
17
|
+
*/
|
18
|
+
public interface IScanQueueItem
|
19
|
+
{
|
20
|
+
/**
|
21
|
+
* This method returns a description of the status of the scan queue item.
|
22
|
+
*
|
23
|
+
* @return A description of the status of the scan queue item.
|
24
|
+
*/
|
25
|
+
String getStatus();
|
26
|
+
|
27
|
+
/**
|
28
|
+
* This method returns an indication of the percentage completed for the
|
29
|
+
* scan queue item.
|
30
|
+
*
|
31
|
+
* @return An indication of the percentage completed for the scan queue
|
32
|
+
* item.
|
33
|
+
*/
|
34
|
+
byte getPercentageComplete();
|
35
|
+
|
36
|
+
/**
|
37
|
+
* This method returns the number of requests that have been made for the
|
38
|
+
* scan queue item.
|
39
|
+
*
|
40
|
+
* @return The number of requests that have been made for the scan queue
|
41
|
+
* item.
|
42
|
+
*/
|
43
|
+
int getNumRequests();
|
44
|
+
|
45
|
+
/**
|
46
|
+
* This method returns the number of network errors that have occurred for
|
47
|
+
* the scan queue item.
|
48
|
+
*
|
49
|
+
* @return The number of network errors that have occurred for the scan
|
50
|
+
* queue item.
|
51
|
+
*/
|
52
|
+
int getNumErrors();
|
53
|
+
|
54
|
+
/**
|
55
|
+
* This method returns the number of attack insertion points being used for
|
56
|
+
* the scan queue item.
|
57
|
+
*
|
58
|
+
* @return The number of attack insertion points being used for the scan
|
59
|
+
* queue item.
|
60
|
+
*/
|
61
|
+
int getNumInsertionPoints();
|
62
|
+
|
63
|
+
/**
|
64
|
+
* This method allows the scan queue item to be canceled.
|
65
|
+
*/
|
66
|
+
void cancel();
|
67
|
+
|
68
|
+
/**
|
69
|
+
* This method returns details of the issues generated for the scan queue
|
70
|
+
* item. <b>Note:</b> different items within the scan queue may contain
|
71
|
+
* duplicated versions of the same issues - for example, if the same request
|
72
|
+
* has been scanned multiple times. Duplicated issues are consolidated in
|
73
|
+
* the main view of scan results. Extensions can register an
|
74
|
+
* <code>IScannerListener</code> to get details only of unique, newly
|
75
|
+
* discovered Scanner issues post-consolidation.
|
76
|
+
*
|
77
|
+
* @return Details of the issues generated for the scan queue item.
|
78
|
+
*/
|
79
|
+
IScanIssue[] getIssues();
|
80
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
package burp;
|
2
|
+
|
3
|
+
/*
|
4
|
+
* @(#)IScannerCheck.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
|
+
|
14
|
+
/**
|
15
|
+
* Extensions can implement this interface and then call
|
16
|
+
* <code>IBurpExtenderCallbacks.registerScannerCheck()</code> to register a
|
17
|
+
* custom Scanner check. When performing scanning, Burp will ask the check to
|
18
|
+
* perform active or passive scanning on the base request, and report any
|
19
|
+
* Scanner issues that are identified.
|
20
|
+
*/
|
21
|
+
public interface IScannerCheck
|
22
|
+
{
|
23
|
+
/**
|
24
|
+
* The Scanner invokes this method for each base request / response that is
|
25
|
+
* passively scanned. <b>Note:</b> Extensions should not only analyze the
|
26
|
+
* HTTP messages provided during passive scanning, and should not make any
|
27
|
+
* new HTTP requests of their own.
|
28
|
+
*
|
29
|
+
* @param baseRequestResponse The base HTTP request / response that should
|
30
|
+
* be passively scanned.
|
31
|
+
* @return A list of
|
32
|
+
* <code>IScanIssue</code> objects, or
|
33
|
+
* <code>null</code> if no issues are identified.
|
34
|
+
*/
|
35
|
+
List<IScanIssue> doPassiveScan(IHttpRequestResponse baseRequestResponse);
|
36
|
+
|
37
|
+
/**
|
38
|
+
* The Scanner invokes this method for each insertion point that is actively
|
39
|
+
* scanned. Extensions may issue HTTP requests as required to carry out
|
40
|
+
* active scanning, and should use the
|
41
|
+
* <code>IScannerInsertionPoint</code> object provided to build scan
|
42
|
+
* requests for particular payloads. <b>Note:</b> Extensions are responsible
|
43
|
+
* for ensuring that attack payloads are suitably encoded within requests
|
44
|
+
* (for example, by URL-encoding relevant metacharacters in the URL query
|
45
|
+
* string). Encoding is not automatically carried out by the
|
46
|
+
* <code>IScannerInsertionPoint</code>, because this would prevent Scanner
|
47
|
+
* checks from testing for certain input filter bypasses. Extensions should
|
48
|
+
* query the
|
49
|
+
* <code>IScannerInsertionPoint</code> to determine its type, and apply any
|
50
|
+
* encoding that may be appropriate.
|
51
|
+
*
|
52
|
+
* @param baseRequestResponse The base HTTP request / response that should
|
53
|
+
* be actively scanned.
|
54
|
+
* @param insertionPoint An
|
55
|
+
* <code>IScannerInsertionPoint</code> object that can be queried to obtain
|
56
|
+
* details of the insertion point being tested, and can be used to build
|
57
|
+
* scan requests for particular payloads.
|
58
|
+
* @return A list of
|
59
|
+
* <code>IScanIssue</code> objects, or
|
60
|
+
* <code>null</code> if no issues are identified.
|
61
|
+
*/
|
62
|
+
List<IScanIssue> doActiveScan(
|
63
|
+
IHttpRequestResponse baseRequestResponse,
|
64
|
+
IScannerInsertionPoint insertionPoint);
|
65
|
+
|
66
|
+
/**
|
67
|
+
* The Scanner invokes this method when the custom Scanner check has
|
68
|
+
* reported multiple issues for the same URL path. This can arise either
|
69
|
+
* because there are multiple distinct vulnerabilities, or because the same
|
70
|
+
* (or a similar) request has been scanned more than once. The custom check
|
71
|
+
* should determine whether the issues are duplicates. In most cases, where
|
72
|
+
* a check uses distinct issue names or descriptions for distinct issues,
|
73
|
+
* the consolidation process will simply be a matter of comparing these
|
74
|
+
* features for the two issues.
|
75
|
+
*
|
76
|
+
* @param existingIssue An issue that was previously reported by this
|
77
|
+
* Scanner check.
|
78
|
+
* @param newIssue An issue at the same URL path that has been newly
|
79
|
+
* reported by this Scanner check.
|
80
|
+
* @return An indication of which issue(s) should be reported in the main
|
81
|
+
* Scanner results. The method should return
|
82
|
+
* <code>-1</code> to report the existing issue only,
|
83
|
+
* <code>0</code> to report both issues, and
|
84
|
+
* <code>1</code> to report the new issue only.
|
85
|
+
*/
|
86
|
+
int consolidateDuplicateIssues(
|
87
|
+
IScanIssue existingIssue,
|
88
|
+
IScanIssue newIssue);
|
89
|
+
}
|