标题 : 如何入侵网站窃取数据SQL会员教程
日期 : 2023-03-03
数据是信息系统最重要的组成部分之一。组织使用数据库驱动的 Web 应用程序从客户那里获取数据。SQL是结构化查询语言的缩写。它用于检索和操作数据库中的所有数据。
什么是 SQL 注入?
SQL 注入是一种攻击动态 SQL 语句以注释掉语句的某些部分或附加一个始终为真的条件。它利用设计不佳的 Web 应用程序中的设计缺陷,利用 SQL 语句执行恶意 SQL 代码。
在本教程中,您将学习 SQL 注入黑客技术以及如何保护 Web 应用程序免受此类攻击。
SQL 注入的工作原理
可以使用 SQL 注入执行的攻击类型因数据库引擎的类型而异。攻击对动态 SQL 语句有效。动态语句是在运行时使用来自 Web 表单或 URI 查询字符串的参数密码生成的语句。
让我们考虑一个带有登录表单的简单 Web 应用程序。HTML 表单的代码如下所示。
<form action='index.php' method="post">
<input type="email" name="email" required="required"/>
<input type="密码" name="密码"/>
<input type="checkbox" name="remember_me" value="记住我"/>
<input type="提交" value="提交"/>
</表格>
这里,
上面的表单接受电子邮件地址和密码,然后将它们提交到名为 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 语句
步骤 1)在左窗格中输入此代码
创建表`用户`(
`id` INT NOT NULL AUTO_INCREMENT,
`电子邮件` VARCHAR(45) NULL,
`密码` VARCHAR(45) NULL,
主键 (`id`));
插入用户(电子邮件、密码)值 ('m@m.com',md5('abc'));
步骤 2) 单击构建架构
步骤 3)在右侧窗格中输入此代码
从用户中选择 *;
步骤 4)单击运行 SQL。您将看到以下结果
假设用户提供admin@admin.sys和1234 作为密码。对数据库执行的语句是
SELECT * FROM users WHERE email = ‘admin@admin.sys’ AND password = md5(‘1234’);
可以通过注释掉密码部分并附加一个始终为真的条件来利用上述代码。假设攻击者在电子邮件地址字段中提供了以下输入。
xxx@xxx.xxx’ 或 1 = 1 限制 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 应用程序
我们在http://www.techpanda.org/有一个简单的 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 加密
- 完成单引号和右括号
- 将条件附加到始终为真的语句
通常,成功的 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注入工具包括SQLMap、SQLPing、SQLSmack等。
- 在编写 SQL 语句时制定好的安全策略有助于减少 SQL 注入攻击。
|