使用 SQL 注入绕过登录页面身份验证


SQL 注入是一种常见的安全漏洞。它发生在攻击者通过注入恶意的 SQL 代码来操纵 Web 应用程序的数据库查询时。SQL 注入利用的最关键的区域之一是应用程序的登录页面。当用户输入其凭据时,这些输入通常用于构建数据库查询以验证用户的身份。

如果应用程序没有正确地清理这些输入,攻击者可以通过注入修改预期查询的 SQL 语句来绕过身份验证,从而获得未经授权的访问权限。

什么是 SQL 注入?

SQL 注入是一种代码注入技术,它通过在输入字段中插入或“注入” SQL 查询来利用应用程序软件中的漏洞。

当用户输入未被正确清理时,攻击者可以操纵数据库执行的 SQL 查询,从而可能获得对数据的未经授权的访问权限。

登录页面中 SQL 注入的机制

考虑一个简单的登录表单,用户在其中输入其用户名和密码。后端可能会执行如下 SQL 查询。

SELECT * FROM users 
WHERE username = 'username' 
AND password = 'password';

如果应用程序没有正确地清理“$username”和“$password”输入,攻击者可以注入恶意的 SQL 代码来操纵查询。

在执行 SQL 注入攻击时,我们需要谨慎,并获得网站所有者或导师的适当许可。在某些情况下,它可能导致数据丢失。

SQL 注入攻击示例

对于此示例,我们使用了Portswigger Lab. 要执行SQL 注入,您需要安装Burp-suite. 根据您的方便,您可以安装社区版专业版

实验链接: https://portswigger.net/web-security/sql-injection/lab-login-bypass

Burpsuite 链接: https://portswigger.net/burp/communitydownload

按照以下步骤操作 -

步骤 1:打开包含登录页面的网站。

步骤 2:在用户名字段中键入“administrator”,并在任何随机密码(例如“admin”)中键入。

步骤 3:打开Burp suite并捕获当前的登录请求。您应该在拦截器中看到200 OK

步骤 4:在后台,SQL 查询将如下所示

步骤 5:这里,“users”是表名,其中包含数据库中的用户名和密码。


步骤 6:现在,如果您提交请求,您将在登录窗口中收到一个错误,提示“无效的用户名或密码”。

步骤 7:如果用户名字段包含单引号,则在执行查询时将触发错误。

步骤 8:应用程序在拦截器中生成500 内部服务器错误,并在 HTTP 响应中生成无效的用户名或密码错误。

步骤 9:现在,实际的 SQL 负载如下所示“ administrator'-- ”。

步骤 10:-- 序列在 SQL 中用作注释分隔符。当攻击者将 -- 注入查询时,它指示 SQL 数据库忽略该行的其余部分。这对于操纵预期的 SQL 查询很有用。

步骤 11:登录成功后,用户可以在我的帐户仪表板中访问其帐户。

以下是这种操作的工作原理 -

  • 条件 '1'='1' 始终评估为真。
  • -- 将 SQL 语句的其余部分注释掉,从而有效地绕过密码检查。
  • 这可能导致未经授权的访问,因为查询返回有效的用户记录。

登录页面上的常见 SQL 注入技术

  • 基于错误的攻击
  • 基于联合的攻击
  • 基于时间的攻击

防止登录页面上的 SQL 注入

您可以通过以下步骤防止登录页面上的 SQL 注入 -

  • 参数化查询:预处理语句确保用户输入被视为数据而不是可执行代码。
  • 输入验证:始终验证和清理用户输入。使用正则表达式仅允许预期的格式(例如,用户名使用字母数字字符)。
  • 利用 ORM 框架:使用对象关系映射 (ORM) 工具,例如 Entity Framework 或 Hibernate。这些工具自动安全地处理查询生成。降低注入风险。

使用 Web 应用防火墙 (WAF)

WAF 可以帮助过滤和监视 HTTP 请求,以检测和阻止 SQL 注入尝试。

结论

总之,SQL 注入构成了重大风险,尤其是在登录功能中。通过利用此漏洞,攻击者可以绕过身份验证并访问敏感信息或系统。

  • 为了防止 SQL 注入攻击,开发人员应实施强大的输入验证,利用参数化查询,并定期测试应用程序是否存在漏洞。
  • 通过采取这些措施,可以显著提高 Web 应用程序的安全性。
  • 此外,确保只有授权用户才能访问敏感数据。

更新于: 2024 年 11 月 5 日

30 次查看

开启您的 职业生涯

通过完成课程获得认证

开始
广告