浅谈order by注入

和一个朋友聊起了order by的注入,发现我收藏的一些payload并没有让我发现很多order by的注入,朋友和我说payload没什么太大问题,只是用法不太对,所以趁着有时间就本地测试一下,说说一些payload和使用的场景

0x01: 环境搭建

我本地随便写了一个测试代码,之前的sqli-labs没了,也懒得搭建了

1)字段可控:

2)排序可控:

我这里分成两种情况下来说明,首先是order by后的字段名可控,然后是升降序处存在注入(说实话感觉是有点少见),因为发现这两种注入点的情况下,注入情况是不一样的

0x02: payload应用场景

例如这里的sql语句是:SELECT first_name, last_name, user_id FROM users order by xxx和SELECT first_name, last_name, user_id FROM users order by user_id xxx

这里的xxx是用户可控的

1)rand(true) 与rand(false)

在字段名可控时:

直接替换字段名,加入payload是可用的,true和false返回的结果不一样的

后面接逗号和语句是不可用的(true与true返回结果是相同的)

排序处可控时:

这个payload是用不了的,true和false返回结果都是相同的

在desc或者asc可控:

写入的语句需要前面有逗号才会执行,直接输入会报错,空格也是不允许的

2),1和,0

这个就是两个通用了,在两个点都能测试注入

字段名可控

排序处可控

3)if(1=(SELECT 1 REGEXP IF(1=1,1,0×00)),1,1);

字段名可控

改变1=1和1=2即可看到返回结果不同

后面接逗号在接语句也是可以的

排序处可控

4)时间注入

字段名可控

(select*from(select+sleep(3))a)

逗号接语句也是可以的

排序处可控

发表评论

电子邮件地址不会被公开。 必填项已用*标注