order_by和常规注入有何区别呢?
位运算符
我们都知道常规的注入,比如id=100这种类型可以查询出一篇文章,如果把100换成99+1它一样可以查出,因为它会做计算。order_by 去判断列数的时候,如果把id=4换成3+1去执行,出来的结果并没有做计算,所以这个运算效果没有意义。
运算符如何运算呢?
位运算是将每一个值转化成一个二进制字符串。按位的“and”或“or”,假设2 | 3,转成字符串就是3。
ORDER BY
常规去使用order by的时候它后面会跟一个数字,通过它来判断列数,但实际上后面的参数应该是什么呢?
参数第一个位置必须是列名,可以用数字来代替,代表某一列。但是实际上后面还有还可以带一个可选参数,比如说ASC和DESC,意思是正序还是倒序升序还是降序,后面括号有个N在里头,它其实后面还可以跟好几列。
先根据ID先做排序,如果排完之后存在同面同变量的,它就会根据你设置的第二个参数进行排序了。
思考:
实际操作中如果能够控制代入ASC和 DESC,是不是也可以做一个注入呢?(大家可以思考操作试一下)
order by 与bool型盲注结合
举栗子
这是国外的某个网站上的一道题目,这道题目如果要访问地快可以使用V**。
可以发现 这里变成了倒序:
为什么返回的顺序是7356呢?
按位或,假设它是3236,那么它的原来结果是1234。
和2去做一个“或”,结果全部计算之后再做排序。
假设正则表达式是以A字母为开头去和结果进行匹配,会发现正则表达式和它是不匹配的,返回值就是0。它的返回值就是和1进行“或”的结果。
如果换成是字母B开头,它去匹配返回结果是1,按位2“或”拿到就是2的页面。
脚本整理分享给大家:
以上内容参考安全牛课堂《CTF从入门到提升》、
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。