1、什么是Sql注入攻击
SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序 , 而这些输入大都是SQL语法里的一些组合 , 通过执行SQL语句进而执行攻击者所要的操作 , 它目前是黑客对数据库进行攻击的最常用手段之一 。
本文将带你从介绍 Web 应用运行原理开始 , 一步一步理解 Sql 注入的由来、原理和攻击方式 。
2、Web程序三层架构
三层架构(3-tier architecture) 通常意义上就是将整个业务应用划分为:
界面层(User Interface layer)
业务逻辑层(Business Logic Layer)
数据访问层(Data access layer) 。
文章插图
区分层次的目的即为了“高内聚低耦合”的思想 。在软件体系架构设计中 , 分层式结构是最常见 , 也是最重要的一种结构被应用于众多类型的软件开发 。
3、Sql注入产生原因及威胁
刚刚讲过当我们访问动态网页时, Web 服务器会向数据访问层发起 Sql 查询请求 , 如果权限验证通过就会执行 Sql 语句 。这种网站内部直接发送的Sql请求一般不会有危险 , 但实际情况是很多时候需要结合用户的输入数据动态构造 Sql 语句 , 如果用户输入的数据被构造成恶意 Sql 代码 , Web 应用又未对动态构造的 Sql 语句使用的参数进行审查 , 则会带来意想不到的危险 。
Sql 注入带来的威胁主要有如下几点
猜解后台数据库 , 这是利用最多的方式 , 盗取网站的敏感信息 。
绕过认证 , 列如绕过验证登录网站后台 。
注入可以借助数据库的存储过程进行提权等操作
4、判断Sql注入点
4.1 判断是否存在sql注入漏洞
通常情况下 , 可能存在 Sql 注入漏洞的 Url 是类似这种形式 :http://xxx.xxx.xxx/abcd.php?id=XX对 Sql 注入的判断 , 主要有两个方面:
判断该带参数的 Url 是否存在 Sql 注入?
如果存在 Sql 注入 , 那么属于哪种 Sql 注入?
可能存在 Sql 注入攻击的 ASP/PHP/JSP 动态网页中 , 一个动态网页中可能只有一个参数 , 有时可能有多个参数 。有时是整型参数 , 有时是字符串型参数 , 不能一概而论 。总之只要是带有参数的 动态网页且此网页访问了数据库 , 那么就有可能存在 Sql 注入 。如果程序员没有足够的安全意识 , 没有进行必要的字符过滤 , 存在SQL注入的可能性就非常大 。
最为经典的单引号判断法: 在参数后面加上单引号,比如:
1http://xxx/abc.php?id=1'
如果页面返回错误 , 则存在 Sql 注入 。原因是无论字符型还是整型都会因为单引号个数不匹配而报错 。(如果未报错 , 不代表不存在 Sql 注入 , 因为有可能页面对单引号做了过滤 , 这时可以使用判断语句进行注入 , 因为此为入门基础课程 , 就不做深入讲解了)
4.2 判断Sql注入漏洞的类型
通常 Sql 注入漏洞分为 2 种类型:
数字型
字符型
其实所有的类型都是根据数据库本身表的类型所产生的 , 在我们创建表的时候会发现其后总有个数据类型的限制 , 而不同的数据库又有不同的数据类型 , 但是无论怎么分常用的查询数据类型总是以数字与字符来区分的 , 所以就会产生注入点为何种类型 。
4.2.1 数字型判断
当输入的参 x 为整型时 , 通常 abc.php 中 Sql 语句类型大致如下: select * from <表名> where id = x 这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:
Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常 , 继续进行下一步 。
Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 页面运行错误 , 则说明此 Sql 注入为数字型注入 。
原因如下: 当输入 and 1=1时 , 后台执行 Sql 语句:
【Sql注入基本原理】1select * from <表名> where id = x and 1=1
没有语法错误且逻辑判断为正确 , 所以返回正常 。
当输入 and 1=2时 , 后台执行 Sql 语句:
1select * from <表名> where id = x and 1=2
没有语法错误但是逻辑判断为假 , 所以返回错误 。我们再使用假设法:如果这是字符型注入的话 , 我们输入以上语句之后应该出现如下情况:
推荐阅读
- 太极拳的基本功练习 腿功
- 太极拳的基本功练习 腰功
- 太极拳的基本功练习 肩臂功
- 变频空调基本原理介绍
- 不耐摔、维修还贵,为什么如今的手机基本都是玻璃机身?原因为何
- 室外攀岩的基本技巧 热身抱石动作规范
- 一文搞懂MySQL的Join,聊一聊秒杀架构设计
- Mysql无法启动情况下,如何恢复数据?
- 腾讯云服务器上安装mysql,并用navicat连接
- 在使用mysql数据库时,遇到重复数据怎么处理?