基于约束的SQL攻击

基于约束的SQL攻击

学习了一个新的基于SQL的攻击方式,应该也是大多数不断堆积【空格】的攻击方式的原理

原理

在SQL中执行字符串处理时,字符串末尾的空格符将会被删除

数据库User表为:

ID Username Password
1 V1ce0ye 123456

User表中字段详细数据为:

类型 长度
ID int 11
Username varchar 20
Password varchar 255

其中Username字段限定字符长度为20,此时如果我们注册一个用户,Username为V1ce0ye[30*空格]1,Password为654321,语句为

INSERT User (Username,Password) VALUES('V1ce0ye             1','654321')

此时数据表中

ID Username Password
1 V1ce0ye 123456
2 V1ce0ye 654321

此时存在两个Username为V1ce0ye的列,而此时以V1ce0ye与654321这个密码登录时,会登录查询到的第一个用户数据也就是原始用户,造成登录。

思考

像这种漏洞危害还是较小,大部分后端都会以最先查到的username的password进行匹配,以最新的几率很小

而且一般管理员用户与普通用户存储在不同的表,不太可能去越权登录到管理员用户,危害大多为普通用户进行登录。

修复

  • 后端代码检测输入数据长度
  • 将需要防护字段设置为UNIQUE
posted @ 2020-04-19 11:17  v1ce0ye  阅读(157)  评论(0编辑  收藏  举报