本题为SQL注入攻击的典型场景
SQL语句拼接漏洞
登录界面的后端代码直接将用户输入的用户名和密码拼接到SQL查询语句中,没有做任何安全校验和参数化处理。
- 原本的查询语句应该是:
SELECT * FROM USERS WHERE username = 'admin' AND password = '正确密码'SELECT * FROM USERS WHERE username = 'admin' AND password = 'admin' or '1'='1' --admin':闭合原语句中username的单引号,让原本的字符串拼接变成逻辑判断
or '1'='1':添加一个恒成立的逻辑条件,无论密码是否正确,这个条件都会让整个查询语句的结果为真
--:SQL的单行注释符号,会注释掉后面原本的密码校验部分,避免语法错误
最终执行效果:经过拼接和注释后,实际执行的SQL语句等价于:SELECT * FROM USERS WHERE username = 'admin' AND (password = 'admin' or '1'='1')
由于'1'='1'恒成立,所以整个WHERE条件必然成立,后端会查询到admin用户的信息,直接完成登录,无需正确密码。
这种攻击的本质就是利用了后端代码对用户输入的不安全处理,通过构造特殊语句篡改SQL逻辑,绕过身份验证。