/* * @(#)IBurpExtender.java * * Copyright 2005 PortSwigger. All rights reserved. * Use is subject to license terms - see http://www.portswigger.net/ */ /** * This interface allows third-party code to extend burp suite's functionality. * * Implementations must be called BurpExtender, must be declared public, and * must provide a default (public, no-argument) constructor. On startup, burp * searches its classpath for a class called 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. A single instance of * BurpExtender will be instantiated and shared between all tools.

* * To make use of the interface, create a class called BurpExtender which * implements one or more methods of the interface, and place this into the * application's classpath at startup. For example, if burp.jar contains burp * suite, and BurpProxyExtender.jar contains the class BurpExtender, use the * following command to launch burp and load the IBurpExtender implementation:

* *

 *    java -classpath burp.jar;BurpProxyExtender.jar burp.StartBurp
 * 
*/ public interface IBurpExtender { /** * This method is invoked immediately after the implementation's constructor * to pass the command-line arguments passed to the calling application 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 the calling application * 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 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. */ 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 by burp repeater. It registers a method * that may be invoked by the implementation to issue arbitrary HTTP/S * requests and receive responses. *

* * The method registered has the following signature:

* *

     *     public byte[] makeHttpRequest(
     *         String host,
     *         int port,
     *         boolean useHttps,
     *         byte[] request) throws Exception;
     * 
* * The makeHttpRequest method returns the full response from the server, or * throws an Exception with an informative message if any kind of error * occurs.

* * Implementations must invoke the makeHttpRequest method dynamically, for * example:

* *

     *     byte[] response = (byte[]) makeHttpRequestMethod.invoke(
     *         makeHttpRequestObject,
     *         new Object[] 
     *         {
     *             "target.com",
     *             new Integer(80),
     *             new Boolean(false),
     *             "GET / HTTP/1.0\r\n\r\n".getBytes()
     *         });
     * 
* * The call to registerHttpRequestMethod need not return, and * implementations may use the invoking thread for any purpose.

* * @param makeHttpRequestMethod A method which may be dynamically invoked by * implementations to issue arbitrary HTTP/S requests. * @param makeHttpRequestObject An object upon which the method must be * invoked. */ public void registerHttpRequestMethod( java.lang.reflect.Method makeHttpRequestMethod, Object makeHttpRequestObject); /** * This method is invoked immediately before the calling application exits. * It allows implementations to carry out any clean-up actions necessary * (e.g. flushing log files or closing database resources) */ public void applicationClosing(); }