基于约束的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