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