sql injection v.2

Post on 23-Jan-2015

1.022 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Highlevel review of SQL injections technique and methods of avoiding security fails

TRANSCRIPT

SQL – injections for Dummies

OWASP Community Lviv

Bohdan Serednytskyi, Security Engineer, R&D Team, SoftServe August, 2012

Easy to exploit!

Common in Web Apps!

Severe impact!

The ability to inject SQL commands into the database engine through an existing application.

SQL-Injection

SQL-Injection Impact

Data Leakage

Data Modification

Denial of Access

Data Loss

Complete host takeover

Vulnerable request can handle Insert, Update, Delete

SQL-Injection

It is a flaw in "web application" development, it is not a DB or web server problem

Almost all SQL databases and programming languages are potentially vulnerable

SQL-Injection Anatomy

SQL-injection

SQL-injection Blind SQL-injection

Blind SQL-injection Double blind SQL-injection

База даних

WEB-server DB

SELECT first_name, last_name FROM users WHERE user_id = '%' or ‘0’=‘0’ union select null, version() #;

Scenario

Attacker

http://example.com/app/accountView?id='%' or ‘0’=‘0’ union select null, version() #

private void queryDB(String u_name){

string sql = “select * from users where name = ‘ “ + u_name + “ ’ ”;

doQuery(sql);}

1) select * from users where name = ‘Jerry’

2) select * from users where name = ‘Jerry’ or ‘1’ =‘1’

Example

1) http://newspaper.com/items.php?id=2 and 1=2

SELECT title, description, body FROM items WHERE ID = 2 and 1=2

2) http://newspaper.com/items.php?id=2 and 1=1

Example Blind SQL-injection

Detection

Discovery of Vulnerabilities

Fields in web form

Script parameters in URL query strings

Values stored in cookies or hidden fields

Fuzzing

Character sequence: ' " ) # || + >

Delay query: ' waitfor delay '0:0:10'--

SQL reserved words with white space delimiters

Protection

String custname = request.getParameter("customerName");String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";

PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( );

Use of Prepared Statements (Parameterized Queries)

String custname = request.getParameter("customerName"); try {

CallableStatement cs = connection.prepareCall("{call sp_getAccountBalance(?)}");

cs.setString(1, custname); ResultSet results = cs.executeQuery();

// … result set handling }

catch (SQLException se) { // … logging and error handling }

Use of Stored Procedures

Escaping all User Supplied Input

OWASP Enterprise Security API

A security solution on the web application level which does not depend on the application itself

Web Application Firewall

Additional Defenses

Least Privilege

White List Input Validation

IDS, IPS

top related