在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
注册页面
开始测试:
以admin为例,向我的用户名中输入”admin x”,因为username的最大长度是10 , admin为5个长度,所以后面追加5个空格,后面加个x是为了防止空格被过滤掉。
提交 , 查看数据库
id username password
1 admin 123456
2 test 123456
3 admin 123456
缺陷 : 当登录时候,如果是从username中查询出密码,再进行匹配的时候,由于一般查询是默认排序,id从小到到排列,所以我们插入的新数据id比老的大,将无法读取到我们的密码
版权声明:未经博主允许不得转载。http://www.smister.com/post-12.html