基于约束的SQL注入
Posted bcxc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于约束的SQL注入相关的知识,希望对你有一定的参考价值。
# 漏洞原理
在谈论这种攻击手法之前,首先我们需要了解几个关键知识点。
1、在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。换句话说,‘nocoriander’和‘nocoriander ’几乎是等效的
例如下列代码,和使用用户名‘admin’结果是一样的
1 select * from users where username=‘nocoriander ‘;
2、在所有的INSERT查询中,SQL都会根据varchar(n)来限制字符串的最大长度。也就是说,如果字符串的长度大于"n"个字符的话,那么仅使用字符串的前"n"个字符。比如特定列的长度约束为"5"个字符,那么在插入字符串"nocoriander"时,实际上只能插入字符串的前5个字符,即"nocor"。
# 攻击手法
首先创建数据库 test
给test库添加users表,表中有两个字段username,password
添加数据;username=admin;password=123456
查看users表中的数据
使用另一种方式查看表中的数据,
发现查看的结果是一样的
接下来再次添加数据
username=‘admin ‘; 注意:admin后面跟了空格
password=‘newpwd‘
再次查看表中的数据
给定条件,查看users表中,username为admin的数据
# 漏洞危害
现在,如果使用用户名“admin”和密码“newpwd”登录的话,则所有搜索该用户名的SELECT查询都将返回第一个数据记录,也就是原始的数据记录。
这样的话,攻击者就能够以原始用户身份登录。
# 防御手段
1、将要求或者预期具有唯一性的那些列加上UNIQUE约束。
2、最好使用‘id‘作为数据库表的主键。并且数据应该通过程序中的id进行跟踪
3、可以用手动调整输入参数的限制长度
以上是关于基于约束的SQL注入的主要内容,如果未能解决你的问题,请参考以下文章
以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段