SQL 注入教程:通过示例学习
数据是信息系统最重要的组成部分之一。组织使用数据库驱动的 Web 应用程序从客户那里获取数据。SQL是结构化查询语言的首字母缩写。它用于检索和操作数据库中的数据。
什么是 SQL 注入?
SQL 注入是一种攻击动态 SQL 语句以注释掉语句的某些部分或附加始终为真的条件的攻击。它利用设计不佳的 Web 应用程序中的设计缺陷来利用 SQL 语句来执行恶意 SQL 代码。
在本教程中,您将学习 SQL 注入技术以及如何保护 Web 应用程序免受此类攻击。
- SQL 注入的工作原理
- 黑客活动:SQL 注入 Web 应用程序
- 其他 SQL 注入攻击类型
- SQL 注入自动化工具
- 如何防止 SQL 注入攻击
- 黑客活动:使用 Havji 进行 SQL 注入
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.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 应用程序
我们在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 知识的手动攻击技术。有一些自动化工具可以帮助您在尽可能短的时间内更有效地执行攻击。这些工具包括
- SQLMap - sqlmap: automatic SQL injection and database takeover tool
- JSQL 注入 - jsql | Kali Linux Tools
如何防止 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注入教程】SQL注入是什么?我们如何去玩转它
[sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区 SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...
- 学习sql注入:猜测数据库_学习SQL:删除和更新数据SQL最佳实践
学习sql注入:猜测数据库 Deleting and updating data is very common, but if performed without taking care, which ...
- php sql注入教程,SQL注入
如果需要通过网页需要用户输入的数据并将其插入到一个SQL数据库,可能会留下敞开称为SQL注入安全问题. 这一课将教你如何防止这种情况的发生,并帮助您保护服务器端脚本,如Perl脚本中使用的SQL语句. ...
- 学习sql注入:猜测数据库_学习SQL:SQL数据类型
学习sql注入:猜测数据库 What are SQL data types, why do we need them, and how to use them? Today, we'll try to ...
- 《SQL 入门教程》示例数据库
文章目录 Oracle 示例表 示例数据 创建索引 删除对象 MySQL 示例表 示例数据 创建索引 删除对象 Microsoft SQL Server 示例表 示例数据 创建索引 删除对象 Post ...
- 最详细SQL注入教程
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
- SQL注入教程——(二)常用语法基础
本文使用的数据库为hijack89 该数据库中存在名为user 的表 表中存在id.username.password 三个列 具体数据内容如下: 注意:该数据表第一条数据项为id为2,usernam ...
- SQL注入教程——(一)SQL注入原理
本系列文章将从SQL注入基础讲解,面向初学者,循序渐进. 如有不足,敬请指正. 前置技能 了解SQL语言.语法.操作.常用函数 (基本的SQL数据库操作是进行SQL注入攻击的基础) 了解PHP语言,以 ...
- web 漏洞入门之 —— SQL 注入教程
SQL 注入是最常见.最被人们熟知的 web 漏洞.根据百科的解释:所谓SQL注入,就是通过把SQL命令,插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. ...
最新文章
- Android10.0 Binder通信原理(三)-ServiceManager篇
- Base:一种 Acid 的替代方案
- one or more of the ports are invalid. Open the server editor and correct the invalid ports
- 算法竞赛入门与进阶 (一)枚举
- CSS Hack汇总(转载)
- 盘点程序员开发遇到的30个问题
- Qt5:渐变效果的实现
- 计算机编码发展历史和编码方式
- iMac 是什么?苹果2021新款 iMac 购买建议
- 电子书下载:[FBI教你破解身体语言].(美)乔·纳瓦罗.(美)马文·卡尔林斯.文字版...
- [JSOI2009]瓶子和燃料
- 【PDN仿真笔记3-电容布局Q3D模型搭建】
- SolidWorks修改工程图中文字字体的方法
- 《机器人动力学与控制》第九章——动力学 9.1 初探欧拉-拉格朗日方程法
- 教你认识正斜杠(/)与反斜杠(\)
- 驾考网上理论刷学时防每20分钟弹框
- CF1428F-Fruit Sequences
- firefox的XPCOM的COM编程
- 万字手撕七大排序(代码+动图演示)
- Emlog html5视频播放器插件
热门文章
- 二叉树的前序,中序,后序遍历
- H5 Plus移动APP开发之原理介绍-早会分享
- Java毕设项目吃到撑零售微商城(java+VUE+Mybatis+Maven+Mysql)
- 如何在Mac上测试宽带的网速(上传和下载速度)和网络质量
- TML5画布桌面和移动事件支持教程
- 内网多个DHCP Server无法获取到地址上网的解决办法
- 搭建学习环境(七)——Webug4.0
- JS原型理解——JS中的原型对象
- PLDroidPlayer 是 Pili 直播 SDK 的安卓播放器。支持所有直播常用的格式,如:RTMP、HLS、FLV。拥有优秀的功能和特性,如:首屏秒开、追帧优化、丰富的数据和状态回调、硬解软解
- Bigemap Gis Office软件 如何添加在线第三方地图