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

常见注入虽然都是在用户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)--+,结果也一样。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章