SlideShare ist ein Scribd-Unternehmen logo
1 von 72
Downloaden Sie, um offline zu lesen
Penetration Testing with
Improved Input Vector
Identification!
William G.J. Halfond, Shauvik Roy
Choudhary, and Alessandro Orso!
College of Computing!
Georgia Institute of Technology!
!
2!
Web Application Overview !
Other
Systems
Web
Server
End Users
Database
3!
Web Application Overview !
Other
Systems
End Users
Web
Application!
HTML
Servlets	

Database
4!
Web Application Overview !
Other
Systems
End Users
HTTP Requests
Web
Application!
HTML
Servlets	

Database
5!
Web Application Overview !
Other
Systems
End Users
HTTP Requests
Web
Application!
HTML
Servlets	

Database
6!
Web Application Overview !
Other
Systems
End Users
HTTP Requests
HTML Pages
Web
Application!
HTML
Servlets	

Database
7!
Penetration Testing Overview !
Other
Systems
White Hat
Tester
Web
Application!
HTML
Servlets	

Database
8!
Penetration Testing Overview !
Other
Systems
White Hat
Tester
!@#$
Web
Application!
HTML
Servlets	

Database
9!
Penetration Testing Overview !
Other
Systems
White Hat
Tester
!@#$
Secret Data!
Web
Application!
HTML
Servlets	

Database
Penetration Testing Phases!
White Hat
Tester
Web
Application!
HTML
Servlets	

Information
Gathering
Attack
Generation
Response
AnalysisReport
Target!
Selection !
Analysis!
Feedback!
Information! Attacks!
Responses!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
Example Web Application Code!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
Example Web Application Code!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
Example Web Application Code!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
Example Web Application Code!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
Example Web Application Code!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
Example Web Application Code!
!!
Our Approach!
Goal:!
Improve penetration testing by improving
information gathering and response analysis.!
Our Approach!
Improvements to penetration testing:!
1.  Information gathering ð Static interface analysis!
2.  Attack Generation ð Generate realistic test-inputs!
3.  Response Analysis ð Produce observable side
effect of attack!
Goal:!
Improve penetration testing by improving
information gathering and response analysis.!
Interfaces	

Interface!
Analysis!
[FSE 2007]!
1) Information Gathering: Interface Analysis!
19!
Web
Application	

HTML	

Servlets
Interfaces	

1) Information Gathering: Interface Analysis!
20!
Web
Application	

HTML	

Servlets	

Compute IP Domains	

Group IPs	

Identify IP Names
Interfaces	

1) Information Gathering: Interface Analysis!
21!
Phase 1: Identify Input Parameters (IP) names!
Phase 2: Compute IP domain information!
Phase 3: Group IP into distinct interfaces!
Web
Application	

HTML	

Servlets	

Compute IP Domains	

Group IPs	

Identify IP Names
Interfaces	

1) Information Gathering: Interface Analysis!
22!
Phase 1: Identify Input Parameters (IP) names!
Phase 2: Compute IP domain information!
Phase 3: Group IP into distinct interfaces!
Web
Application	

HTML	

Servlets	

Compute IP Domains	

Group IPs	

Identify IP Names
Interfaces	

1) Information Gathering: Interface Analysis!
23!
Phase 1: Identify Input Parameters (IP) names!
Phase 2: Compute IP domain information!
Phase 3: Group IP into distinct interfaces!
Web
Application	

HTML	

Servlets	

Compute IP Domains	

Group IPs	

