首页 » 虚拟系统 » SQL注入教程,通过一个示例理解SQL注入的全过程

SQL注入教程,通过一个示例理解SQL注入的全过程

谷歌已收录,更新于2019年04月05日; 如遇到问题,请留言及时通知站长; 欢迎加入 三生三世,讨论各种问题!

说明

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

什么是SQL注入?

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

SQL注入教程:通过示例学习

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

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="Remember me"/>
<input type="submit" value="Submit"/>
</form>

这里,

  • 上面的表单接受电子邮件地址,然后密码将它们提交到名为index.phpPHP文件。
  • 它可以选择将登录会话存储在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注入教程:通过示例学习

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

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(45) NULL,
  `password` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));
  
insert into users (email,password) values ('[email protected]',md5('abc'));

步骤2)单击Build Schema

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

select * from users;

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

SQL注入教程:通过示例学习

假设用户名为,[email protected]1234为密码。要对数据库执行的语句是

SELECT * FROM users WHERE email = '[email protected]' AND password = md5('1234');

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

[email protected]' OR 1 = 1 LIMIT 1 -- ' ]

xxx为密码。

生成的动态语句如下。

SELECT * FROM users WHERE email = '[email protected]' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

这里,

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

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

SQL注入教程:通过示例学习

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

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

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

SQL注入教程:通过示例学习

假设攻击者提供以下输入

  • 第1步:输入[email protected]作为电子邮件地址
  • 第2步:输入xxx') OR 1 = 1 -- ]

SQL注入教程:通过示例学习

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

生成的SQL语句如下所示

SELECT * FROM users WHERE email = '[email protected]' AND password = md5('xxx') OR 1 = 1 -- ]');

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

SQL注入教程:通过示例学习

这里,

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

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

其他SQL注入攻击类型

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

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

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

SQL注入的自动化工具

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

如何防止SQL注入攻击

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

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

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

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

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

下图显示了Havij的主窗口

SQL注入教程:通过示例学习

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

内容提要

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

译文渠道

英文站:https://www.guru99.com/learn-sql-injection-with-practical-example.html
译者:黑冰技术站-枂下

一个只会魔改主题,而不会制作主题的站长,专业扒各种网站的各种样式。希望每一位来到这里的访客,都能拿到你们需要的资源!

发表评论

已有 2 条评论

  1. 知识共享网 知识共享网说道:

    不错,感谢分享

  2. 乔人 乔人说道:

    这文章是真正的干货技巧啊,sql注入到现在都算是重灾区了。

最近动态查看

    利用短代码实现了文章正文任意位置插入[googleads],前端自动变为谷歌广告。这样,文章过长时,可以随意插入广告了。
返回主页看更多
赏杯咖啡给站长 支付宝 扫一扫