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

数据是信息系统最重要的组成部分之一。组织使用数据库驱动的 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="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</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 语句

 

步骤 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 ('m@m.com',md5('abc'));

步骤 2) 单击构建模式

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

select * from users;

步骤 4)单击运行 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 注入 Web 应用程序

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

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

假设攻击者提供以下输入

  • 第 1 步:输入 xxx@xxx.xxx 作为电子邮件地址
  • 第 2 步:输入 xxx') OR 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 注入攻击。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1。支持数据库注入方法:   MSSQL 2000 / 2005错误   MSSQL 2000 / 2005无错误联盟总部   MSSQL盲   MSSQL时基   基于MySQL的联盟   MySQL盲   基于MySQL的错误   MySQL的时间   基于Oracle的联盟   基于Oracle错误   Oracle盲   基于PostgreSQL的联盟   基于MS访问联盟   MS Access盲   Sybase(ASE)   Sybase(ASE)Blind   2。HTTPS支持   三.多线程   4。代理支持   5。自动信息服务器检测   6。自动参数类型检测(字符串或整数)   7。自动关键词检测(发现正面和负面的反应之间的区别)   8。自动扫描所有参数。   9。尝试完全不同的注射方法   10。替代房屋的选择,…针对IDS或过滤器   11。避免开发字符串(绕过magic_quotes和类似的过滤器)   12。手动注入语法支持   13。手动查询结果   14。强迫法外联盟   15。随机信号发生器   16。完全可定制的协议头(如参考,用户代理…)   17。从网站加载Cookie(s)进行身份验证   18。加载HTML类型的输入   19。协议基本和摘要认证   20。注入统一资源定位器重写页面   21。绕过防火墙和类似防火墙ModSecurity的互联网应用   22。绕过webknight互联网应用防火墙和类似防火墙   23。即时结果 软件特色   Havij这个注入工具大家应该多蛮清楚的吧,大牛小牛应该多有玩过。   算是比较著名也比较好用的SQL注入工具了。用的人也很多,它经常更新。   正版是要钱的。要感谢国内的破解大牛Hmily。每次多是它破解的最好用了。   这次这个也是它破解的。虽然网上有好几个版本。这个是免安装。注册一下控件就行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值