盲注,意味着页面不会显示SQL语句的错误,我们要通过一定的手段来判断构造的注入语句是否正确执行。
有两种方式:布尔型和时间型。
布尔型是根据页面是否正确显示来判断我们构造的语句是否正确执行,时间型则是根据页面加载时间是否变化来判断的。
相关函数
盲注需要掌握一些MySQL的相关函数:
length(str):
返回str字符串的长度。如执行select
length(database())
则会返回当前数据库名称的长度。
而单独selectdatabase()则回返回当前数据库的名称。
substr(str, pos, len):
从pos位置取出str字符串的len个字符。
如select substring('abcde', 4, 2)则返回de,pos为负则倒数pos个位置,
如select substring('abcde', -4, 2);返回bc。
ASCII(str):
返回字符串str的最左面字符的ASCII代码值。
如果str是空字符串,返回0。如果str是NULL,返回NULL。如select ASCII('a')返回97。
将上面几个函数组合一下就有布尔值出现。
如 Select ascii(substr(database(),2,1)) = 101;
当database()即当前数据库的名称中,正数第二个字符为e,则会返回1,当为其他字符时会返回0。
逐级替换2为其他数字,就可以逐字猜数据库名称了。其中的=号还可以换成<或者>。
if ((exp1, exp2, exp3):
为条件判断语句。
当exp1的值为true时候,返回exp2,否则返回exp3。
如 select if ((select database())='secur',sleep(10),null)
即为判断当当前数据库的名字为secur的时候,MySQL会休眠10秒。
补充
MySQL的主要内置表和字段信息:
information_schema 库的 TABLES 表,主要字段分别是:
TABLE_SCHEMA : 数据库名
TABLE_NAME:表名