SlideShare une entreprise Scribd logo
1  sur  72
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Dernier

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

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!