1. What is SQL Injection?



Similar documents
Check list for web developers

Web Application Security

Serious Threat. Targets for Attack. Characterization of Attack. SQL Injection 4/9/2010 COMP On August 17, 2009, the United States Justice

SQL INJECTION ATTACKS By Zelinski Radu, Technical University of Moldova

WebCruiser Web Vulnerability Scanner User Guide

SQL Injection January 23, 2013

A SQL Injection : Internal Investigation of Injection, Detection and Prevention of SQL Injection Attacks

FINAL DoIT v.4 PAYMENT CARD INDUSTRY DATA SECURITY STANDARDS APPLICATION DEVELOPMENT AND MAINTENANCE PROCEDURES

SQL Injection Attack Lab

Exploits: XSS, SQLI, Buffer Overflow

Advanced Web Technology 10) XSS, CSRF and SQL Injection 2

WebCruiser User Guide

Testing Web Applications for SQL Injection Sam Shober

Advanced Web Security, Lab

How I hacked PacketStorm ( )

VIDEO intypedia007en LESSON 7: WEB APPLICATION SECURITY - INTRODUCTION TO SQL INJECTION TECHNIQUES. AUTHOR: Chema Alonso

Webapps Vulnerability Report

SECURE APPLICATION DEVELOPMENT CODING POLICY OCIO TABLE OF CONTENTS

Web Application Security. Vulnerabilities, Weakness and Countermeasures. Massimo Cotelli CISSP. Secure

Toward A Taxonomy of Techniques to Detect Cross-site Scripting and SQL Injection Vulnerabilities

SQL Injection for newbie

Hack Proof Your Webapps

SQL Injection Attack Lab Using Collabtive

SQL Injection. By Artem Kazanstev, ITSO and Alex Beutel, Student

Adobe Systems Incorporated

Intrusion detection for web applications

SQL Injection Attacks. Prof. Jim Whitehead CMPS 183: Spring 2006 May 17, 2006

1. Building Testing Environment

External Network & Web Application Assessment. For The XXX Group LLC October 2012

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

BLIND SQL INJECTION (UBC)

Maintaining Stored Procedures in Database Application

Still Aren't Doing. Frank Kim

An Introduction to Application Security In ASP.NET Environments. Houston.NET User Group. February 23 rd, 2006

SQL Injection Vulnerabilities in Desktop Applications

Introduction to Web Application Security. Microsoft CSO Roundtable Houston, TX. September 13 th, 2006

Cracking the Perimeter via Web Application Hacking. Zach Grace, CISSP, CEH January 17, Mega Conference

Detecting SQL Injection Vulnerabilities in Web Services

Integrated Network Vulnerability Scanning & Penetration Testing SAINTcorporation.com

Application Layer Encryption: Protecting against Application Logic and Session Theft Attacks. Whitepaper

External Vulnerability Assessment. -Technical Summary- ABC ORGANIZATION

WebCruiser Web Vulnerability Scanner User Guide

INTRUSION PROTECTION AGAINST SQL INJECTION ATTACKS USING REVERSE PROXY

WHITE PAPER. FortiWeb and the OWASP Top 10 Mitigating the most dangerous application security threats

Web Application Hacking (Penetration Testing) 5-day Hands-On Course

Advanced PostgreSQL SQL Injection and Filter Bypass Techniques

INF 212 ANALYSIS OF PROG. LANGS ADVERSITY. Instructors: Crista Lopes Copyright Instructors.

Security Test s i t ng Eileen Donlon CMSC 737 Spring 2008

Network Threats and Vulnerabilities. Ed Crowley

Web application security: Testing for vulnerabilities

How To Fix A Web Application Security Vulnerability

SQL Injection in web applications

Q&A for Zend Framework Database Access

Zend Framework Database Access

Ruby on Rails Secure Coding Recommendations

SQL Injec*on Preven*on. May 3rd 2012

Web Application Threats and Vulnerabilities Web Server Hacking and Web Application Vulnerability

