package burp;
/*
* @(#)IBurpExtender.java
*
* Copyright PortSwigger Ltd. All rights reserved.
*
* This code may be used to extend the functionality of Burp Suite and Burp
* Suite Professional, provided that this usage does not violate the
* license terms for those products.
*/
/**
* This interface allows third-party code to extend Burp Suite's functionality.
*
* Implementations must be called BurpExtender, in the package burp,
* must be declared public, and must provide a default (public, no-argument)
* constructor. On startup, Burp Suite searches its classpath for the class
* burp.BurpExtender, and attempts to dynamically load and instantiate this
* class. The IBurpExtender methods implemented will then be
* dynamically invoked as appropriate.
* * Partial implementations are acceptable. The class will be used provided at * least one of the interface's methods is implemented.
* * To make use of the interface, create a class called BurpExtender, in the * package burp, which implements one or more methods of the interface, and * place this into the application's classpath at startup. For example, if * Burp Suite is loaded from burp.jar, and BurpProxyExtender.jar contains the * class burp.BurpExtender, use the following command to launch Burp Suite and * load the IBurpExtender implementation:
* *
java -classpath burp.jar;BurpProxyExtender.jar burp.StartBurp* * (On Linux-based platforms, use a colon character instead of the semi-colon * as the classpath separator.) */ public interface IBurpExtender { /** * This method is invoked immediately after the implementation's constructor * to pass any command-line arguments that were passed to Burp Suite on * startup. It allows implementations to control aspects of their behaviour * at runtime by defining their own command-line arguments. * * @param args The command-line arguments passed to Burp Suite on startup. */ public void setCommandLineArgs(String[] args); /** * This method is invoked by Burp Proxy whenever a client request or server * response is received. It allows implementations to perform logging * functions, modify the message, specify an action (intercept, drop, etc.) * and perform any other arbitrary processing. * * @param messageReference An identifier which is unique to a single * request/response pair. This can be used to correlate details of requests * and responses and perform processing on the response message accordingly. * @param messageIsRequest Flags whether the message is a client request or * a server response. * @param remoteHost The hostname of the remote HTTP server. * @param remotePort The port of the remote HTTP server. * @param serviceIsHttps Flags whether the protocol is HTTPS or HTTP. * @param httpMethod The method verb used in the client request. * @param url The requested URL. * @param resourceType The filetype of the requested resource, or a * zero-length string if the resource has no filetype. * @param statusCode The HTTP status code returned by the server. This value * is
null for request messages.
* @param responseContentType The content-type string returned by the
* server. This value is null for request messages.
* @param message The full HTTP message.
* @param action An array containing a single integer, allowing the
* implementation to communicate back to Burp Proxy a non-default
* interception action for the message. The default value is
* ACTION_FOLLOW_RULES. Set action[0] to one of
* the other possible values to perform a different action.
* @return Implementations should return either (a) the same object received
* in the message paramater, or (b) a different object
* containing a modified message.
*/
public byte[] processProxyMessage(
int messageReference,
boolean messageIsRequest,
String remoteHost,
int remotePort,
boolean serviceIsHttps,
String httpMethod,
String url,
String resourceType,
String statusCode,
String responseContentType,
byte[] message,
int[] action);
/**
* Causes Burp Proxy to follow the current interception rules to determine
* the appropriate action to take for the message.
*/
public final static int ACTION_FOLLOW_RULES = 0;
/**
* Causes Burp Proxy to present the message to the user for manual
* review or modification.
*/
public final static int ACTION_DO_INTERCEPT = 1;
/**
* Causes Burp Proxy to forward the message to the remote server or client.
*/
public final static int ACTION_DONT_INTERCEPT = 2;
/**
* Causes Burp Proxy to drop the message and close the client connection.
*/
public final static int ACTION_DROP = 3;
/**
* This method is invoked on startup. It registers an instance of the
* IBurpExtenderCallbacks interface, providing methods that
* may be invoked by the implementation to perform various actions.
*
* The call to registerExtenderCallbacks need not return, and
* implementations may use the invoking thread for any purpose.
*
* @param callbacks An implementation of the
* IBurpExtenderCallbacks interface.
*/
public void registerExtenderCallbacks(burp.IBurpExtenderCallbacks callbacks);
/**
* This method is invoked immediately before Burp Suite exits.
* It allows implementations to carry out any clean-up actions necessary
* (e.g. flushing log files or closing database resources).
*/
public void applicationClosing();
/**
* This method is invoked whenever any of Burp's tools makes an HTTP request
* or receives a response. It allows extensions to intercept and modify the
* HTTP traffic of all Burp tools. For each request, the method is invoked
* after the request has been fully processed by the invoking tool and is
* about to be made on the network. For each response, the method is invoked
* after the response has been received from the network and before any
* processing is performed by the invoking tool.
*
* @param toolName The name of the Burp tool which is making the request.
* @param messageIsRequest Indicates whether the message is a request or
* response.
* @param messageInfo Details of the HTTP message.
*/
public void processHttpMessage(
String toolName,
boolean messageIsRequest,
IHttpRequestResponse messageInfo);
/**
* This method is invoked whenever Burp Scanner discovers a new, unique
* issue, and can be used to perform customised reporting or logging of issues.
*
* @param issue Details of the new scan issue.
*/
public void newScanIssue(IScanIssue issue);
}