These settings control how the Scanner places "insertion points" into each base request that is sent for active scanning. An insertion point is a location within the request where attacks will be placed, to probe for vulnerabilities. Each defined insertion point is scanned individually.
Burp gives you fine-grained control over the placement of insertion points, and careful configuration of these options will let you tailor your scanning to the nature of the application you are targeting. The configuration of insertion points also represents a trade-off between the speed and comprehensiveness of your scans.
Note: As well as letting Burp automatically assign insertion points, it is possible to fully customize these, so you can specify arbitrary locations within a base request where attacks should be placed. To use this function, send the request to Intruder, use the payload positions tab to define the start and end of each insertion point in the usual way, and select the Intruder menu option "Actively scan defined insertion points". You can also specify custom insertion point locations programmatically using Burp Extender.
These settings let you select the types of locations within the request where insertion points should be placed:
These settings let you configure the Scanner to move some types of insertion point to other locations within the request, in addition to testing them in their original position. For example, you can move each URL parameter into the message body and retest it there. Or you can move each body parameter into a cookie and retest it there.
Moving parameters in this way can often bypass defensive filters. Many applications and application firewalls perform per-parameter input validation assuming that each parameter is in its expected location within the request. Moving the parameter to a different location can evade this validation. When the application code later retrieves the parameter to implement its main logic, it may do so using an API that is agnostic as to the parameter's location. If so, then moving the parameter may enable you to reach vulnerable code paths using input that would normally be filtered before being processed.
The following options are available for changing parameter locations:
Note that changing parameter locations results in many more scan requests, because each request parameter is effectively scanned multiple times.
Nested insertion points are used when an insertion point's base value contains data in a recognized format. For example, a URL parameter might contain Base64-encoded data, and the decoded value might in turn contain JSON or XML data. With the option to use nested insertion points enabled, Burp will create suitable insertion points for each separate item of input at each level of nesting.
Using this option imposes no overhead when scanning requests containing only conventional request parameters, but enables Burp to reach more of the attack surface of complex applications where data is encapsulated within different formats.
Whatever settings you select, the number of insertion points for an individual request will generally depend on features of that request, such as the number of parameters. Occasionally, requests may contain an excessive number of parameters (hundreds, or more). If Burp performed a full scan of every parameter, the scan would take an excessive amount of time to complete.
This setting lets you set a limit on the number of insertion points that will be generated for each base request, thereby preventing your scans from becoming stalled if they encounter requests containing huge numbers of parameters. In cases where the number of insertion points is curtailed by this limit, the item's entry in the active scan queue will indicate the number of insertion points that were skipped, enabling you to manually review the base request and decide if it is worth performing a full scan of all its possible insertion points.
These settings let you specify request parameters for which Burp should skip certain tests. There are separate lists for skipping server-side injection tests (such as SQL injection) and for skipping all checks.
Server-side injection tests are relatively time-consuming, because Burp sends multiple requests probing for various blind vulnerabilities on the server. If you believe that certain parameters appearing within requests are not vulnerable (for example, built-in parameters used only by the platform or web server), you can tell Burp not to test these. (Testing for client-side bugs like cross-site scripting involve much less overhead because testing each parameter imposes minimal overhead on the duration of the scan if the parameter is not vulnerable.)
Skipping all tests may be useful if a parameter is handled by an application component that you do not wish to test, or if modifying a parameter is known to cause application instability.
Each item in the list specifies the parameter type, the item to be matched (name or value), the match type (literal string or regex), and the expression to match.
You can identify REST parameters by their position (slash-delimited) within the URL path. To do this, select "REST parameter" from the parameter drop-down, "name" from the item drop-down, and specify the index number (1-based) of the position within the URL path which you wish to exclude from testing. You can also specify REST parameters by value.
These settings control the engine used for making HTTP requests when doing active scanning. The following options are available:
Careful use of these options lets you fine tune the scanning engine, depending on the performance impact on the application, and on your own processing power and bandwidth. If you find that the Scanner is running slowly, but the application is performing well and your own CPU utilization is low, you can increase the number of threads to make your scans proceed faster. If you find that connection errors are occurring, that the application is slowing down, or that your own computer is locking up, you should reduce the thread count, and maybe increase the number of retries on network failure and the pause between retries. If the functionality of the application is such that actions performed on one base request interfere with the responses returned from other requests, you should consider reducing the thread count to 1, to ensure that only a single base request is scanned at a time.
These options let you tune the behavior of the active scanning logic to reflect the objectives of the scan and the nature of the target application. For example, you can choose to quickly scan for more easily discovered issues in a large application; or you can perform a much slower comprehensive scan to discover issues that are harder, and require many more scan requests, to detect.
The following options are available:
These options let you define which checks are performed during active scanning. The following categories of checks are available:
Each check that is performed increases the number of requests made, and the overall time of each scan. You can turn individual checks on or off based on your knowledge of an application's technologies. For example, if you know that an application does not use any LDAP, you can turn off LDAP injection tests. Of if you know which back-end database the application uses, you can turn off SQL injection checks that are specific to other database types. You can also selectively enable checks based on how rigorous you require your scans to be. For example, you can configure Burp to do a quick once-over of an application, checking only for XSS and SQL injection in URL and body parameters, before returning later to carry out more comprehensive testing of every vulnerability type in every insertion point.
These options let you define which aspects of requests and responses are checked during passive scanning. The following options are available:
Note that passive scans do not send any requests of their own, and each passive check imposes a negligible processing load on your computer. Nevertheless, you can disable individual areas of checks if you are simply not interested in them and don't want them appearing within scan results.
These settings control the types of scanning that will include static analysis of executable code:
Note: Static analysis can consume large amounts of memory and processing, and so it may be desirable to restrict static analysis to key targets of interest. Additionally, it may be necessary to launch Burp with greater amounts of memory when performing static code anaysis.
You can configure the maximum time that Burp will spend on static analysis for each individual item that is scanned.This setting can be useful if Burp encounters items containing very large or complex scripts, which may cause the static analysis engine to consume excessive system resoures. If the analysis of a particular item is truncated because the maximum time was reached, then Burp shows an alert identifying the item affected. You can specify zero or a blank value to indicate that no limit should be applied.