Detection of SQL Injection Attacks by Combining Static Analysis and Runtime Validation

EC-Council CAST CENTER FOR ADVANCED SECURITY TRAINING. CAST 619 Advanced SQLi Attacks and Countermeasures. Make The Difference CAST.

Agenda. SQL Injection Impact in the Real World Attack Scenario (1) CHAPTER 8 SQL Injection

The purpose of this report is to educate our prospective clients about capabilities of Hackers Locked.

An Introduction to SQL Injection Attacks for Oracle Developers. January 2004 INTEGRIGY. Mission Critical Applications Mission Critical Security

WEB FOR PENTESTER II By Louis Nyffenegger

With so many web applications, universities have a huge attack surface often without the IT security budgets or influence to back it up.

SECURING APACHE : THE BASICS - III

Database System Security. Paul J. Wagner UMSSIA 2008

AUTOMATE CRAWLER TOWARDS VULNERABILITY SCAN REPORT GENERATOR

How to achieve PCI DSS Compliance with Checkmarx Source Code Analysis

CHAPTER 5 INTELLIGENT TECHNIQUES TO PREVENT SQL INJECTION ATTACKS

Why Should You Care About Security Issues? SySmox WEB security Top seven ColdFusion Security Issues

Manipulating Microsoft SQL Server Using SQL Injection

How? $ & developers defeat the most famous web vulnerability scanners or how to recognize old friends

Web Application Security

Analysis of SQL injection prevention using a proxy server

Start Secure. Stay Secure. Blind SQL Injection. Are your web applications vulnerable? By Kevin Spett

REDCap General Security Overview

Web Applications Security: SQL Injection Attack

How To Write A Web Application Vulnerability Scanner And Security Auditor

Creating Stronger, Safer, Web Facing Code. JPL IT Security Mary Rivera June 17, 2011

Application Security Testing. Erez Metula (CISSP), Founder Application Security Expert

JOOMLA SECURITY. ireland website design. by Oliver Hummel. ADDRESS Unit 12D, Six Cross Roads Business Park, Waterford City

Equipment Room Database and Web-Based Inventory Management

MapReduce. MapReduce and SQL Injections. CS 3200 Final Lecture. Introduction. MapReduce. Programming Model. Example

Is Drupal secure? A high-level perspective on web vulnerabilities, Drupal s solutions, and how to maintain site security

Web Application Security Part 1

Understanding Sql Injection

Online Vulnerability Scanner Quick Start Guide

WordPress Security Scan Configuration

Contemporary Web Application Attacks. Ivan Pang Senior Consultant Edvance Limited

Automating SQL Injection Exploits

Automated vulnerability scanning and exploitation

Secure Web Application Coding Team Introductory Meeting December 1, :00 2:00PM Bits & Pieces Room, Sansom West Room 306 Agenda

White Paper BMC Remedy Action Request System Security

Nikolay Zaynelov Annual LUG-БГ Meeting nikolay.zaynelov.com

Thick Client Application Security

Detecting (and even preventing) SQL Injection Using the Percona Toolkit and Noinject!

Blind SQL Injection Are your web applications vulnerable?

ABC LTD EXTERNAL WEBSITE AND INFRASTRUCTURE IT HEALTH CHECK (ITHC) / PENETRATION TEST

Transcription:

SQL Injection 1. What is SQL Injection?...2 2. Forms of vulnerability...3 2.1. Incorrectly filtered escape characters...3 2.2. Incorrect type handling...3 2.3. Vulnerabilities inside the database server...4 2.4. Blind SQL injection...4 2.4.1. Conditional responses...4 2.4.2. Conditional errors...5 2.4.3. Time delays...5 3. Preventing SQL injection...5 3.1. Parameterized statements...5 3.1.1. Enforcement at the database level...6 3.1.2. Enforcement at the coding level...6 3.2. Escaping...7 3.3. Use Web Vulnerability Scanner...7

