原理:
当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。
示例: 字符型注入
以靶场pikachu为例。
假设输入vince
你会发现刚好vince在这个数据库里面,并且有id 和邮箱
这些数据可能都是某个表中的某列数据
当你输入个xx时,会发现username不存在,即不在数据库里面
当你在xx后面加上' or 1=1#时候,能查询到数据库所有信息。
这里我们看下pikachu网站的数据库
可见sql注入漏洞把数据都拿到了。
这是怎么回事呢?
#为注释符号。本来输入的vince,将&sname都替换了。
后来输入的xx' or 1=1#
过程:username=' &name' xx' or 1=1# 红色部分指被黑色部分替换了
正好引号将xx注释掉了
or 两边条件成立一个,就都成立。 因为1=1为永真式,所以就能够查询到全部的数据。
总结:引号闭合了前面的数据,#注释了后面的数据,拼接了一个sql语句。