免责声明
本公众号“猎洞时刻”旨在分享网络安全领域的相关知识,仅限于学习和研究之用。本公众号并不鼓励或支持任何非法活动。
本公众号中提供的所有内容都是基于作者的经验和知识,并仅代表作者个人的观点和意见。这些观点和意见仅供参考,不构成任何形式的承诺或保证。
本公众号不对任何人因使用或依赖本公众号提供的信息、工具或技术所造成的任何损失或伤害负责。
本公众号提供的技术和工具仅限于学习和研究之用,不得用于非法活动。任何非法活动均与本公众号的立场和政策相违背,并将依法承担法律责任。
本公众号不对使用本公众号提供的工具和技术所造成的任何直接或间接损失负责。使用者必须自行承担使用风险,同时对自己的行为负全部责任。
本公众号保留随时修改或补充免责声明的权利,而不需事先通知
在SQL语句中, order by 语句用于对结果集进行排序。order by 语句后面需要是字段名或者字段位 置。在使用 PreparedStatement 预编译时,会将传递任意参数使用单引号包裹进而变为了字符串。 如果使用预编译方式执行 order by 语句,设置的字段名会被认为是字符串,而不再是字段名。因此,在使用 order by 时,就不能使用 PreparedStatement 预编译了。
简而言之一句话,使用order by 排序的时候不能使用预编译,只能靠开发者自己写过滤规则,因此很容易造成SQL注入漏洞。
Order by 语法
作用:对查询返回的结果按一列或多列排序。
语法格式:ORDER BY {column_name [ASC|DASC]}[,...n]
注意:order by 语句默认按照升序对记录进行排序,不能使用字符型进行排序,没有效果,比如order by '1'是无效排序。
如何判断排序注入?
第一点,如果输入单引号报错,然后无论怎么样闭合,都是报错,然后修改id值有效。
id =1正常
id =1' 报错
id =1' ' 报错
id =1' ' and ''=' 报错
id =1 '--+ 报错
添加一个单引号后报错
然后根本无法进行闭合。
第二点,然后测试增加数目,可以看出,第一次会变化后,后面一直都一样,如果是普通的整形注入,会一直变化。
id =1 正常
id =2 正常,和id = 1不一样
id =2%2b1 变成了id=1 的返回值
?id=2%2b2 变成了id=1 的返回值
?id=2%2b3 变成了id=1 的返回值
使用2+1之后,返回值又变成了和id=1的一样。
第三点,然后也可以通过逗号进行判断
添加一个1,2如果不报错,并且有的时候内容还会发生改变,那可以判定为排序注入。
下面是正常的整形注入,输入逗号+数字会直接报错。
id = 2,1
如果是在排序注入,情况就不一样了,不会报错。
甚至修改id的数值,返回值还会更改。
然后就可以使用时间盲注来获取数据,这里会进行延迟一秒。
id=if(1=2,1,sleep(1))
第四点最简单有效的是直接添加一个 rand()
直接添加一个rand()后,每次的返回值都不一样。
最后呢,我建议可以在本地mysql数据库中进行测试,然后可以更加深入的了解排序注入。
感谢各位的观看!
欢迎加入猎洞内部圈子
想加入交流群的师傅,可以在主页回复加群,添加我的微信,备注"加群"
原文始发于微信公众号(猎洞时刻):SRC常见漏洞 | 快来学习排序注入的判定方法~
原文始发于微信公众号(猎洞时刻):SRC常见漏洞 | 快来学习排序注入的判定方法~
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论