1. What is SQL Injection? SQL injection is a code injection technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and thereby unexpectedly executed. It is an instance of a more general class of vulnerabilities that can occur whenever one programming or scripting language is embedded inside another. SQL Injection is one of the most common application layer attack techniques used today. Here is a POC( Proof of Concept) by Scanning Tool: WebCruiser - Web Vulnerability Scanner:

2. Forms of vulnerability 2.1. Incorrectly filtered escape characters This form of SQL injection occurs when user input is not filtered for escape characters and is then passed into an SQL statement. This results in the potential manipulation of the statements performed on the database by the end user of the application. The following line of code illustrates this vulnerability: statement = "SELECT * FROM users WHERE name = '" + username + "';" This SQL code is designed to pull up the records of the specified username from its table of users. However, if the "username" variable is crafted in a specific way by a malicious user, the SQL statement may do more than the code author intended. For example, setting the "username" variable as a' or 't'='t renders this SQL statement by the parent language: SELECT * FROM users WHERE name = 'a' OR 't'='t'; If this code were to be used in an authentication procedure then this example could be used to force the selection of a valid username because the evaluation of 't'='t' is always true. The following value of "username" in the statement below would cause the deletion of the "users" table as well as the selection of all data from the "userinfo" table (in essence revealing the information of every user), using an API that allows multiple statements: a';drop TABLE users; SELECT * FROM userinfo WHERE 't' = 't This input renders the final SQL statement as follows: SELECT * FROM users WHERE name = 'a';drop TABLE users; SELECT * FROM userinfo WHERE 't' = 't'; While most SQL server implementations allow multiple statements to be executed with one call in this way, some SQL APIs such as PHP's mysql_query() do not allow this for security reasons. This prevents attackers from injecting entirely separate queries, but doesn't stop them from modifying queries. 2.2. Incorrect type handling This form of SQL injection occurs when a user supplied field is not strongly typed or is not checked for type constraints. This could take place when a numeric field is to be used in a SQL statement, but the programmer makes no checks to validate that the user supplied input is numeric. For example: statement := "SELECT * FROM userinfo WHERE id = " + a_variable + ";"

It is clear from this statement that the author intended a_variable to be a number correlating to the "id" field. However, if it is in fact a string then the end user may manipulate the statement as they choose, thereby bypassing the need for escape characters. For example, setting a_variable to 1;DROP TABLE users will drop (delete) the "users" table from the database, since the SQL would be rendered as follows: SELECT * FROM userinfo WHERE id=1;drop TABLE users; 2.3. Vulnerabilities inside the database server Sometimes vulnerabilities can exist within the database server software itself, as was the case with the MySQL server's mysql_real_escape_string() function. This would allow an attacker to perform a successful SQL injection attack based on bad Unicode characters even if the user's input is being escaped. This bug was patched with the release of version 5.0.22 (released on 24th May 06). 2.4. Blind SQL injection Blind SQL Injection is used when a web application is vulnerable to an SQL injection but the results of the injection are not visible to the attacker. The page with the vulnerability may not be one that displays data but will display differently depending on the results of a logical statement injected into the legitimate SQL statement called for that page. This type of attack can become time-intensive because a new statement must be crafted for each bit recovered. There are several tools that can automate these attacks once the location of the vulnerability and the target information has been established. 2.4.1. Conditional responses One type of blind SQL injection forces the database to evaluate a logical statement on an ordinary application screen. SELECT booktitle FROM booklist WHERE bookid = 'OOk14cd' AND 1=1; will result in a normal page while SELECT booktitle FROM booklist WHERE bookid = 'OOk14cd' AND 1=2; will likely give a different result if the page is vulnerable to a SQL injection. An injection like this may suggest to the attacker that a blind SQL injection is possible, leaving the attacker to devise statements that evaluate to true or false depending on the contents of another column or table outside of the SELECT statement's column list.