Identify IP Names
1) Interface Analysis: Identify IP Names!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Identify IP Names!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
1) Interface Analysis: Identify IP Names!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
address
login
password
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
password
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
password
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
password
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
password
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:String
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:String
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Compute IP Domains!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) !
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Interface Analysis: Group IPs!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (”!
+ loginName + “, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
userAction
login
login
address
userAction:String
{“createLogin”,
“provideAddress”}
passwordpassword:Stringpassword:Integer
login:String
login:String
address:String
1
14
10
2
15
11
12
13
4
3
5
7
6
9
8
1) Information Gathering: Summary!
Interface! Parameter! Domain! Relevant Values!
1!
userAction! String!
“createLogin”,
“provideAddress”!
login! String!
password! Integer!
2!
userAction! String!
“createLogin”,
“provideAddress”!
login! String!
address! String!
3! userAction! String!
“createLogin”,
“provideAddress”!
2) Attack Generation!
White Hat
Tester
Interface
userAction
login
password
2) Attack Generation!
White Hat
Tester
Interface
userAction
login
password
2) Attack Generation!
White Hat
Tester
Interface
userAction
login
password
userAction = ?
login = <attack string>
password = ?
2) Attack Generation!
White Hat
Tester
Interface
userAction
login
password
userAction = ?
login = <attack string>
password = ?
IP Domain !
Information!
2) Attack Generation!
White Hat
Tester
Interface
userAction
login
password
userAction = ?
login = <attack string>
password = ?
IP Domain !
Information!
userAction = createLogin
login = <attack string>
password = 1234
3) Response Analysis with WASP!
Response Analysis:!
1.  Send attack to web application!
2.  If WASP detects attack!
1.  Block attack!
2.  Send out-of-band signal!
3.  Check for signal on client side!
3) Response Analysis with WASP!
WASP:!
1.  Positive tainting: Identify and mark
developer-trusted strings. Propagate
taint markings at runtime!
2.  Syntax-Aware Evaluation: Check that
all keywords and operators in a query
were formed using marked strings!
Response Analysis:!
1.  Send attack to web application!
2.  If WASP detects attack!
1.  Block attack!
2.  Send out-of-band signal!
3.  Check for signal on client side!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (‘”!
+ loginName + “’, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
3) WASP: Identify Trusted Data!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (‘”!
+ loginName + “’, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
3) WASP: Identify Trusted Data!
public void service(HttpServletRequest req) !
1. String action = req.getParameter(“userAction”)!
2. if (action.equals(“createLogin”)) {!
3. String password = req.getParameter(“password”)!
4. String loginName = req.getParameter(“login”)!
5. if (isInteger(password))!
6. db.execute(“insert into UserTable ”!
+ “(login, password) values (‘”!
+ loginName + “’, ” + password + “)”)!
7. displayAddressForm()!
8. else !
9. displayErrorPage(“Bad password.”)!
10. else if (action.equals(“provideAddress”)) !
11. String loginName = req.getParameter(“login”)!
12. String address = req.getParameter(“address”)!
13. db.execute(“update UserTable set”!
+ “ address =’” + address + “’”!
+ “where loginName=” + loginName)!
14. else!
15. displayCreateLoginForm()!
3) WASP: Identify Trusted Data!
3) WASP: Syntax Aware Evaluation!
Legitimate Query:!
Attempted SQL Injection:!
Input: login = “GJ”, address = “Home”!
Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
update userTable set address = ‘Home’ where login = ‘GJ’!
3) WASP: Syntax Aware Evaluation!
Legitimate Query:!
Attempted SQL Injection:!
Input: login = “GJ”, address = “Home”!
Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
update userTable set address = ‘Home’ where login = ‘GJ’!
3) WASP: Syntax Aware Evaluation!
Legitimate Query:!
Attempted SQL Injection:!
Input: login = “GJ”, address = “Home”!
Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
update userTable set address = ‘Home’ where !
!
login = ‘GJ’ ; drop table userTable -- ’!
update userTable set address = ‘Home’ where login = ‘GJ’!
3) WASP: Syntax Aware Evaluation!
Legitimate Query:!
Attempted SQL Injection:!
Input: login = “GJ”, address = “Home”!
Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
update userTable set address = ‘Home’ where !
!
login = ‘GJ’ ; drop table userTable -- ’!
update userTable set address = ‘Home’ where login = ‘GJ’!
3) WASP: Syntax Aware Evaluation!
Legitimate Query:!
Attempted SQL Injection:!
Input: login = “GJ”, address = “Home”!
Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
Empirical Evaluation!
Goal: !
Evaluate the usefulness of our approach as
compared to a traditional penetration testing
approach.!
!
Research Questions (RQ):!
1.  Runtime of analysis!
2.  Thoroughness of the penetration testing!
3.  Number of vulnerabilities discovered!
61!
Implementation: Baseline Approach!
•  Information Gathering ð OWASP WebScarab!
•  Widely used code-base!
•  Actively maintained!
•  Attack Generation ð SQLMap!
•  Widely used penetration testing tool!
•  Commonly used attack generation heuristics!
•  Response analysis ð WASP[FSE 2006]!
SQLMap++ !
SQLMap integrated with
OWASP WebScarab Spider!
Implementation: Our Approach!
•  Analyzes bytecode of Java Enterprise
Edition (JEE) based web applications!
•  Interface analysis ð WAM[FSE 2007]!
•  Attack generation ð leverages SQLMap!
•  Response analysis ð WASP[FSE 2006]!
SDAPT!
Static and Dynamic Analysis-based
Penetration Testing!
Subject Applications!
Subject! LOC! Classes! Servlets!
Bookstore! 19,402! 28! 27!
Checkers! 5,415! 59! 32!
Classifieds! 10,702! 18! 18!
Daffodil! 18,706! 119! 70!
Employee Directory! 5,529! 11! 9!
Events! 7,164! 13! 12!
Filelister! 8,671! 41! 10!
Office Talk! 4,670! 63! 39!
Portal! 16,089! 28! 27!
RQ1: Runtime!
1!
10!
100!
1000!
10000!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal!
Analysis Time (s)!
SQLMAP++!
SDAPT!
RQ1: Runtime!
1!
10!
100!
1000!
10000!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal!
Analysis Time (s)!
SQLMAP++!
SDAPT!
•  SDAPT ranged from 8 to 40 mins!
•  Positive note: Testing was more thorough!
RQ1: Runtime!
1!
10!
100!
1000!
10000!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal!
Analysis Time (s)!
SQLMAP++!
SDAPT!
•  SDAPT ranged from 8 to 40 mins!
•  Positive note: Testing was more thorough!
RQ2: Thoroughness!
0!
50!
100!
150!
200!
250!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal!
Number of Input Vectors! SQLMAP++!
SDAPT!
0!
10!
20!
30!
40!
50!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal!
Number of Components! SQLMAP++!
SDAPT!
RQ3: Number of Vulnerabilities!
RQ3: Number of Vulnerabilities!
0!
2!
4!
6!
8!
10!
12!
14!
16!
18!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir.! Events! Filelister! Officetalk! Portal!
Number of Discovered Vulnerabilities!
SQLMAP++!
SDAPT!
RQ3: Number of Vulnerabilities!
0!
2!
4!
6!
8!
10!
12!
14!
16!
18!
Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir.! Events! Filelister! Officetalk! Portal!
Number of Discovered Vulnerabilities!
SQLMAP++!
SDAPT!
Average increase: 246%!
Summary of Results!
•  Improvements to penetration testing!
•  Information gathering with static analysis!
•  Response analysis with dynamic detection!
•  Relatively longer analysis time!
•  More thorough and more vulnerabilities
discovered during penetration testing!

