SlideShare a Scribd company logo
Customizing Burp Suite
Getting the Most out of
Burp Extensions
August Detlefsen
• Senior Application Security Consultant
• Author
augustd@codemagi.com
@codemagi
http://www.codemagi.com/blog
Monika Morrow
• Senior Application Security Consultant
@ AppSec Consulting
mmorrow@appsecconsulting.com
@fortytwowho
Agenda/Overview
• Extensions
• Using the BApp Store
• Building Your First Extension
• Adding GUI to extensions
• Building Scanners
• Utilities
Burp Suite
• What is Burp?
• What are extensions?
– What can I do with them? (use cases)
What Can I Do With Extensions?
• Passive Scanning
• Active Scanning
• Alter/append requests
• Define Insertion Points for Scanner/Intruder
• Create new payload types
• Automate Authentication
• Much, Much More
BApp Store
• What is it?
• How do I use it?
• A look at some useful extensions
– Logger++
– WSDL Wizard
BApp Store
Burp Extension Tab
BApp Store
Logger++
List of Active/Inactive Burp Extensions
Logger++ Options
Logger++ View Logs
Logger++ Item Details
Jython Extensions
Burp Extensions Settings
Burp Extensions Settings
One Click Install Jython Extensions
WSDL Wizard Installed
Installed Burp Extensions
WSDL Wizard Usage
WSDL Wizard Results
Limited Examples
• Proprietary code
• One-Offs
• No process for updating BApp Store
extensions
Loading a Custom Extension
• Java, Python, and Ruby extensions are loaded
and managed through a single interface within
the Extension tab
Loading a Custom Extension
Loading a Custom Extension
Loading a Custom Extension
Loading a Custom Extension
Loading a Custom Extension
Building Custom Extensions
• Burp Suite Pro v 1.6.x
• Current NetBeans IDE (8.0.2)
• JDK 8
Starting with a Template
• Find a starter project
• Some example projects at
https://portswigger.net/burp/extender/
• Today we’ll start with my NetbeansGUI project
found at https://github.com/monikamorrow/
Burp-Suite-Extension-Examples
– Which depends on https://github.com/augustd/burp-
suite-utils
Starting with a Template
• Clone Burp-Suite-Extension-Examples and
burp-suite-utils into your working directory
• Open the Burp-Suite-Extension-Examples
NetBeans project and expand folders and
resolve issues along the way
• Compile the project to resolve remaining
issues
Open the NetBeans Project
Problems already! No problem.
Resolve Project Problems
Find the Cloned Project
….and Repeat. Resolved.
Now what!?
Invalid Java Version?
Select Java Version
Resolved!
More Problems?
Compile to Fix!
Building jar:
C:UsersmmorrowDocumentsGit
Hub
Burp-Suite-Extension-Examples
Example4NetBeansGUIBurpExtend
erdist
BurpExtender-combined.jar
jar:
BUILD SUCCESSFUL (total time:
1 second)
Edit build.xml
<target name="-post-jar">
<jar jarfile=
"dist/BurpExtender-combined.jar">
<zipfileset src="${dist.jar}" />
<zipgroupfileset dir="dist/lib"
includes="*.jar”
excludes="META-INF/*"/>
</jar>
</target>
Test!
Let's Write Some Code
• Start new class BurpExtender
• Import BurpGUIExtender
• Implement BurpGUIExtender's abstract
functions
– init()
– processSelectedMessage()
BurpExtender
package burp;
import com.monikamorrow.burp.BurpGUIExtender;
public class BurpExtender extends
BurpGUIExtender { ... }
BurpExtender
public class BurpExtender extends
BurpGUIExtender {
public void init() {
mPluginName = "MYPROJECT";
mUsageStatement =
"Usage statement for " + mPluginName;
}
}
BurpExtender
public class BurpExtender extends BurpGUIExtender
protected IHttpRequestResponse
processSelectedMessage(
IHttpRequestResponse messageInfo,
boolean isRequest) {
...
return messageInfo;
}
}
BurpExtender
{
if(isRequest) {
mStdOut.println(
"processSelectedMessage triggered for request");
messageInfo.setComment("Request processed");
} else {
mStdOut.println(
"processSelectedMessage triggered for response");
messageInfo.setComment(
messageInfo.getComment() + "/Response processed");
}
return messageInfo;
}
What's Available?
• Mix and match
– BurpGUIExtender
– BurpSuiteTab
• ToolsScopeComponent
• UrlScopeComponent
– BaseExtender
– PassiveScan
– ….and more
GUI Components
• Configuration of options
• Enable only what you want
• Autosave
How to Add?
mTab = new BurpSuiteTab
(mPluginName, mCallbacks);
mTab.add(toolsScope);
mTab.add(urlScope);
mTab.add(myJPanel);
mCallbacks.customizeUiComponent(mTab);
mCallbacks.addSuiteTab(mTab);
How to Get Settings?
urlScope.processAllRequests();
toolsScope.isToolSelected(toolFlag);
Passive Scanning
• Search responses for problematic values
• Built-in passive scans
– Credit card numbers
– Known passwords
– Missing headers
Building a Passive Scanner
Passive Scanning – Room for Improvement
• Error Messages
• Software Version Numbers
Building a Passive Scanner
Implement the IScannerCheck interface
public class PassiveScan implements IScannerCheck {
@Override
public List<IScanIssue> doPassiveScan(
IHttpRequestResponse baseRequestResponse) { … }
@Override
public List<IScanIssue> doActiveScan(
IHttpRequestResponse baseRequestResponse,
IScannerInsertionPoint insertionPoint) { … }
@Override
public int consolidateDuplicateIssues(
IScanIssue existingIssue, IScanIssue newIssue) { … }
Building a Passive Scanner
Register the extension as a custom scanner
@Override
protected void initialize() {
callbacks.registerScannerCheck(this);
}
Building a Passive Scanner
IScannerCheck.doPassiveScan()
for (MatchRule rule : rules) {
Matcher matcher =
rule.getPattern().matcher(response);
while (matcher.find()) {
matches.add(
new ScannerMatch(
matcher.start(), matcher.end(), group, rule));
Building a Passive Scanner
IScannerCheck.doPassiveScan()
if (!matches.isEmpty()) {
Collections.sort(matches);
List<int[]> startStop =
new ArrayList<int[]>(1);
for (ScannerMatch match : matches) {
startStop.add(new int[]{
match.getStart(), match.getEnd()
});
Building a Passive Scanner
IScannerCheck.doPassiveScan()
return new ScanIssue(
baseRequestResponse.getHttpService(),
helpers.analyzeRequest(baseRequestResponse)
.getUrl(),
new IHttpRequestResponse[] {
callbacks.applyMarkers(
baseRequestResponse, null, startStop)},
issueName, issueDetail,
ScanIssueSeverity.MEDIUM,
ScanIssueConfidence.FIRM
Building a Passive Scanner
IScannerCheck.consolidateDuplicateIssues()
@Override
public int consolidateDuplicateIssues(
IScanIssue existingIssue, IScanIssue newIssue) {
if (existingIssue.getIssueDetail()
.equals(newIssue.getIssueDetail())) {
return -1; //It is a duplicate
} else {
return 0; //This is a new issue
}
Building a Passive Scanner
Extending from PassiveScan
@Override
protected void initPassiveScan() {
//set the extension Name
extensionName = "Error Message Checks";
//create match rules
addMatchRule(
new MatchRule(PHP_ON_LINE, 0, "PHP"));
addMatchRule(
new MatchRule(PHP_HTML_ON_LINE, 0, "PHP"));
…
Building a Passive Scanner
Extending from PassiveScan
@Override
protected ScanIssue getScanIssue(
IHttpRequestResponse baseRequestResponse,
List<ScannerMatch> matches, List<int[]> startStop) {
return new ScanIssue(
baseRequestResponse,
helpers,
callbacks,
startStop,
getIssueName(),
getIssueDetail(matches),
ScanIssueSeverity.MEDIUM.getName(),
ScanIssueConfidence.FIRM.getName());
Building a Passive Scanner
Active Scanning
• Issue requests containing attacks
• Look for indication of success in response
• Built-In Active Scans
– XSS
– SQL Injection
– Path Traversal
– etc
Building an Active Scanner
IScannerCheck.doActiveScan()
@Override
public List<IScanIssue> doActiveScan(
IHttpRequestResponse baseRequestResponse,
IScannerInsertionPoint insertionPoint) {
for (MatchRule rule : rules) {
// compile a request containing our
// injection test in the insertion point
byte[] testBytes = rule.getTest();
byte[] checkRequest =
insertionPoint.buildRequest(testBytes);
Building an Active Scanner
IScannerCheck.doActiveScan()
// issue the request
IHttpRequestResponse checkRequestResponse =
callbacks.makeHttpRequest(
httpService, checkRequest);
//get the response
String response = helpers.bytesToString(
checkRequestResponse.getResponse());
Building an Active Scanner
IScannerCheck.doActiveScan()
// get the offsets of the payload
// within the request, for in-UI highlighting
List<int[]> requestHighlights =
new ArrayList<int[]>(1);
requestHighlights.add(
insertionPoint.getPayloadOffsets(testBytes));
Building an Active Scanner
Extending from ActiveScan
@Override
protected void initActiveScan() {
//set the extension Name
extensionName = "Server Side Javascript Injection checks";
//create match rules
addMatchRule(
new MatchRule("response.end('success')", SUCCESS, 0, "response.end"));
addMatchRule(
new MatchRule("1995';return(true);var%20foo='bar", TRUE, 0, "string"));
Building an Active Scanner
Insertion Points
• Locations of parameters in request
• Contain data the server will act upon
Building an Active Scanner
Defining Insertion Points
Defining Insertion Points
Defining Insertion Points
• Implement IScannerInsertionPointProvider
– getInsertionPoints()
• Register as an insertion point provider:
callbacks.
registerScannerInsertionPointProvider(this);
Defining Insertion Points
BurpExtender.getInsertionPoints()
@Override
public List<IScannerInsertionPoint>
getInsertionPoints(
IHttpRequestResponse baseRR) {
byte[] request = baseRR.getRequest();
String requestAsString =
new String(request);
GWTParser parser = new GWTParser();
parser.parse(requestAsString);
Defining Insertion Points
BurpExtender.getInsertionPoints()
for (int[] offset : insertionPointOffsets) {
IScannerInsertionPoint point =
helpers.makeScannerInsertionPoint(
"GWT",
request,
offset[0] - bodyStart,
offset[1] - bodyStart);
insertionPoints.add(point);
}
return insertionPoints;
Defining Insertion Points
Defining Insertion Points
Viewing Insertion Points
• Add menu option to send request to Intruder
• Implement IContextMenuFactory
– createMenuItems()
• Register as a menu factory
callbacks.registerContextMenuFactory(this);
Defining Insertion Points
BurpExtender.createMenuItems()
@Override
public List<JMenuItem> createMenuItems(
IContextMenuInvocation invocation) {
//get selected requests from
//the invocation
IHttpRequestResponse[] ihrrs =
invocation.getSelectedMessages();
Defining Insertion Points
BurpExtender.createMenuItems()
//create clickable menu item
JMenuItem item = new JMenuItem(
"Send GWT request(s) to Intruder");
item.addActionListener(new MenuItemListener(ihrrs));
//return a Collection of menu items
List<JMenuItem> menuItems =
new ArrayList<JMenuItem>();
menuItems.add(item);
return menuItems;
Defining Insertion Points
MenuItemListener
class MenuItemListener implements ActionListener {
private IHttpRequestResponse[] ihrrs;
public MenuItemListener(
IHttpRequestResponse[] ihrrs) {
this.ihrrs = ihrrs;
}
public void actionPerformed(ActionEvent ae) {
sendGWTToIntruder(ihrrs);
}
}
Defining Insertion Points
BurpExtender.sendGWTToIntruder()
public void sendGWTToIntruder(IHttpRequestResponse[] ihrrs) {
for (IHttpRequestResponse baseRR : ihrrs) {
IHttpService service = baseRR.getHttpService();
// parse the request (not shown)
if (isGWTRequest) {
// Send GWT request to Intruder
callbacks.sendToIntruder(
service.getHost(), service.getPort(),
service.getProtocol().equals("https"),
request, insertionPointOffsets);
Defining Insertion Points
BurpExtender.sendGWTToIntruder()
baseRR.setComment(
"GWT: " + parser.getServiceMethod() +
" " +
baseRR.getComment()
);
Defining Insertion Points
Defining Insertion Points
Defining Insertion Points
Modifying Requests
• Add custom headers
• Add signatures
• CSRF tokens
Modifying Requests
Modifying Requests
• Implement IHttpListener
processHttpMessage()
• Register as an HTTP Listener
callbacks.registerHttpListener(this);
Modifying Requests
@Override
public void processHttpMessage(
int toolFlag, boolean messageIsRequest,
IHttpRequestResponse messageInfo) {
if (messageIsRequest &&
callbacks.TOOL_SCANNER == toolFlag) {
BurpExtender.processHttpMessage()
Modifying a Request
//see if the request contains a CSRF_TOKEN
byte[] scannerRequest =
messageInfo.getRequest();
String requestString =
helpers.bytesToString(scannerRequest);
Matcher matcher =
TOKEN_PATTERN.matcher(requestString);
if (matcher.find()) {
getFreshToken();
BurpExtender.processHttpMessage()
Modifying a Request
byte[] request =
helpers.buildHttpRequest(FORM_URL);
// issue the request and get the response
byte[] response = callbacks.makeHttpRequest(
DOMAIN_NAME, 443, true, request);
getFreshToken()
Modifying a Request
String responseString =
helpers.bytesToString(response);
Matcher matcher =
TOKEN_INPUT_PATTERN.matcher(responseString);
if (matcher.find()) return matcher.group(1);
getFreshToken()
Modifying a Request
String token = getFreshToken();
if (token != null) {
requestString = matcher.replaceAll(
"name="CSRF_TOKEN" value=" + token);
}
messageInfo.setRequest(
requestString.getBytes());
BurpExtender.processHttpMessage()
Modifying a Request
Debugging
• callbacks.printOutput(String)
• callbacks.printError(String)
Utilities
Utilities
Debugging – Stack Traces
• Exception.printStackTrace()
• Get the error OutputStream
• Print a stack trace to the stream
Utilities
Utilities
Bringing it all Together
• BApp Store Challenges
• Base Classes
• Passive Scanning
• GUI Building
Using Base Classes
• com.codemagi.burp.BaseExtender
– com.codemagi.burp.PassiveScan
• com.monikamorrow.burp.BurpSuiteTab
Bringing it all Together
Bringing it all Together
GUI Building
Passive Scanning
@Override
protected void initPassiveScan() {
//set the extension Name
extensionName = "Software Version Checks";
//create a component
rulesTable = new RuleTableComponent(this,
callbacks);
//add component to Burp GUI
mTab = new BurpSuiteTab(extensionName,
callbacks);
mTab.addComponent(rulesTable);
}
Bringing it all Together
Bringing it all Together
Solving BApp Store Challenges
Get the Code
• Burp Suite Utils:
– https://github.com/augustd/burp-suite-utils
• Burp Suite Extension Examples:
– https://github.com/monikamorrow/Burp-Suite-
Extension-Examples
• Software Version Checks
– https://github.com/augustd/burp-suite-software-
version-checks
• GWT Scan
– https://github.com/augustd/burp-suite-gwt-scan
Get the Extensions
• Software Version Checks
• GWT Scan
Also See:
• Error Message Checks
• Session Timeout Test
Available in the Bapp Store
Thank You!
August Detlefsen
augustd@codemagi.com
@codemagi
Monika Morrow
mmorrow@
appsecconsulting.com
@fortytwowho

More Related Content

What's hot

πού είναι ο άρης ;(5) ο, πο, το
πού είναι ο άρης ;(5) ο, πο, τοπού είναι ο άρης ;(5) ο, πο, το
πού είναι ο άρης ;(5) ο, πο, το
Ioanna Chats
 
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS FilterX-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
Masato Kinugawa
 
χρηση συμβόλου ανισότητας, κεφ.12
χρηση συμβόλου ανισότητας, κεφ.12χρηση συμβόλου ανισότητας, κεφ.12
χρηση συμβόλου ανισότητας, κεφ.12
Ioanna Chats
 
ο σακος έχει...
ο σακος έχει...ο σακος έχει...
ο σακος έχει...
Ioanna Chats
 
Ας γνωριστούμε παίζοντας με το ζάρι!
Ας γνωριστούμε παίζοντας με το ζάρι!Ας γνωριστούμε παίζοντας με το ζάρι!
Ας γνωριστούμε παίζοντας με το ζάρι!
theodora tz
 
μόνος στο σκοτάδι 1
μόνος στο σκοτάδι 1μόνος στο σκοτάδι 1
μόνος στο σκοτάδι 1
Ioanna Chats
 
για ομαδοποιηση λεξεων κ
για ομαδοποιηση λεξεων κγια ομαδοποιηση λεξεων κ
για ομαδοποιηση λεξεων κ
Ioanna Chats
 
βολτα στο βουνό.
βολτα στο βουνό.βολτα στο βουνό.
βολτα στο βουνό.
Ioanna Chats
 
θέατρο σκιών 1
θέατρο σκιών 1θέατρο σκιών 1
θέατρο σκιών 1
Ioanna Chats
 
Πού είναι ο Άρης; (2)
Πού είναι ο Άρης; (2)Πού είναι ο Άρης; (2)
Πού είναι ο Άρης; (2)
theodora tz
 
Building Advanced XSS Vectors
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
Rodolfo Assis (Brute)
 
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς
Επανάληψη Αα, Ττ, Ππ, Εε, ΣσςΕπανάληψη Αα, Ττ, Ππ, Εε, Σσς
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς
theodora tz
 
προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7
προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7
προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7Ioanna Chats
 
τιτίνα, η κότα
τιτίνα, η κότατιτίνα, η κότα
τιτίνα, η κότα
Ioanna Chats
 
Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...
Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...
Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...
Παπαδημητρακοπούλου Τζένη
 
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, Οο
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, ΟοΕπανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, Οο
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, Οο
theodora tz
 
Eikones topi, papas, papi, pita,patata, tapa, pipa
Eikones topi, papas, papi, pita,patata, tapa, pipaEikones topi, papas, papi, pita,patata, tapa, pipa
Eikones topi, papas, papi, pita,patata, tapa, pipa
Ioanna Chats
 
ΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣ
ΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣ
ΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣEirini Papazaxariou
 
λέξεις για σκυταλοδρομία συλλαβών
λέξεις για σκυταλοδρομία συλλαβώνλέξεις για σκυταλοδρομία συλλαβών
λέξεις για σκυταλοδρομία συλλαβών
Ioanna Chats
 
Google Hacking 101
Google Hacking 101Google Hacking 101
Google Hacking 101
Sais Abdelkrim
 

What's hot (20)

πού είναι ο άρης ;(5) ο, πο, το
πού είναι ο άρης ;(5) ο, πο, τοπού είναι ο άρης ;(5) ο, πο, το
πού είναι ο άρης ;(5) ο, πο, το
 
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS FilterX-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
X-XSS-Nightmare: 1; mode=attack XSS Attacks Exploiting XSS Filter
 
χρηση συμβόλου ανισότητας, κεφ.12
χρηση συμβόλου ανισότητας, κεφ.12χρηση συμβόλου ανισότητας, κεφ.12
χρηση συμβόλου ανισότητας, κεφ.12
 
ο σακος έχει...
ο σακος έχει...ο σακος έχει...
ο σακος έχει...
 
Ας γνωριστούμε παίζοντας με το ζάρι!
Ας γνωριστούμε παίζοντας με το ζάρι!Ας γνωριστούμε παίζοντας με το ζάρι!
Ας γνωριστούμε παίζοντας με το ζάρι!
 
μόνος στο σκοτάδι 1
μόνος στο σκοτάδι 1μόνος στο σκοτάδι 1
μόνος στο σκοτάδι 1
 
για ομαδοποιηση λεξεων κ
για ομαδοποιηση λεξεων κγια ομαδοποιηση λεξεων κ
για ομαδοποιηση λεξεων κ
 
βολτα στο βουνό.
βολτα στο βουνό.βολτα στο βουνό.
βολτα στο βουνό.
 
θέατρο σκιών 1
θέατρο σκιών 1θέατρο σκιών 1
θέατρο σκιών 1
 
Πού είναι ο Άρης; (2)
Πού είναι ο Άρης; (2)Πού είναι ο Άρης; (2)
Πού είναι ο Άρης; (2)
 
Building Advanced XSS Vectors
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
 
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς
Επανάληψη Αα, Ττ, Ππ, Εε, ΣσςΕπανάληψη Αα, Ττ, Ππ, Εε, Σσς
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς
 
προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7
προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7
προσθετική ανάλυση των αριθμών μεχρι το 5 , κεφ.7
 
τιτίνα, η κότα
τιτίνα, η κότατιτίνα, η κότα
τιτίνα, η κότα
 
Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...
Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...
Ο θείος Παύλος. Φύλλα εργασίας και εποπτικό υλικό για την α΄ δημοτικού. (http...
 
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, Οο
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, ΟοΕπανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, Οο
Επανάληψη Αα, Ττ, Ππ, Εε, Σσς, Κκ, Οο
 
Eikones topi, papas, papi, pita,patata, tapa, pipa
Eikones topi, papas, papi, pita,patata, tapa, pipaEikones topi, papas, papi, pita,patata, tapa, pipa
Eikones topi, papas, papi, pita,patata, tapa, pipa
 
ΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣ
ΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣ
ΔΕΛΤΙΟ ΑΣΤΥΝΟΜΙΚΗΣ ΤΑΥΤΟΤΗΤΑΣ
 
λέξεις για σκυταλοδρομία συλλαβών
λέξεις για σκυταλοδρομία συλλαβώνλέξεις για σκυταλοδρομία συλλαβών
λέξεις για σκυταλοδρομία συλλαβών
 
Google Hacking 101
Google Hacking 101Google Hacking 101
Google Hacking 101
 

Viewers also liked

Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suite
jasonhaddix
 
Burp plugin development for java n00bs (44 con)
Burp plugin development for java n00bs (44 con)Burp plugin development for java n00bs (44 con)
Burp plugin development for java n00bs (44 con)
Marc Wickenden
 
Web Hacking With Burp Suite 101
Web Hacking With Burp Suite 101Web Hacking With Burp Suite 101
Web Hacking With Burp Suite 101
Zack Meyers
 
Burp Suite Starter
Burp Suite StarterBurp Suite Starter
Burp Suite Starter
Fadi Abdulwahab
 
Xss 101
Xss 101Xss 101
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
Hoang Nguyen
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
Luis Goldster
 
BSides Lisbon 2013 - All your sites belong to Burp
BSides Lisbon 2013 - All your sites belong to BurpBSides Lisbon 2013 - All your sites belong to Burp
BSides Lisbon 2013 - All your sites belong to Burp
Tiago Mendo
 
Penetration testing web application web application (in) security
Penetration testing web application web application (in) securityPenetration testing web application web application (in) security
Penetration testing web application web application (in) security
Nahidul Kibria
 
Web-App Remote Code Execution Via Scripting Engines
Web-App Remote Code Execution Via Scripting EnginesWeb-App Remote Code Execution Via Scripting Engines
Web-App Remote Code Execution Via Scripting Engines
c0c0n - International Cyber Security and Policing Conference
 
Writing vuln reports that maximize payouts - Nullcon 2016
Writing vuln reports that maximize payouts - Nullcon 2016Writing vuln reports that maximize payouts - Nullcon 2016
Writing vuln reports that maximize payouts - Nullcon 2016
bugcrowd
 
Advanced SQL injection to operating system full control (whitepaper)
Advanced SQL injection to operating system full control (whitepaper)Advanced SQL injection to operating system full control (whitepaper)
Advanced SQL injection to operating system full control (whitepaper)
Bernardo Damele A. G.
 
Bypass file upload restrictions
Bypass file upload restrictionsBypass file upload restrictions
Bypass file upload restrictions
Mukesh k.r
 
Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016
bugcrowd
 
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web ServicesXXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
Abraham Aranguren
 
Advanced SQL injection to operating system full control (slides)
Advanced SQL injection to operating system full control (slides)Advanced SQL injection to operating system full control (slides)
Advanced SQL injection to operating system full control (slides)
Bernardo Damele A. G.
 
SQL injection: Not Only AND 1=1 (updated)
SQL injection: Not Only AND 1=1 (updated)SQL injection: Not Only AND 1=1 (updated)
SQL injection: Not Only AND 1=1 (updated)
Bernardo Damele A. G.
 
Ethical hacking presentation
Ethical hacking presentationEthical hacking presentation
Ethical hacking presentation
Suryansh Srivastava
 

Viewers also liked (20)

Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suite
 
Burp plugin development for java n00bs (44 con)
Burp plugin development for java n00bs (44 con)Burp plugin development for java n00bs (44 con)
Burp plugin development for java n00bs (44 con)
 
Web Hacking With Burp Suite 101
Web Hacking With Burp Suite 101Web Hacking With Burp Suite 101
Web Hacking With Burp Suite 101
 
Burp Suite Starter
Burp Suite StarterBurp Suite Starter
Burp Suite Starter
 
Xss 101
Xss 101Xss 101
Xss 101
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
BSides Lisbon 2013 - All your sites belong to Burp
BSides Lisbon 2013 - All your sites belong to BurpBSides Lisbon 2013 - All your sites belong to Burp
BSides Lisbon 2013 - All your sites belong to Burp
 
Penetration testing web application web application (in) security
Penetration testing web application web application (in) securityPenetration testing web application web application (in) security
Penetration testing web application web application (in) security
 
Web-App Remote Code Execution Via Scripting Engines
Web-App Remote Code Execution Via Scripting EnginesWeb-App Remote Code Execution Via Scripting Engines
Web-App Remote Code Execution Via Scripting Engines
 
Writing vuln reports that maximize payouts - Nullcon 2016
Writing vuln reports that maximize payouts - Nullcon 2016Writing vuln reports that maximize payouts - Nullcon 2016
Writing vuln reports that maximize payouts - Nullcon 2016
 
Advanced SQL injection to operating system full control (whitepaper)
Advanced SQL injection to operating system full control (whitepaper)Advanced SQL injection to operating system full control (whitepaper)
Advanced SQL injection to operating system full control (whitepaper)
 
Bypass file upload restrictions
Bypass file upload restrictionsBypass file upload restrictions
Bypass file upload restrictions
 
ZN-2015
ZN-2015ZN-2015
ZN-2015
 
Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016
 
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web ServicesXXE Exposed: SQLi, XSS, XXE and XEE against Web Services
XXE Exposed: SQLi, XSS, XXE and XEE against Web Services
 
Advanced SQL injection to operating system full control (slides)
Advanced SQL injection to operating system full control (slides)Advanced SQL injection to operating system full control (slides)
Advanced SQL injection to operating system full control (slides)
 
SQL injection: Not Only AND 1=1 (updated)
SQL injection: Not Only AND 1=1 (updated)SQL injection: Not Only AND 1=1 (updated)
SQL injection: Not Only AND 1=1 (updated)
 
Ethical hacking presentation
Ethical hacking presentationEthical hacking presentation
Ethical hacking presentation
 
Hacking ppt
Hacking pptHacking ppt
Hacking ppt
 

Similar to AppSec USA 2015: Customizing Burp Suite

DevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon Singapore 2019: Workshop - Burp extension writing workshopDevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
Harry Potter
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
James Wong
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
Young Alista
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
Fraboni Ec
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
Tony Nguyen
 
Making the most of your Test Suite
Making the most of your Test SuiteMaking the most of your Test Suite
Making the most of your Test Suiteericholscher
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvm
Anton Shapin
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
Graham Dumpleton
 
Javascript Everywhere
Javascript EverywhereJavascript Everywhere
Javascript Everywhere
Pascal Rettig
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
Mats Bryntse
 
Effizientere WordPress-Plugin-Entwicklung mit Softwaretests
Effizientere WordPress-Plugin-Entwicklung mit SoftwaretestsEffizientere WordPress-Plugin-Entwicklung mit Softwaretests
Effizientere WordPress-Plugin-Entwicklung mit Softwaretests
DECK36
 
[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test
Zsolt Fabok
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA Testers
Javan Rasokat
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
Alfresco Software
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 
Getting Started with Selenium
Getting Started with SeleniumGetting Started with Selenium
Getting Started with Selenium
Dave Haeffner
 
How to Contribute to Apache Usergrid
How to Contribute to Apache UsergridHow to Contribute to Apache Usergrid
How to Contribute to Apache Usergrid
David M. Johnson
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
Fabio Fumarola
 

Similar to AppSec USA 2015: Customizing Burp Suite (20)

DevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon Singapore 2019: Workshop - Burp extension writing workshopDevSecCon Singapore 2019: Workshop - Burp extension writing workshop
DevSecCon Singapore 2019: Workshop - Burp extension writing workshop
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with python
 
Making the most of your Test Suite
Making the most of your Test SuiteMaking the most of your Test Suite
Making the most of your Test Suite
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvm
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
 
Javascript Everywhere
Javascript EverywhereJavascript Everywhere
Javascript Everywhere
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
 
Effizientere WordPress-Plugin-Entwicklung mit Softwaretests
Effizientere WordPress-Plugin-Entwicklung mit SoftwaretestsEffizientere WordPress-Plugin-Entwicklung mit Softwaretests
Effizientere WordPress-Plugin-Entwicklung mit Softwaretests
 
[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA Testers
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Getting Started with Selenium
Getting Started with SeleniumGetting Started with Selenium
Getting Started with Selenium
 
How to Contribute to Apache Usergrid
How to Contribute to Apache UsergridHow to Contribute to Apache Usergrid
How to Contribute to Apache Usergrid
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 

Recently uploaded

SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 

Recently uploaded (20)

SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 

AppSec USA 2015: Customizing Burp Suite

Editor's Notes

  1. Burp Suite is the leading web application vulnerability testing tool. It is available from http://portswigger.net for $299/year –a fraction of the cost of some other commercially available web application testing tools. Burp supports a plugin architecture which allows additional functionality to be developed and integrated with the tool. Anyone can download it and start adding new features to the tool.
  2. I’ve spoken to some of you who are using plugins to do some truly incredible stuff like turning Burp into a full automated testing suite. In the short time we have here today we won’t be able to get into cool stuff like that, but I want to give you the basic tools to get started writing your own extensions.
  3. A subtab of the Extender tab of Burp the BApp Store consists of 66 Burp Extensions that can be installed from within Burp. Many can be installed with one click although extensions that aren’t built natively in Java require a small amount of configuration first.
  4. A subtab of the Extender tab of Burp the BApp Store consists of 66 Burp Extensions that can be installed from within Burp. Many can be installed with one click although extensions that aren’t built natively in Java require a small amount of configuration first.
  5. Installable with just one click Logger++ is one of the most broadly applicable extensions within the BApp Store.
  6. Once an extension has been installed from the BApp Store it will show up on the Extensions subtab. Further details, an output console, and error console are available here in addition to an interface to toggle the extension on/off without uninstalling it.
  7. Logger++ adds a Main tab to the Burp interface. It has an options tab here to configure which tools should be logged in addition to extension specific settings. We'll talk about adding tabs to the Burp interface a little bit later
  8. The View Logs tab of the Logger++ tab shows requests similar to the proxy tab but all requests are logged. Here you can see the tool selected can be seen in the Tool column.
  9. Selecting an item in the Log View allows viewing of the request/response consistent with other locations in Burp.
  10. Jython and Ruby extensions require extra configuration before being installed. Once Jython is downloaded and configured within Burp the Install button will be activated.
  11. Java libraries locations, Jython and Ruby configurations are controlled here.
  12. After locating the jython.jar file restart Burp.
  13. Now Burp treats Jython extensions the same as native Java extensions and WSDL Wizard can be one click installed.
  14. The WSDL Wizard now indicates it is installed on the BApp Store page.
  15. Both the Logger++ and WSDL Wizard extension are installed and active. Their active state can be toggled from the Burp Extensions tab without reinstallation or reloading of Burp.
  16. The WSDL Wizard adds a context menu in the Site map that scans for WSDL files. To use it right click on a target of interest in the Site map to access and select the custom context menu, “Scan for WSDL Files”.
  17. The results of the scan are viewable in the WSDL Wizard output window.
  18. Even though the BApp Store is great it is still only a small slice of what plugins CAN be used for. This is where the extensions that are fit for wide release are located. Proprietary and one off: CSRF token changed on every request. One off extension parsed made request to obtain a new token and added the updated token to each automated request made by Burp. Proprietary: Custom signature required for requests to be accepted by the application.
  19. So we’ve seen how to load an extension from the BApp store. Now lets take a look at how to load a custom extension built from source.
  20. On the Extensions subtab of the Extender tab click the “Add” button to load a custom extension by selecting its .jar, .py, or .rb file.
  21. Select the extension type from the drop down and use the file selector to find the jar for your custom extension.
  22. When using a NetBeans project the .jar file is located in the “dist” folder within the “BurpExtender” folder.
  23. Change the location of the Standard Output and Standard Error if desired and press “Next” to load the extension.
  24. If the extension is loaded successfully the Loaded checkbox will be checked and there will most likely be some text in the Output tab and no text in the Error tab.
  25. You DO NOT need Burp Suite Pro in order to use extensions. But some features won't work unless you have pro Java 1.6.x is the minimum requirement to run Burp, but much newer versions are available. I like NetBeans for its ease of use, but you can use any IDE, or even a simple text editor You can also write Burp extensions in Python using Jython, OR Ruby using Jruby, but Java is the native language of Burp Suite (and me) so that will be the focus of this talk today.
  26. It’s helpful to name MYPROJECT with a useful name so as you mouse over your BurpExtender projects you can find the one you want
  27. In order for Burp Suite to load your extension, all of the Java class files must be contained in a single jar file. Since we are depending on classes from other libraries, we have to update the build scripts provided by NetBeans to build a fat jar.
  28. You should now have a functional starter project!
  29. Passive Scanning Passive scanning allows you to monitor responses for certain values and flag them as issues in the Burp Scanner tab. Burp includes built in passive scanning for things like credit card numbers, previously used passwords, missing headers like X-Frame-Options, etc.
  30. Error messages can reveal valuable details about the inner workings of an application Software version numbers can inform you as to the overall health of an organization’s operations: When they are patched, how up to date, etc. These things are often only revealed in error pages - things that might be responses to Scanner or Intruder requests, but not necessarily seen by a tester. Burp has no facility to detect them on its own. Enter the Plugins!
  31. To build a passive scanner you must implement the IScannerCheck interface and register it as a scanner check with the Extender Callbacks. IScannerCheck requires you to implement 3 methods: doPassiveScan will perform the meat of your scanning. doActiveScan we are not really concerned with because this is not an active scanner. This method can simply return null. consolidateDuplicateIssues is used to ensure that the same issue is not reported multiple times
  32. Registering the extension as a scanner check is a simple method call to the callbacks object and can be done when the extension initializes.
  33. Then we iterate over a list of regular expressions (contained in the MatchRule objects) attempting to match them to the response body. When we find a match, we save it in a ScannerMatch object (just a simple Java bean defined as an inner class) which we will add to Burp’s Scanner results.
  34. Once we have found matches of our regex, we want to add them to the Burp Scanner interface. 1. First, we need to sort the matches. This is important because in order for code highlighting to work, Burp wants all matches to be in order. Next we create a list of ints which are the offsets, the start and stop points, within the response. These are used by Burp to do the code highlighting
  35. Finally return a CustomScanIssue (an POJO object that extends IScanIssue) to be added to the Scanner results tab. The ScanIssue contains all the information that will be displayed in Burp Scanner’s Advisory tab
  36. consolidateDuplicateIssues is called by Burp to ensure that the same issue only shows up once on Burp’s Scanner list. It essentially works like any other Java Comparable: Return -1 to keep the old issue and discard the new one Return 0 to report both issues Return 1 to report the new issue and discard the old one
  37. If that all seems overly complicated, you are not alone. Based on feedback from last year’s presentation I’ve released a set of utilities that attempt to abstract this and make it much easier to get started. These are on my GitHub, the URLs will be at the end of the presentation. All you need to do now is extend from the abstract class com.codemagi.burp.PassiveScan and implement two methods. In initPassiveScan set the extension name and add match rules.
  38. In getScanIssue you add your custom code to return scan issues when a match is found. That’s it! All of the mechanics of scanning are handled for you by extending from PassiveScan
  39. This brings us to our next topic, Active Scanning. Active scanning is excellent for finding injection type vulnerabilities, like SQL injection, XSS and others. Active scanning is more complicated because it requires you to issue requests and look for success in the responses. Here we will be building an example active scanner to test for server-side code execution a JavaScript-based website, for example using node.js.
  40. doActiveScan is called for each insertion point of each request that the Burp Scanner makes. Here we iterate through our injection tests, and for each: Compile a test request, into the checkRequest variable, a byte array
  41. 2. Now you can issue the test request to the server, and get the response. You get the httpService object from the IHttpRequestResponse Now it is just a matter of applying a regex to the response to look for indications that your attack worked. If any matches are found, report the issue.
  42. If any matches are found, report the issue. This is basically the same process as a passive scan, with one exception. Since the active scanner issued an altered request you want to highlight the data you changed in the request, as well as the matches in the response. getPayloadOffsets returns a two position array of ints that indicate the start and stop points of the area to be highlighted in the request.
  43. I’ve also created a base class to simplify building active scans. All you need to do now is extend from the abstract class com.codemagi.burp.ActiveScan and implement two methods. In initActiveScan set the extension name and add match rules.  The only major difference here is that our MatchRule needs to include not only the regular expression to match, but also the attack string that will be added to each insertion point in the request. The attack strings are highlighted here in orange. 
  44. Insertion Points define the locations within a request that contain data that the server will act upon. Insertion points are used by the Active Scanner or Burp Intruder to target attack payloads.
  45. You can see the insertion points that Burp identifies by right-clicking a request and selecting Send to Intruder. Burp does a pretty good job defining insertion points on its own for regular HTTP requests.
  46. But what if your request looks like this? This is a Google Web Toolkit request, and Burp’s built-in request parser doesn’t do such a good job. Somewhere inside that huge block of condensed text, we know that there is data that the server is going to act upon. Sure, in Intruder we can actively select each one, but that is time consuming and… boring. So how can we teach Burp to automatically know where they are?
  47. To have your extension define insertion points, you must implement IScannerInsertionPointProvider. This consists of one method: getInsertionPoints() You also need to register as an insertion point provider. This can be done in the registerExtenderCallbacks method when your extension initializes.
  48. Implementing getInsertionPoints is easy. The method is passed the HTTP request. We parse that request to determine the offsets of the insertion points we want to use. In this case, I did some research and found existing parsers, but they all missed something, so I wound up writing my own. How it works is unimportant, just know that it returns a set of offsets: The start/stop index of the insertion point within the raw request. Once we know the offsets, we create a List of IScannerInsertionPoint objects using the helpers object we got form the callbacks.
  49. Here, insertionPointOffsets is the list of int arrays returned by the parser. Once we know the offsets, we return a List of IScannerInsertionPoint objects using the helpers object we got form the callbacks.
  50. getInsertionPoints() is called automatically when you send an item to the active scanner. If you send a request to the scanner, you can see that it now has 5 insertion points, rather than the 2 that Burp originally identified.
  51. If you want to see the actual insertion points that your extension defines you have to send the request to Intruder. Burp’s own Send to Intruder option will use the built-in insertion points, so you need to add your own option to the right-click menu. To do that you will need to implement the IContextMenuFactory interface and add the createMenuItems() method. You also need to register as a context menu factory. This can be done in the registerExtenderCallbacks method when your extension initializes.
  52. The createMenuItems() method is passed an Invocation object by Burp. This object contains the request or requests that were selected when the mouse was right clicked.
  53. We want to create a new standard Swing JMenuItem and attach an ActionListener that will fire when the menu item is clicked. This method actually wants you to return a Collection of menu items. That way your extension can define more than one menu item.
  54. We create an ActionListener that responds to the Java Swing events that are generated when the user clicks on the menu item. In this case, I just send the selected items to Intruder.
  55. The method called by the MenuItemListener parses each request in turn to see if it can locate GWT insertion points. If insertion points are found, that indicates that the request is a GWT request. Then it invokes the sendToIntruder method of the callbacks object, passing the request with the new insertion points to Intruder.
  56. Additionally, we call setComment on the requestResponse object to add the GWT service method to the comments that appear in the Burp proxy list. baseRR.getComment() returns the original comment for this item so we do not overwrite any comment that the tester may have already added.
  57. Now you can right-click on a request in any of Burp’s Tools and there will be a new option in the context menu to send a GWT request to Intruder.
  58. In Intruder you can now see the 5 new insertion points that our extension defined.
  59. Some web services require you to send a custom header or signature with your requests. I had to test a site that used a constantly rotating anti-CSRF token to each request. Each time a form was submitted, the application would create a new anti-CSRF token. Any attempt to scan this app would fail after the first scanner request was submitted. I needed a way to fetch a valid CSRF token and update the parameters used by the scanner for every single request. To do that you will need to do request modification.
  60. To setup your extension to modify requests you need to implement IHttpListener. This has one method: processHttpMessage() You also need to register the class as HTTP listener. Again, this is done in registerExtenderCallbacks
  61. The processHttpMessage method is called by Burp for each HTTP request before it is sent to the server, and for each response, before it is returned to the browser. The fist thing we need to do then is determine if this is a request or response. Fortunately Burp passes the messageIsRequest boolean to this method to tell you. Next we need to determine whether this is a request for the scanner. Remember, Burp processes this extension’s method for every request. To do that, we check whether the toolFlag parameter matches the value for the scanner tool defined in the callbacks.
  62. If both of those things are true, we next check to see whether the request we are scanning includes a CSRF token. First we convert the request from a byte array to a string, then use regex to look for a match of the CSRF token.
  63. If the request contains a CSRF token then we need to hit the form page, parse out the token from a hidden field, and place the token into the request. To issue the request, use the helpers class to build a request as an array of bytes. Use callbacks.makeHttpRequest to issue the request to the server and get the response as bytes.
  64. There is a bytesToString() helper method to convert the response bytes to a string. Then it is simply a matter of using a regex pattern to find and return the CSRF token
  65. If both of those things are true, we next check to see whether the request we are scanning includes a CSRF token. First we convert the request from a byte array to a string, then use regex to look for a match of the CSRF token. Then finally we set the modified request string into the messageInfo object that Burp passed in to processHttpMessage() so that Burp can send the modified scanner request to the server.
  66. The Burp Extender API now offers methods to print Strings to the Extension’s output and error logs. This was actually a suggestion I submitted on the Burp Suite Forums. If you want to see stack traces you can use e.printStackTrace() and the stack trace will show up in the terminal where you launched Burp.
  67. Calling printOutput causes the message to be written to the Output tab on the Extensions panel, directly within the Burp GUI You can still also select to output to the terminal where you launched Burp, or save it to a file, which could be useful if you want to do further analysis.
  68. You can call printStackTrace and write a stack trace to the terminal where you opened Burp. To show a stack trace in Burp’s own interface, you need to get the actual OutputStream from the callbacks. Then, create a method to print an exception stack trace directly to that OutputStream.
  69. Now stack traces will show up directly within the Burp GUI
  70. Today we talked about using Base Classes, Passive Scanning, and GUI Building. Now let's use these techniques to solve one of the big challenges with the BApp Store: getting your updates published. With the Software Version Checks extension, I am constantly finding new patterns that need to be added to the scanner, but writing new code and asking for a new deployment each time is unreliable.
  71. Starting with the BaseExtender class in burp-suite-util I got access to all of the callbacks and helper methods in the Burp internals. PassiveScan extends from BaseExtender. It takes care of all the details of running a scan. To the PassiveScan I added a BurpSuiteTab that does everything needed to create a new tab in the Burp Suite UI.
  72. Using NetBeans Gui builder I created a table component, which let's you enter a URL to load your match rules from.
  73. Now with this much code I can extend PassiveScan to create a new passive scanner.
  74. Now, when my extension loads, I can click a button to load the set of match rules from a tab delimited file on GitHub. This solves the challenge of deploying updates to the BApp store: There is no longer a need to deploy new code to add a new match rule, I just need to update a file! You can load your own match rules as well by creating your own tab delimited files. Now that this is in GitHub I look forward to all of your pull requests to add new match rules!