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

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Kürzlich hochgeladen (20)

Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

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!