Weitere ähnliche Inhalte

Was ist angesagt?

PyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven DevelopmentPyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven DevelopmentTudor Munteanu
 
Cross-Platform Data Access for Android and iPhone
Cross-Platform Data Access for Android and iPhoneCross-Platform Data Access for Android and iPhone
Cross-Platform Data Access for Android and iPhonePeter Friese
 
Learning How to Shape and Configure an OData Feed for High Performing Web Sit...
Learning How to Shape and Configure an OData Feed for High Performing Web Sit...Learning How to Shape and Configure an OData Feed for High Performing Web Sit...
Learning How to Shape and Configure an OData Feed for High Performing Web Sit...Woodruff Solutions LLC
 
Automating Django Functional Tests Using Selenium on Cloud
Automating Django Functional Tests Using Selenium on CloudAutomating Django Functional Tests Using Selenium on Cloud
Automating Django Functional Tests Using Selenium on CloudJonghyun Park
 
JSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked DataJSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked DataGregg Kellogg
 
Линзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция даннымиЛинзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция даннымиAlexander Granin
 
Django workshop : let's make a blog
Django workshop : let's make a blogDjango workshop : let's make a blog
Django workshop : let's make a blogPierre Sudron
 
Example-driven Web API Specification Discovery
Example-driven Web API Specification DiscoveryExample-driven Web API Specification Discovery
Example-driven Web API Specification DiscoveryJavier Canovas
 
Jquery presentation
Jquery presentationJquery presentation
Jquery presentationguest5d87aa6
 

Was ist angesagt? (18)

API Design - 3rd Edition
API Design - 3rd EditionAPI Design - 3rd Edition
API Design - 3rd Edition
 