2.4.2. Conditional errors This type of blind SQL injection causes an SQL error by forcing the database to evaluate a statement that causes an error if the WHERE statement is true. For example, SELECT 1/0 FROM users WHERE username='ralph'; the division by zero will only be evaluated and result in an error if user Ralph exists. 2.4.3. Time delays Time Delays are a type of blind SQL injection that cause the SQL engine to execute a long running query or a time delay statement depending on the logic injected. The attacker can then measure the time the page takes to load to determine if the injected statement is true. 3. Preventing SQL injection To protect against SQL injection, user input must not directly be embedded in SQL statements. Instead, parameterized statements must be used (preferred), or user input must be carefully escaped or filtered. 3.1. Parameterized statements With most development platforms, parameterized statements can be used that work with parameters (sometimes called placeholders or bind variables) instead of embedding user input in the statement. In many cases, the SQL statement is fixed. The user input is then assigned (bound) to a parameter. This is an example using Java and the JDBC API: PreparedStatement prep = conn.preparestatement("select * FROM USERS WHERE USERNAME=? AND PASSWORD=?"); prep.setstring(1, username); prep.setstring(2, password); prep.executequery(); Similarly, in C#: using (SqlCommand mycommand = new SqlCommand("SELECT * FROM USERS WHERE USERNAME=@username AND PASSWORD=HASHBYTES('SHA1', @password)", myconnection)) { mycommand.parameters.addwithvalue("@username", user);

mycommand.parameters.addwithvalue("@password", pass); myconnection.open(); SqlDataReader myreader = mycommand.executereader())... } In PHP version 5 and above, there are multiple choices for using parameterized statements. The PDO[5] database layer is one of them: $db = new PDO('pgsql:dbname=database'); $stmt = $db->prepare("select priv FROM testusers WHERE username=:username AND password=:password"); $stmt->bindparam(':username', $user); $stmt->bindparam(':password', $pass); $stmt->execute(); There are also vendor-specific methods; for instance, using the mysqli[6] extension for MySQL 4.1 and above to create parameterized statements: $db = new mysqli("localhost", "user", "pass", "database"); $stmt = $db -> prepare("select priv FROM testusers WHERE username=? AND password=?"); $stmt -> bind_param("ss", $user, $pass); $stmt -> execute(); In ColdFusion, the CFQUERYPARAM statement is useful in conjunction with the CFQUERY statement to nullify the effect of SQL code passed within the CFQUERYPARAM value as part of the SQL clause.[8][9]. An example is below. <cfquery name="recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#url.comment_id#" cfsqltype="cf_sql_numeric"> </cfquery> 3.1.1. Enforcement at the database level Currently only the H2 Database Engine supports the ability to enforce query parameterization.[10] However, one drawback is that query-by-example may not be possible or practical because it's difficult to implement query-by-example using parametrized queries. 3.1.2. Enforcement at the coding level Using object-relational mapping libraries avoids the need to write SQL code. The ORM library in effect will generate parameterized SQL statements from

object-oriented code. 3.2. Escaping A straight-forward, though error-prone, way to prevent injections is to escape dangerous characters. One of the reasons for it being error prone is that it is a type of blacklist which is less robust than a whitelist. For instance, every occurrence of a single quote (') in a parameter must be replaced by two single quotes ('') to form a valid SQL string literal. In PHP, for example, it is usual to escape parameters using the function mysql_real_escape_string before sending the SQL query: $query = sprintf("select * FROM Users where UserName='%s' and Password='%s'", mysql_real_escape_string($username), mysql_real_escape_string($password)); mysql_query($query); 3.3. Use Web Vulnerability Scanner WebCruiser - Web Vulnerability Scanner WebCruiser - Web Vulnerability Scanner, a compact but powerful web security scanning tool! It has a Crawler and Vulnerability Scanner(SQL Injection, Cross Site Scripting, XPath Injection etc. ). It can support not only scanning website, but also Prooving of concept for web vulnerabilities: SQL Injection, Cross Site Scripting, XPath Injection etc. So, WebCruiser is also a SQL Injector, a XPath Injector, and a Cross Site Scripting tool! You can download it from http://sec4app.com/.