使用order by排序判断返回结果的列数,order by排序判断字段数原理详解

简介: order by排序猜解列数原理详解一、order by的两种使用方式1)按照字段名排序

order by排序猜解列数原理详解

一、order by的两种使用方式

1)按照字段名排序

2)按照索引排序

二、order by怎么判断字段数?

1)正常的排序

3)错误的排序


       使用 「联合注入」(SQL注入漏洞的利用方式之一)进行脱库的时候,需要判断页面显示的 「字段」数量,也就是返回的查询结果包含几个字段,最常用的一种判断方式就是利用 order by 排序判断字段数。

一、order by的两种使用方式

首先,我们准备一个「用户表」,表的内容如下


image.png

1)按照字段名排序

order by 排序可以按照指定的「字段名」排序,我们可以指定 username 字段,让查询结果按照用户名进行排序

image.png

我们可以看到,查询结果按照字段名降序。我们可以指定任意一个「存在」的字段进行排序


2)按照索引排序

除了字段名之外, order by 还可以按照「索引」进行排序,索引就是从左至右将列名按照123排序。我们还是指定 username 字段,让查询结果按照用户名进行排序, username 是查询结果中左边第一个字段,所以对应的索引是 1

image.png

我们可以看到,按照索引排序,查询的结果同字段名排序时一样的


二、order by怎么判断字段数?

原理很简单,就是利用数据库的「报错」机制。


1)正常的排序

首先我们来模拟一下正常的「登录」登录功能的查询语句,根据用户名和密码查询用户的信息

image.png

我们可以看到,查询结果有两列,接下来我们使用 order by 对查询结果进行排序,首先根据「第一列」也就是 username 进行排序

image.png

结果没有变化,这很正常,因为查询结果只有一条数据,再怎么排序也不会发生变化。接下来再根据「第二列」也就是 password 进行排序

image.png

还是没有变化,这很正常。


3)错误的排序

上面返回的查询结果中有两个字段,也就是两列数据,所以我们根据第一列和第二列进行排序都可以正常执行,但如果我们根据「第三列」进行排序呢?

image.png

我们可以看到,数据库报错了,意思是说不认识第三列,这很正常,查询结果总共就只有两列,如果排序的列数大于两列,自然会失败。利用排序的这一特性,我们可以从第一列开始排序,而后依次按照第二列,第三列…等进行排序,哪一列开始报错,就说明字段数是 「报错列数-1」,比如第三列排序时报错,字段数就是2。


相关文章
|
4月前
|
SQL 数据挖掘 数据库
|
7月前
287--寻找重复数-indexOf-&&-sort
287--寻找重复数-indexOf-&&-sort
34 1
|
7月前
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
112 0
|
SQL
解决union查询order by 排序失效的问题
解决union查询order by 排序失效的问题
237 0
|
SQL
ORDER BY:对查询结果进行排序
ORDER BY:对查询结果进行排序
111 0
|
SQL Oracle 关系型数据库
SQL学习之使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一、如果我们只是对于在某个程序中的应用是需要按照如下的方式排序,我们只需在SQL语句级别设置排序方式:
713 0
|
SQL 数据库
数据库sql语句(count(*)和count(字段))
数据库sql语句(count(*)和count(字段))
186 0
|
XML SQL 数据库
除了会排序,你对ORDER BY的用法可能一无所知!(二)
小伙伴们在进行SQL排序时,都能很自然的使用到ORDER BY。不管是默认ASC的升序,还是DESC降序,几乎都是信手拈来。 今天给大家分享一些你可能不知道的ORDER BY用法。
除了会排序,你对ORDER BY的用法可能一无所知!(二)
|
SQL 数据库
除了会排序,你对ORDER BY的用法可能一无所知!(一)
小伙伴们在进行SQL排序时,都能很自然的使用到ORDER BY。不管是默认ASC的升序,还是DESC降序,几乎都是信手拈来。 今天给大家分享一些你可能不知道的ORDER BY用法。
除了会排序,你对ORDER BY的用法可能一无所知!(一)
|
关系型数据库 MySQL 数据库
select distinct去掉重复查询结果|学习笔记
快速学习select distinct去掉重复查询结果
268 0