The django quiz
The django quizThe django quiz
The django quiz
 
Lab final
Lab finalLab final
Lab final
 
PyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven DevelopmentPyCon APAC - Django Test Driven Development
PyCon APAC - Django Test Driven Development
 
HTML5 Essentials
HTML5 EssentialsHTML5 Essentials
HTML5 Essentials
 
Cross-Platform Data Access for Android and iPhone
Cross-Platform Data Access for Android and iPhoneCross-Platform Data Access for Android and iPhone
Cross-Platform Data Access for Android and iPhone
 
Dr.Repi
Dr.Repi Dr.Repi
Dr.Repi
 
Learning How to Shape and Configure an OData Feed for High Performing Web Sit...
Learning How to Shape and Configure an OData Feed for High Performing Web Sit...Learning How to Shape and Configure an OData Feed for High Performing Web Sit...
Learning How to Shape and Configure an OData Feed for High Performing Web Sit...
 
Automating Django Functional Tests Using Selenium on Cloud
Automating Django Functional Tests Using Selenium on CloudAutomating Django Functional Tests Using Selenium on Cloud
Automating Django Functional Tests Using Selenium on Cloud
 
Shell
ShellShell
Shell
 
สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1สปริงเฟรมเวิร์ค4.1
สปริงเฟรมเวิร์ค4.1
 
JSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked DataJSON-LD: JSON for Linked Data
JSON-LD: JSON for Linked Data
 
Линзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция даннымиЛинзы - комбинаторная манипуляция данными
Линзы - комбинаторная манипуляция данными
 
Django workshop : let's make a blog
Django workshop : let's make a blogDjango workshop : let's make a blog
Django workshop : let's make a blog
 
Example-driven Web API Specification Discovery
Example-driven Web API Specification DiscoveryExample-driven Web API Specification Discovery
Example-driven Web API Specification Discovery
 
secure php
secure phpsecure php
secure php
 
Advanced Json
Advanced JsonAdvanced Json
Advanced Json
 
Jquery presentation
Jquery presentationJquery presentation
Jquery presentation
 

Andere mochten auch

Content marketingsummit bro-atlanta-traviswright
Content marketingsummit bro-atlanta-traviswrightContent marketingsummit bro-atlanta-traviswright
Content marketingsummit bro-atlanta-traviswrightSkyword Inc.
 
Cidade Constitucional e a Capital da República - 2014
Cidade Constitucional e a Capital da República - 2014Cidade Constitucional e a Capital da República - 2014
Cidade Constitucional e a Capital da República - 2014Jéssica Medeiros
 
The Intersection of Content Marketing and Influencer Marketing
The Intersection of Content Marketing and Influencer MarketingThe Intersection of Content Marketing and Influencer Marketing
The Intersection of Content Marketing and Influencer MarketingSkyword Inc.
 
8 New Habits of Successful Content Marketers
8 New Habits of Successful Content Marketers8 New Habits of Successful Content Marketers
8 New Habits of Successful Content MarketersSkyword Inc.
 
Pueden crecer las plantas con luz artificial
Pueden crecer las plantas con luz artificialPueden crecer las plantas con luz artificial
Pueden crecer las plantas con luz artificialJuan Pablo Jesus Tostado
 

Andere mochten auch (8)

PROTOKOL
PROTOKOLPROTOKOL
PROTOKOL
 
Content marketingsummit bro-atlanta-traviswright
Content marketingsummit bro-atlanta-traviswrightContent marketingsummit bro-atlanta-traviswright
Content marketingsummit bro-atlanta-traviswright
 
Cidade Constitucional e a Capital da República - 2014
Cidade Constitucional e a Capital da República - 2014Cidade Constitucional e a Capital da República - 2014
Cidade Constitucional e a Capital da República - 2014
 
The Intersection of Content Marketing and Influencer Marketing
The Intersection of Content Marketing and Influencer MarketingThe Intersection of Content Marketing and Influencer Marketing
The Intersection of Content Marketing and Influencer Marketing
 
8 New Habits of Successful Content Marketers
8 New Habits of Successful Content Marketers8 New Habits of Successful Content Marketers
8 New Habits of Successful Content Marketers
 
yousef refaat_cv
yousef refaat_cvyousef refaat_cv
yousef refaat_cv
 
