在Mysql的配置选项中,有一个sql_mode选项,当Mysql的sql-mode设置为default时,既没有开启STRICT_ALL_TABLES选项时,Mysql对于用户插入的超长值只会提示warning,而不是error,这就可能导致’截断’问题.

以用户注册来为例,用户表有id,username varchar(10),password字段。
漏洞满足条件:
    1、username没有设置为唯一索引,可有多个同样的名称。
    2、在插入数据的验证中没有验证最长长度
    3、sql-mode为default

准备前:
    数据库现有
    id username password
    1    admin  123456
    2    test    123456

注册页面
      2016122402384635801.png  
    
开始测试:
    以admin为例,向我的用户名中输入”admin     x”,因为username的最大长度是10 , admin为5个长度,所以后面追加5个空格,后面加个x是为了防止空格被过滤掉。
      2016122402384650630.png  
    提交 , 查看数据库
    id username password
    1    admin  123456
    2    test    123456
    3    admin  123456
 

缺陷 : 当登录时候,如果是从username中查询出密码,再进行匹配的时候,由于一般查询是默认排序,id从小到到排列,所以我们插入的新数据id比老的大,将无法读取到我们的密码

版权声明:未经博主允许不得转载。http://smister.com/post-12.html