SlideShare a Scribd company logo
1 of 104
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

[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
Different Methodology To Recon Your Targets
Different Methodology To Recon Your TargetsDifferent Methodology To Recon Your Targets
Different Methodology To Recon Your TargetsEslamAkl
 
Understanding Windows Access Token Manipulation
Understanding Windows Access Token ManipulationUnderstanding Windows Access Token Manipulation
Understanding Windows Access Token ManipulationJustin Bui
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]MongoDB
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundDirkjanMollema
 
Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)Svetlin Nakov
 
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webappsMikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webappshacktivity
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우Arawn Park
 
PSConfEU - Offensive Active Directory (With PowerShell!)
PSConfEU - Offensive Active Directory (With PowerShell!)PSConfEU - Offensive Active Directory (With PowerShell!)
PSConfEU - Offensive Active Directory (With PowerShell!)Will Schroeder
 
Hexagonal architecture & Elixir
Hexagonal architecture & ElixirHexagonal architecture & Elixir
Hexagonal architecture & ElixirNicolas Carlo
 
Atomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterAtomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterRedis Labs
 
Passwords#14 - mimikatz
Passwords#14 - mimikatzPasswords#14 - mimikatz
Passwords#14 - mimikatzBenjamin Delpy
 
Hunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows EnvironmentHunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows EnvironmentTeymur Kheirkhabarov
 
An Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops ManagerAn Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops ManagerMongoDB
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축Youngil Cho
 
Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...
Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...
Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...Intel® Software
 
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db   tópico avançado - modelagem de dados e boas práticas para escalarDynamo db   tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalarAmazon Web Services LATAM
 

What's hot (20)

[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
Different Methodology To Recon Your Targets
Different Methodology To Recon Your TargetsDifferent Methodology To Recon Your Targets
Different Methodology To Recon Your Targets
 
Understanding Windows Access Token Manipulation
Understanding Windows Access Token ManipulationUnderstanding Windows Access Token Manipulation
Understanding Windows Access Token Manipulation
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
Broken access controls
Broken access controlsBroken access controls
Broken access controls
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHound
 
Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)Cryptography for Absolute Beginners (May 2019)
Cryptography for Absolute Beginners (May 2019)
 
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webappsMikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
Mikhail Egorov - Hunting for bugs in Adobe Experience Manager webapps
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
 
PSConfEU - Offensive Active Directory (With PowerShell!)
PSConfEU - Offensive Active Directory (With PowerShell!)PSConfEU - Offensive Active Directory (With PowerShell!)
PSConfEU - Offensive Active Directory (With PowerShell!)
 
Hexagonal architecture & Elixir
Hexagonal architecture & ElixirHexagonal architecture & Elixir
Hexagonal architecture & Elixir
 
Google authentication
Google authenticationGoogle authentication
Google authentication
 
Atomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas HunterAtomicity In Redis: Thomas Hunter
Atomicity In Redis: Thomas Hunter
 
Passwords#14 - mimikatz
Passwords#14 - mimikatzPasswords#14 - mimikatz
Passwords#14 - mimikatz
 
Hunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows EnvironmentHunting for Credentials Dumping in Windows Environment
Hunting for Credentials Dumping in Windows Environment
 
An Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops ManagerAn Introduction to MongoDB Ops Manager
An Introduction to MongoDB Ops Manager
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
 
Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...
Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...
Simple Single Instruction Multiple Data (SIMD) with the Intel® Implicit SPMD ...
 
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db   tópico avançado - modelagem de dados e boas práticas para escalarDynamo db   tópico avançado - modelagem de dados e boas práticas para escalar
Dynamo db tópico avançado - modelagem de dados e boas práticas para escalar
 
Linux Hardening - nullhyd
Linux Hardening - nullhydLinux Hardening - nullhyd
Linux Hardening - nullhyd
 

Viewers also liked

Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suitejasonhaddix
 
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp ExtensionsCusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp ExtensionsAugust Detlefsen
 
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 101Zack Meyers
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonHoang Nguyen
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonLuis 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 BurpTiago 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) securityNahidul Kibria
 
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 2016bugcrowd
 
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 restrictionsMukesh k.r
 
Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016Bug Bounty Hunter Methodology - Nullcon 2016
Bug Bounty Hunter Methodology - Nullcon 2016bugcrowd
 
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 ServicesAbraham 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.
 

Viewers also liked (20)

Pentesting Using Burp Suite
Pentesting Using Burp SuitePentesting Using Burp Suite
Pentesting Using Burp Suite
 
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp ExtensionsCusomizing Burp Suite - Getting the Most out of Burp Extensions
Cusomizing Burp Suite - Getting the Most out of Burp Extensions
 
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
 

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 workshopDevSecCon
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonHarry Potter
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonFraboni Ec
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonTony Nguyen
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonJames Wong
 
Extending burp with python
Extending burp with pythonExtending burp with python
Extending burp with pythonYoung Alista
 
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 jvmAnton 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 ApplicationsGraham Dumpleton
 
Javascript Everywhere
Javascript EverywhereJavascript Everywhere
Javascript EverywherePascal Rettig
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchMats Bryntse
 
Effizientere WordPress-Plugin-Entwicklung mit Softwaretests
Effizientere WordPress-Plugin-Entwicklung mit SoftwaretestsEffizientere WordPress-Plugin-Entwicklung mit Softwaretests
Effizientere WordPress-Plugin-Entwicklung mit SoftwaretestsDECK36
 
[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to TestZsolt Fabok
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersJavan 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 PracticesAlfresco 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 SeleniumDave Haeffner
 
How to Contribute to Apache Usergrid
How to Contribute to Apache UsergridHow to Contribute to Apache Usergrid
How to Contribute to Apache UsergridDavid 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 sbtFabio 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

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 

Recently uploaded (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 

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!