Pueden crecer las plantas con luz artificial
Pueden crecer las plantas con luz artificialPueden crecer las plantas con luz artificial
Pueden crecer las plantas con luz artificial
 
karim haridy c.v
karim haridy c.vkarim haridy c.v
karim haridy c.v
 

Ähnlich wie Penetration Testing with Improved Input Vector Identification

Secure code
Secure codeSecure code
Secure codeddeogun
 
Summit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of codeSummit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of codeAngel Borroy López
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014Guillaume POTIER
 
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasFrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasLoiane Groner
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)Joel Lord
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksHjörtur Hilmarsson
 
The go-start webframework (GTUG Vienna 27.03.2012)
The go-start webframework (GTUG Vienna 27.03.2012)The go-start webframework (GTUG Vienna 27.03.2012)
The go-start webframework (GTUG Vienna 27.03.2012)ungerik
 
Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web developmentJohannes Brodwall
 
Building a real life application in node js
Building a real life application in node jsBuilding a real life application in node js
Building a real life application in node jsfakedarren
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application FrameworkSimon Willison
 
Scalable web application architecture
Scalable web application architectureScalable web application architecture
Scalable web application architecturepostrational
 
HTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAXHTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAXRobert Nyman
 
"Writing Maintainable JavaScript". Jon Bretman, Badoo
"Writing Maintainable JavaScript". Jon Bretman, Badoo"Writing Maintainable JavaScript". Jon Bretman, Badoo
"Writing Maintainable JavaScript". Jon Bretman, BadooYandex
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)Joel Lord
 
Node.js Authentication and Data Security
Node.js Authentication and Data SecurityNode.js Authentication and Data Security
Node.js Authentication and Data SecurityJonathan LeBlanc
 
HTML5 - The 2012 of the Web
HTML5 - The 2012 of the WebHTML5 - The 2012 of the Web
HTML5 - The 2012 of the WebRobert Nyman
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in SwiftPeter Friese
 
Ajax for dummies, and not only.
Ajax for dummies, and not only.Ajax for dummies, and not only.
Ajax for dummies, and not only.Nerd Tzanetopoulos
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldChristian Melchior
 

Ähnlich wie Penetration Testing with Improved Input Vector Identification (20)

Secure code
Secure codeSecure code
Secure code
 
Summit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of codeSummit2014 topic 0066 - 10 enhancements that require 10 lines of code
Summit2014 topic 0066 - 10 enhancements that require 10 lines of code
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014
 
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridasFrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
FrontInBahia 2014: 10 dicas de desempenho para apps mobile híbridas
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & Tricks
 
The go-start webframework (GTUG Vienna 27.03.2012)
The go-start webframework (GTUG Vienna 27.03.2012)The go-start webframework (GTUG Vienna 27.03.2012)
The go-start webframework (GTUG Vienna 27.03.2012)
 
Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web development
 
Building a real life application in node js
Building a real life application in node jsBuilding a real life application in node js
Building a real life application in node js
 
JavaScript Promise
JavaScript PromiseJavaScript Promise
JavaScript Promise
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application Framework
 
Scalable web application architecture
Scalable web application architectureScalable web application architecture
Scalable web application architecture
 
HTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAXHTML5 - The 2012 of the Web - Adobe MAX
HTML5 - The 2012 of the Web - Adobe MAX
 
"Writing Maintainable JavaScript". Jon Bretman, Badoo
"Writing Maintainable JavaScript". Jon Bretman, Badoo"Writing Maintainable JavaScript". Jon Bretman, Badoo
"Writing Maintainable JavaScript". Jon Bretman, Badoo
 
I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)I Don't Care About Security (And Neither Should You)
I Don't Care About Security (And Neither Should You)
 
Node.js Authentication and Data Security
Node.js Authentication and Data SecurityNode.js Authentication and Data Security
Node.js Authentication and Data Security
 
HTML5 - The 2012 of the Web
HTML5 - The 2012 of the WebHTML5 - The 2012 of the Web
HTML5 - The 2012 of the Web
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in Swift
 
Ajax for dummies, and not only.
Ajax for dummies, and not only.Ajax for dummies, and not only.
Ajax for dummies, and not only.
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected World
 

Mehr von Shauvik Roy Choudhary, Ph.D. (10)

