安全测试SQL注入
注入技术包括使用应用程序的输入字段注入SQL查询或命令。
Web应用程序SQL注入
成功的SQL注入可以读取,修改数据库中的敏感数据,还可以从数据库中删除数据。它还使黑客能够对数据库执行管理操作,例如:关闭DBMS/删除数据库。
我们通过下面一个简单的图表了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。
- 威胁代理 - 匿名外部攻击者以及拥有自己帐户的用户可能会尝试从其他人那里窃取帐户。
- 攻击者的方法 - 在身份验证或会话管理功能中使用泄漏或漏洞。例如,公开的帐户密码,用于冒充用户的会话ID。
- 安全弱点 - 开发人员经常构建自定义身份验证和会话管理方案,但正确构建这些方案很难。
- 如何发现缺陷 - 找到这样的缺陷有时会很困难,因为每个实现都是独一无二的。
- 技术影响 - 可能会使某些甚至所有帐户受到损害。一旦成功,攻击者就可以做受害者可以做的任何事情。
- 业务影响 - 漏洞的公开曝光。受影响的数据或应用程序功能的业务价值。
示例
以下应用程序在构造,很易受攻击的SQL调用时使用不受信任的数据 -
String query = "SELECT * FROM EMP WHERE EMPID = '" + request.getParameter("id") + "'";
动手实践" class="reference-link">动手实践
第1步 - 导航到应用程序的SQL注入区域,如下所示。
第2步 - 使用SQL插入来绕过身份验证。使用SQL注入作为老板(‘Neville’)登录,而不使用正确的密码。确认可以查看Neville的配置文件并且所有功能都可用(包括搜索,创建和删除)。
第3步 - 我们将注入一个SQL,以便能够通过发送参数为'a'='a' or 1 = 1
来绕过密码
第4步 - 提交登录后,可以登录Neville
账号,他是Admin,如下所示。
防止SQL注入
有很多方法可以防止SQL注入。当开发人员编写代码时,他们应该确保它们相应地处理特殊字符。OWASP提供备忘单/预防技术,绝对是开发人员一个不错的指南。
- 使用参数化查询
- 转义所有用户提供的输入
- 为最终用户启用数据库的最低权限