1.背景
题目:PortSwigger Web Security Academy-SQL injection vulnerability allowing login bypass(允许登录绕过的SQL注入漏洞)
实验链接:https://portswigger.net/web-security/sql-injection/lab-login-bypass。
目标:利用登录框的SQL注入漏洞,无需密码直接以administrator身份登录后台。
2.原理
应用程序在构造SQL语句时,直接将数据拼接进SQL指令中,且没有对用户输入的特殊字符进行过滤或转义。这导致攻击者输入的数据被数据库当成代码执行。
3.攻击步骤
Step 1:利用category参数的SQL注入找到管理员用户名
-拼接URL:?category=Gifts'OR 1=1--
-商品列表多出administrator用户
Step 2:在登录页用永真条件绕过密码验证
-用户名:administrator
-密码:'OR 1=1--
-登录成功
4.修复方案
使用参数化查询:SQL语句的结构预先固定,用户输入通过占位符“填空”进去,而不是直接拼到SQL里面
5.反思
这道题让我意识到,登录的本质不是验证密码,而是信任数据库的判断,当SQL注入存在时,数据库就可以被欺骗,攻击者不需要破译密码就可以轻松登录。
至于这个问题为什么这么长时间还会出现的话,可能大家都比较注重于更有什么的问题,反而忽略了最简单的问题。