Test and docs: Hand in hand
Test and docs: Hand in handTest and docs: Hand in hand
Test and docs: Hand in hand
 
Using Robots for App Testing
Using Robots for App Testing Using Robots for App Testing
Using Robots for App Testing
 
From Manual to Automated Tests - STAC 2015
From Manual to Automated Tests - STAC 2015From Manual to Automated Tests - STAC 2015
From Manual to Automated Tests - STAC 2015
 
PhD Dissertation Defense (April 2015)
PhD Dissertation Defense (April 2015)PhD Dissertation Defense (April 2015)
PhD Dissertation Defense (April 2015)
 
Espresso Barista
Espresso BaristaEspresso Barista
Espresso Barista
 
CheckDroid Startup Madness 2014
CheckDroid Startup Madness 2014CheckDroid Startup Madness 2014
CheckDroid Startup Madness 2014
 
Auto web
Auto webAuto web
Auto web
 
Intro to Html 5
Intro to Html 5Intro to Html 5
Intro to Html 5
 
Symbolic Execution And KLEE
Symbolic Execution And KLEESymbolic Execution And KLEE
Symbolic Execution And KLEE
 
Barcamp Atlanta 2007
Barcamp Atlanta 2007Barcamp Atlanta 2007
Barcamp Atlanta 2007
 

Kürzlich hochgeladen

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Kürzlich hochgeladen (20)

How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

