盲注意味着页面不会显示SQL语句的错误,要通过一定的手段来判断构造的注入语句是否正确执行。有两种方式:布尔型和时间型。布尔型是根据页面是否正确显示来判断构造的语句是否正确执行,时间型则是根据页面加载时间是否变化来判断的。
在盲注过程中可以利用到的函数:
length(str):返回str字符串的长度。如执行select

length(database())则会返回当前数据库名称的长度。而单独select

database()则回返回当前数据库的名称。

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)) = 97;当database()即当前数据库的名称中,正数第二个字符为a,则会返回1,当为其他字符时会返回0。可以通过这种方式逐字猜数据库的名称

基于时间的盲注还可以用if语句来判断,如select if ((select database())=’flag’,sleep(10),null)即为判断当当前数据库的名字为flag的时候,数据库程序会休眠10秒。如此也可以通过爆破来得到数据库名。