您的位置 首页 php

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

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

什么是SQL注入?

SQL注入是一种攻击,它会使动态SQL语句中毒以注释掉语句的某些部分或附加始终为真的条件。它利用设计不佳的Web应用程序中的设计缺陷来利用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 。您将看到以下窗口。

注意:您必须编写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”。您将看到以下结果

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

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注入Web应用程序

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

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

假设攻击者提供以下输入

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

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

生成的SQL语句如下所示

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

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

这里,

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

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

其他SQL注入攻击类型

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

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

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

SQL注入的自动化工具

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

  • SQLSmack –
  • SQLPing 2 –
  • SQLMap –

如何防止SQL注入攻击

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

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

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

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

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

下图显示了Havij的主窗口

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

概要

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

文章来源:智云一二三科技

文章标题:白帽黑客教你SQL注入攻击方式及如何防御SQL注入攻击

文章地址:https://www.zhihuclub.com/79356.shtml

关于作者: 智云科技

热门文章

网站地图