Penetration Testing with Improved Input Vector Identification

  • 1. Penetration Testing with Improved Input Vector Identification! William G.J. Halfond, Shauvik Roy Choudhary, and Alessandro Orso! College of Computing! Georgia Institute of Technology! !
  • 2. 2! Web Application Overview ! Other Systems Web Server End Users Database
  • 3. 3! Web Application Overview ! Other Systems End Users Web Application! HTML Servlets Database
  • 4. 4! Web Application Overview ! Other Systems End Users HTTP Requests Web Application! HTML Servlets Database
  • 5. 5! Web Application Overview ! Other Systems End Users HTTP Requests Web Application! HTML Servlets Database
  • 6. 6! Web Application Overview ! Other Systems End Users HTTP Requests HTML Pages Web Application! HTML Servlets Database
  • 7. 7! Penetration Testing Overview ! Other Systems White Hat Tester Web Application! HTML Servlets Database
  • 8. 8! Penetration Testing Overview ! Other Systems White Hat Tester !@#$ Web Application! HTML Servlets Database
  • 9. 9! Penetration Testing Overview ! Other Systems White Hat Tester !@#$ Secret Data! Web Application! HTML Servlets Database
  • 10. Penetration Testing Phases! White Hat Tester Web Application! HTML Servlets Information Gathering Attack Generation Response AnalysisReport Target! Selection ! Analysis! Feedback! Information! Attacks! Responses!
  • 11. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! Example Web Application Code!
  • 12. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! Example Web Application Code!
  • 13. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! Example Web Application Code!
  • 14. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! Example Web Application Code!
  • 15. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! Example Web Application Code!
  • 16. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! Example Web Application Code! !!
  • 17. Our Approach! Goal:! Improve penetration testing by improving information gathering and response analysis.!
  • 18. Our Approach! Improvements to penetration testing:! 1.  Information gathering ð Static interface analysis! 2.  Attack Generation ð Generate realistic test-inputs! 3.  Response Analysis ð Produce observable side effect of attack! Goal:! Improve penetration testing by improving information gathering and response analysis.!
  • 19. Interfaces Interface! Analysis! [FSE 2007]! 1) Information Gathering: Interface Analysis! 19! Web Application HTML Servlets
  • 20. Interfaces 1) Information Gathering: Interface Analysis! 20! Web Application HTML Servlets Compute IP Domains Group IPs Identify IP Names
  • 21. Interfaces 1) Information Gathering: Interface Analysis! 21! Phase 1: Identify Input Parameters (IP) names! Phase 2: Compute IP domain information! Phase 3: Group IP into distinct interfaces! Web Application HTML Servlets Compute IP Domains Group IPs Identify IP Names
  • 22. Interfaces 1) Information Gathering: Interface Analysis! 22! Phase 1: Identify Input Parameters (IP) names! Phase 2: Compute IP domain information! Phase 3: Group IP into distinct interfaces! Web Application HTML Servlets Compute IP Domains Group IPs Identify IP Names
  • 23. Interfaces 1) Information Gathering: Interface Analysis! 23! Phase 1: Identify Input Parameters (IP) names! Phase 2: Compute IP domain information! Phase 3: Group IP into distinct interfaces! Web Application HTML Servlets Compute IP Domains Group IPs Identify IP Names
  • 24. 1) Interface Analysis: Identify IP Names! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 25. 1) Interface Analysis: Identify IP Names! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction
  • 26. 1) Interface Analysis: Identify IP Names! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login address login password
  • 27. 1) Interface Analysis: Compute IP Domains! userAction login login address password public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 28. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} password public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 29. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} password public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 30. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} password public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 31. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:String public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 32. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:String public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 33. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 34. 1) Interface Analysis: Compute IP Domains! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) ! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()!
  • 35. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String
  • 36. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 37. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 38. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 39. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 40. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 41. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 42. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 43. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 44. 1) Interface Analysis: Group IPs! public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (”! + loginName + “, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! userAction login login address userAction:String {“createLogin”, “provideAddress”} passwordpassword:Stringpassword:Integer login:String login:String address:String 1 14 10 2 15 11 12 13 4 3 5 7 6 9 8
  • 45. 1) Information Gathering: Summary! Interface! Parameter! Domain! Relevant Values! 1! userAction! String! “createLogin”, “provideAddress”! login! String! password! Integer! 2! userAction! String! “createLogin”, “provideAddress”! login! String! address! String! 3! userAction! String! “createLogin”, “provideAddress”!
  • 46. 2) Attack Generation! White Hat Tester Interface userAction login password
  • 47. 2) Attack Generation! White Hat Tester Interface userAction login password
  • 48. 2) Attack Generation! White Hat Tester Interface userAction login password userAction = ? login = <attack string> password = ?
  • 49. 2) Attack Generation! White Hat Tester Interface userAction login password userAction = ? login = <attack string> password = ? IP Domain ! Information!
  • 50. 2) Attack Generation! White Hat Tester Interface userAction login password userAction = ? login = <attack string> password = ? IP Domain ! Information! userAction = createLogin login = <attack string> password = 1234
  • 51. 3) Response Analysis with WASP! Response Analysis:! 1.  Send attack to web application! 2.  If WASP detects attack! 1.  Block attack! 2.  Send out-of-band signal! 3.  Check for signal on client side!
  • 52. 3) Response Analysis with WASP! WASP:! 1.  Positive tainting: Identify and mark developer-trusted strings. Propagate taint markings at runtime! 2.  Syntax-Aware Evaluation: Check that all keywords and operators in a query were formed using marked strings! Response Analysis:! 1.  Send attack to web application! 2.  If WASP detects attack! 1.  Block attack! 2.  Send out-of-band signal! 3.  Check for signal on client side!
  • 53. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (‘”! + loginName + “’, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! 3) WASP: Identify Trusted Data!
  • 54. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (‘”! + loginName + “’, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! 3) WASP: Identify Trusted Data!
  • 55. public void service(HttpServletRequest req) ! 1. String action = req.getParameter(“userAction”)! 2. if (action.equals(“createLogin”)) {! 3. String password = req.getParameter(“password”)! 4. String loginName = req.getParameter(“login”)! 5. if (isInteger(password))! 6. db.execute(“insert into UserTable ”! + “(login, password) values (‘”! + loginName + “’, ” + password + “)”)! 7. displayAddressForm()! 8. else ! 9. displayErrorPage(“Bad password.”)! 10. else if (action.equals(“provideAddress”)) ! 11. String loginName = req.getParameter(“login”)! 12. String address = req.getParameter(“address”)! 13. db.execute(“update UserTable set”! + “ address =’” + address + “’”! + “where loginName=” + loginName)! 14. else! 15. displayCreateLoginForm()! 3) WASP: Identify Trusted Data!
  • 56. 3) WASP: Syntax Aware Evaluation! Legitimate Query:! Attempted SQL Injection:! Input: login = “GJ”, address = “Home”! Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
  • 57. update userTable set address = ‘Home’ where login = ‘GJ’! 3) WASP: Syntax Aware Evaluation! Legitimate Query:! Attempted SQL Injection:! Input: login = “GJ”, address = “Home”! Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
  • 58. update userTable set address = ‘Home’ where login = ‘GJ’! 3) WASP: Syntax Aware Evaluation! Legitimate Query:! Attempted SQL Injection:! Input: login = “GJ”, address = “Home”! Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
  • 59. update userTable set address = ‘Home’ where ! ! login = ‘GJ’ ; drop table userTable -- ’! update userTable set address = ‘Home’ where login = ‘GJ’! 3) WASP: Syntax Aware Evaluation! Legitimate Query:! Attempted SQL Injection:! Input: login = “GJ”, address = “Home”! Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
  • 60. update userTable set address = ‘Home’ where ! ! login = ‘GJ’ ; drop table userTable -- ’! update userTable set address = ‘Home’ where login = ‘GJ’! 3) WASP: Syntax Aware Evaluation! Legitimate Query:! Attempted SQL Injection:! Input: login = “GJ”, address = “Home”! Input: login = “GJ’ ; drop table userTable -- ”, address = “Home”!
  • 61. Empirical Evaluation! Goal: ! Evaluate the usefulness of our approach as compared to a traditional penetration testing approach.! ! Research Questions (RQ):! 1.  Runtime of analysis! 2.  Thoroughness of the penetration testing! 3.  Number of vulnerabilities discovered! 61!
  • 62. Implementation: Baseline Approach! •  Information Gathering ð OWASP WebScarab! •  Widely used code-base! •  Actively maintained! •  Attack Generation ð SQLMap! •  Widely used penetration testing tool! •  Commonly used attack generation heuristics! •  Response analysis ð WASP[FSE 2006]! SQLMap++ ! SQLMap integrated with OWASP WebScarab Spider!
  • 63. Implementation: Our Approach! •  Analyzes bytecode of Java Enterprise Edition (JEE) based web applications! •  Interface analysis ð WAM[FSE 2007]! •  Attack generation ð leverages SQLMap! •  Response analysis ð WASP[FSE 2006]! SDAPT! Static and Dynamic Analysis-based Penetration Testing!
  • 64. Subject Applications! Subject! LOC! Classes! Servlets! Bookstore! 19,402! 28! 27! Checkers! 5,415! 59! 32! Classifieds! 10,702! 18! 18! Daffodil! 18,706! 119! 70! Employee Directory! 5,529! 11! 9! Events! 7,164! 13! 12! Filelister! 8,671! 41! 10! Office Talk! 4,670! 63! 39! Portal! 16,089! 28! 27!
  • 65. RQ1: Runtime! 1! 10! 100! 1000! 10000! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal! Analysis Time (s)! SQLMAP++! SDAPT!
  • 66. RQ1: Runtime! 1! 10! 100! 1000! 10000! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal! Analysis Time (s)! SQLMAP++! SDAPT! •  SDAPT ranged from 8 to 40 mins! •  Positive note: Testing was more thorough!
  • 67. RQ1: Runtime! 1! 10! 100! 1000! 10000! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal! Analysis Time (s)! SQLMAP++! SDAPT! •  SDAPT ranged from 8 to 40 mins! •  Positive note: Testing was more thorough!
  • 68. RQ2: Thoroughness! 0! 50! 100! 150! 200! 250! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal! Number of Input Vectors! SQLMAP++! SDAPT! 0! 10! 20! 30! 40! 50! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir! Events! Filelister! Officetalk! Portal! Number of Components! SQLMAP++! SDAPT!
  • 69. RQ3: Number of Vulnerabilities!
  • 70. RQ3: Number of Vulnerabilities! 0! 2! 4! 6! 8! 10! 12! 14! 16! 18! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir.! Events! Filelister! Officetalk! Portal! Number of Discovered Vulnerabilities! SQLMAP++! SDAPT!
  • 71. RQ3: Number of Vulnerabilities! 0! 2! 4! 6! 8! 10! 12! 14! 16! 18! Bookstore! Checkers! Classifieds! Daffodil! Empl. Dir.! Events! Filelister! Officetalk! Portal! Number of Discovered Vulnerabilities! SQLMAP++! SDAPT! Average increase: 246%!
  • 72. Summary of Results! •  Improvements to penetration testing! •  Information gathering with static analysis! •  Response analysis with dynamic detection! •  Relatively longer analysis time! •  More thorough and more vulnerabilities discovered during penetration testing!