整理思维——等于等于等于?{MySQL条件等号的异常}

MySQL WHERE语句中,等号”=”通常作为判断的条件,然而这个等号却是弱类型的判断,如果忽略了这一点,很容易造成安全问题,以下我便整理一下我所知道的匪夷所思的“相等”.。

 

 1.字符型和数字型

 

 MySQL的等号同PHP一样,对等号两端不同的数据类型都有强制类型转换,如下

 但是却没有PHP的弱类型判断

 这个的应用范围很局限,但是又不得忽视,所以开发者在字段的数据类型的选择以及sql语句的构造方面,要多多注意,防止等号两边类型不相同导致的漏洞。

 

 

  2.尾空格

  MySQL等号对字符串尾部的空格做忽视的处理,所以我们可以构造一个’abc’=’abc   ’的效果,绕过某些特定串整体检查的WAF,不过相对来说,这个也比较鸡肋,因为很少有用字符串直接比对来过滤某些敏感串的。

  这个可以直接用trim函数来避免

 

  3.unicode字符集相似字符

  Unicode字符集所有字符 http://unicode-table.com/cn/

  其中有些相似字符,比如下面这个与a相似

  这样会造成什么后果呢?

  看到了吧,MySQL的等号认为这些相似字符也是相等的,这样的话,我们就可以完全绕过对敏感串的过滤,前提是在UTF8编码下。

 

  4.新型万能密码

 

  username='wupco'=''

  这是有2个等号,然后计算顺序从左到右,

  先计算username='wupco'

  如果没有这个记录,则返回false

  然后false=''

  就成了true

  所以这个就变成了where 1

  达到了万能密码的效果

  • 用支付宝打我
  • 用微信打我

3条回应:“整理思维——等于等于等于?{MySQL条件等号的异常}”

  1. hazzel说道:

    这一篇好叼

  2. XUAN说道:

    username=’wupco’=false 这样可以吗

发表评论

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