SQL注入 order by后的注入(Less-46)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入 order by后的注入(Less-46)相关的知识,希望对你有一定的参考价值。

参考技术A 常见注入虽然都是在用户id,帐号密码等地方进行注入,但有时也可能出现注入点在order by语句之后,如下图所示:

由于order by往往是放在语句的最后,后面能输入的内容十分有限,所以此时我们就不能用原先那样传统的方式进行注入了,但只要稍微改变一下结构还是可以进行注入的。不过在此之前我们需要学会判断其是否在order by后面,方法很简单,在参数后面加个asc(结果升序显示)、desc(结果降序显示)来观察其顺序是否改变就行了,如图(这里传入参数不是id,是sort)。

此时说明其为order by后的注入,接下来我们判断order by后面接的参数有没有影响,尝试注入: left(version() ,1)和 right(version(),1) ,发现结果没影响,说明后面参数随意,则此时我们可以进行注入,有以下三种注入方式:
① 直接在sort的参数里注入,如: sort=(select username from users limit 0,1)--+ ,此时将会显示当前表的内容,如图。

这里要注意不论我们注入任何查询,结果能显示的基本都是有限的,我们无法查询到我们查询的信息,例如这里我们注入: sort=(select group_concat(email_id) from emails)--+ ,结果依旧是只能看当前表的内容。

所以这里就是相当于一种只有通过盲注才能获取到信息的状态,于是对于这种order by后的注入我们一般使用盲注,这里我们使用报错注入(当然其他盲注也都可以尝试): sort= (updatexml (1, concat (0x7e,(select database()),0x7e),1))--+ ,如图发现成功报错:。

② 使用一些函数,如rand()等,例如: sort=rand(updatexml(1,concat(0x7e,(select database()),0x7e),1))--+ ,结果一样,就不赘述了。
③ 在后面加and,再加入其他语句,例如: sort=1 and updatexml (1,concat (0x7e, (select database()),0x7e),1)--+ ,结果也一样。

Sqli-labs Less-51 order by后的堆叠注入

关键代码

$id=$_GET[\'sort\'];    
$sql="SELECT * FROM users ORDER BY \'$id\'";
mysqli_multi_query($con1, $sql);

我们此处要进行stacked injection,要注释掉\',此处给出payload:

http://127.0.0.1/sql/Less-51/?sort=1\';create table less51 like users--+

创建表less51

以上是关于SQL注入 order by后的注入(Less-46)的主要内容,如果未能解决你的问题,请参考以下文章

Sqli-labs Less-53 order by后的堆叠注入

Sqli-labs Less-52 order by后的堆叠注入

web安全SQL注入中order by后无法参数化

sql注入中order by的作用

1015.WebGoat SQL注入之 Order by注入解题思路

sql注入进阶-报错注入盲注order by注入二次注入SQL注入绕过速查表