白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击组织使用数据库驱动的Web应用程序从客户处获取数据。SQL注入是一种攻击,它会使动态SQL语句中毒以注释掉语句的某些部分或附加始终为真的条件。

大家好,欢迎来到IT知识分享网。

数据是信息系统最重要的组成部分之一。组织使用数据库驱动的Web应用程序从客户处获取数据。SQL是结构化查询语言的首字母缩写。它用于检索和操作数据库中的数据。

什么是SQL注入?

SQL注入是一种攻击,它会使动态SQL语句中毒以注释掉语句的某些部分或附加始终为真的条件。它利用设计不佳的Web应用程序中的设计缺陷来利用SQL语句来执行恶意SQL代码。

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

在本教程中,您将学习SQL注入技术以及如何保护Web应用程序免受此类攻击。

  • SQL注入的工作原理
  • 黑客活动:SQL注入Web应用程序
  • 其他SQL注入攻击类型
  • SQL注入的自动化工具
  • 如何防止SQL注入攻击
  • 黑客活动:使用Havji进行SQL注入

SQL注入的工作原理

可以使用SQL注入执行的攻击类型取决于数据库引擎的类型。攻击适用于动态SQL语句。动态语句是在运行时使用来自Web表单或URI查询字符串的参数password生成的语句。

让我们考虑一个带登录表单的简单Web应用程序。HTML表单的代码如下所示。

<form action =’index.php’method =“post”> <input type =“email”name =“email”required =“required”/> <input type =“password”name =“password”/> <input type =“checkbox”name =“remember_me”value =“记住我”/> <input type =“submit”value =“提交”/> </ FORM>

这里,

  • 上面的表单接受电子邮件地址,然后密码将它们提交给名为index.php 的PHP文件。
  • 它可以选择将登录会话存储在cookie中。我们从remember_me复选框中推断出这一点。它使用post方法提交数据。这意味着值不会显示在URL中。

假设后端用于检查用户ID的语句如下所示

SELECT * FROM users WHERE email = $ _POST [’email’] AND password = md5($ _ POST [‘password’]);

这里,

  • 上面的语句直接使用$ _POST []数组的值而不清理它们。
  • 密码使用MD5算法加密。

我们将使用sqlfiddle来说明SQL注入攻击。在Web浏览器中打开URL http://sqlfiddle.com/。您将看到以下窗口。

注意:您必须编写SQL语句

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

步骤1)在左窗格中输入此代码

CREATE TABLE`用户’( `id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45)NULL, `password` VARCHAR(45)NULL, PRIMARY KEY(`id`)); 插入用户(电子邮件,密码)值(’ m@m.com ‘,md5(’abc’));

步骤2)单击Build Schema

步骤3)在右侧窗格中输入此代码

从用户中选择*;

步骤4)单击“运行SQL”。您将看到以下结果

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

假设用户提供admin@admin.sys1234作为密码。要对数据库执行的语句是

SELECT * FROM users WHERE email =’admin@admin.sys’AND password = md5(’1234’);

可以通过注释掉密码部分并附加始终为真的条件来利用上述代码。假设攻击者在电子邮件地址字段中提供以下输入。

xxx@xxx.xxx’OR 1 = 1 LIMIT 1 – ‘]

xxx为密码。

生成的动态语句如下。

SELECT * FROM users WHERE email =’xxx@xxx.xxx’OR 1 = 1 LIMIT 1 – ‘] AND password = md5(’1234’);

这里,

  • xxx@xxx.xxx以单引号结束,完成字符串引用
  • OR 1 = 1 LIMIT 1是一个始终为真的条件,并将返回的结果限制为仅一个记录。
  • – ‘AND …是一个消除密码部分的SQL注释。

复制上面的SQL语句并将其粘贴到SQL FiddleRun SQL文本框中,如下所示

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

黑客活动:SQL注入Web应用程序

我们在http://www.techpanda.org/有一个简单的Web应用程序,仅出于演示目的而容易受到SQL注入攻击。上面的HTML表单代码取自登录页面。该应用程序提供基本安全性,例如清理电子邮件字段。这意味着我们的上述代码不能用于绕过登录。

为了解决这个问题,我们可以改为使用密码字段。下图显示了您必须遵循的步骤

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

假设攻击者提供以下输入

  • 步骤1:输入xxx@xxx.xxx作为电子邮件地址
  • 第2步:输入xxx’)或1 = 1 – ]

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

  • 单击“提交”按钮
  • 您将被引导至仪表板

生成的SQL语句如下所示

SELECT * FROM users WHERE email =’xxx@xxx.xxx’AND password = md5(’xxx’)OR 1 = 1 – ]’);

下图说明了已生成的语句。

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

这里,

  • 该语句智能地假设使用md5加密
  • 完成单引号和结束括号
  • 在语句中附加一个始终为true的条件

通常,成功的SQL注入攻击会尝试许多不同的技术,例如上面演示的技术,可以成功进行攻击。

其他SQL注入攻击类型

SQL注入比传递登录算法更有害。一些攻击包括

  • 删除数据
  • 更新数据
  • 插入数据
  • 在服务器上执行可以下载和安装特洛伊木马等恶意程序的命令
  • 将有价值的数据(如信用卡详细信息,电子邮件和密码)导出到攻击者的远程服务器
  • 获取用户登录详细信息等

以上清单并非详尽无遗; 它只是让你了解SQL注入

SQL注入的自动化工具

在上面的例子中,我们使用基于我们丰富的SQL知识的手动攻击技术。有一些自动化工具可以帮助您在最短的时间内更有效地执行攻击。这些工具包括

  • SQLSmack – http://www.securiteam.com/tools/5GP081P75C.html
  • SQLPing 2 – http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap – http://sqlmap.org/

如何防止SQL注入攻击

组织可以采用以下策略来保护自己免受SQL注入攻击。

  • 永远不应该信任用户输入 –在动态SQL语句中使用之前必须始终对其进行清理。
  • 存储过程 –这些可以封装SQL语句并将所有输入视为参数。
  • 准备好的语句 –通过先创建SQL语句然后将所有提交的用户数据作为参数处理来准备好的语句。这对SQL语句的语法没有影响。
  • 正则表达式 –这些表达式可用于检测潜在的有害代码并在执行SQL语句之前将其删除。
  • 数据库连接用户访问权限 –只应为用于连接数据库的帐户提供必要的访问权限。这有助于减少SQL语句在服务器上执行的操作。
  • 错误消息 –这些消息不应泄露敏感信息以及发生错误的位置。简单的自定义错误消息,例如“抱歉,我们遇到了技术错误。已联系技术团队。请稍后再试“可以使用而不是显示导致错误的SQL语句。

黑客活动:使用Havij进行SQL注入

在这个实际场景中,我们将使用Havij Advanced SQL Injection程序扫描网站中的漏洞。

注意:由于其性质,您的防病毒程序可能会标记它。您应该将其添加到排除列表或暂停您的防病毒软件。

下图显示了Havij的主窗口

白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

上述工具可用于评估网站/应用程序的漏洞。

概要

  • SQL注入是一种利用错误SQL语句的攻击类型
  • SQL注入可用于绕过登录算法,检索,插入,更新和删除数据。
  • SQL注入工具包括SQLMap,SQLPing和SQLSmack等。
  • 编写SQL语句时的良好安全策略有助于减少SQL注入攻击。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/56793.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信