延时盲注关于优先级的发现

今天朋友问我,使用and 和or 进行延时注入会返回不同的结果。我思索了一下,貌似确实有这么个印象。回家后又总结了下关于 and 与 or 进行延时盲注时的不同。

延时盲注关于优先级的发现

下面看例子

当使用and进行连接时,第一条执行了sleep(1)函数,而第二条没有执行sleep(1)函数

当使用or进行连接时,第一条没有执行sleep(1),而第二条执行了sleep(1),与and的结论是相反的。

经过上网查询并经自己测试之后,发现mysql的查询相关策略(可能有误,欢迎指正):

  • mysql执行顺序为从左到右
  • 在select后,多个and中,如果左侧有恒为0的值,则直接返回0,不执行同级右侧的其他语句。在where后,多个and中,如果两侧有恒为0的值,则直接返回0

  • 在select后,多个or连接的语句中如果左侧有值恒为1,则直接返回1,不执行同级右侧的其他语句。在where后,多个or连接的语句如果两侧有值恒为1,则直接返回1。

  • and优先级大于or

  • 在select后,当既有and又有or时,将and及其左右连接的值看做一个整体(两侧加小括号,因为and优先级比or高)。若处理后or左侧连接的值为恒为1,则直接返回1,不执行右侧内容

  • 在where后,若and和or同时出现,将and两侧连接的数值看成一个整体,先检查or两侧是否有直接连接恒为1的值,若有,直接返回1,若没有,再从左到右依次进行计算。

最后附一张mysql运算符的优先级

参考链接1

参考链接2

本文标题:延时盲注关于优先级的发现

文章作者:暮沉沉

发布时间:2019年01月13日 - 20:01

最后更新:2019年01月13日 - 20:01

原始链接:http://maplege.github.io/2019/01/13/mysql-sleep-and-or/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------