SQL注入介绍

一.简介:

  • 对于 Web 应用程序而言,用户核心数据存储在数据库中,例如:MySQL、SQL Server、Oracle 等。

  • 通过 SQL 注入攻击,可以获取、修改、删除数据库信息,并且通过提权来控制 Web 服务器等其他操作。

  • SQL 注入由研究员 Rain Forest Puppy 发现,在 1998 年对外发表文章 《NT Web Technology Vulnerabilities》。

  • 漏洞产生的主要原因是服务器对用户输入的信息没有做过滤。

  • 攻击者通过构造特殊的 SQL 语句,入侵目标系统,致使后台数据库泄露数据的过程。

二.影响

  • 用户信息被泄露,甚至被非法倒卖。

  • 危害企业、政府、国家等组织安全。

  • 注入后

    • 查询数据

    • 读写文件

      • 需要高权限(root 权限)。

      • 需要有文件写入权限 secure_file_priv 不是 NULL。

        • 查看方法:show VARIABLES LIKE '%secure%'

      • 需要知道绝对路径。

      • 魔术引号 gbc 是关闭的,即 magic_quotes_gpc = Off。

    • 执行敏感命令

三.攻击方式:

  • QL 注入即攻击者通过构造特殊的 SQL 语句,入侵目标系统,致使后台数据库泄露数据的过程。

  • 将 SQL 代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的 SQL 服务器加以解析并执行。

SQL 注入举例.jpg

四、分类:

按照注入的技术分类:
  • 普通注入(union 联合注入)

    • 概述

      • 普通注入是根据后台数据库提示有价值的错误信息,进行注入操作,一般可以把攻击者需要获得的信息直接查询显示在页面中。

    • 核心方法

      • 使用 union 合并两个或多个 SELECT 语句的结果集,第二个语句中就包含我们想要查询的语句。

  • 盲注

    • 概述

      • 当我们输入的注入语句被带入数据库查询,页面却不能回显结果时,如:应用程序只会返回一个通用的(对错信息或什么信息都不显示)页面或特定的语句,我们不能以此来判断注入是否成功,这种情况下就要用到 SQL 盲注的技巧。

      • 目标网站的数据库是 Access,系统中没有类似 MySQL 的 Information_schema 库。

      • 攻击者运用脚本通过仅有的判断信息对表中每个字段进行探测,从而实现注入。

    • 分类

      • 布尔型

        • 概述

          • 目标页面上没有显示数据内容的功能,仅有显示对错或有无(布尔值)的提示。

        • 攻击方法

          • 通过构造特殊 SQL 语句,观察页面返回的对错来判断 SQL 语句是否成立。

      • 时间型

        • 概述

          • 对于某些页面,可能任何信息都不返回,甚至连记录是否存在都不告诉你,此时布尔型就失效了。

          • 通过构造条件语句,条件语句判断为真则立即执行,否则延时执行。

        • 攻击方法

          • 通过 sleep() 函数,观察页面返回是否有延时来判断 SQL 语句是否成立。

  • 报错注入

    • 概述

      • 当数据库的函数被传入错误参数时,会发生语法错误,正常情况下这类错误不应该回显到前端页面,但当中间件或程序未正常屏蔽时导致错误信息输出到屏幕上,就能用来进行报错注入了。

      • select/insert/update/delete 都可以进行报错注入。

    • 报错注入条件

      • 后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。

      • 运维人员设置中间件的时候,错误输出没有屏蔽。

      • 程序员写网站代码的时候,没有屏蔽错误信息输出。

  • 宽字节注入

    • 漏洞产生和后端编码有关,如后端采用 GBK 编码。

    • 数据库使用 GBK 编码时,两个字符为一个汉字。

    • ASCII 码只有 128 个,大于 128 的就会和第二个字符组成一个汉字。

  • 二次注入

    • 有些程序在进行数据库插入的时候,仅仅对特殊字符进行了转义,但仍然将数据写入了数据库,如果插入的数据包含恶意内容,此时在其他地方查询该数据时,如果没有对取出的数据做校验处理(即认为写入即可信),直接使用该数据,就会造成 SQL 二次注入。

  • 二次编码注入

    • php 代码中用了 urldecode() 等编码函数,对 url 中的特殊字符进行转码,可以利用此函数与 php 自身编码转换,产生漏洞。

以注入的位置分类
  • GET 注入

    • 可通过安装浏览器插件(hackbar)或直接通过浏览器地址栏提交。

  • POST 注入

    • 可通过安装浏览器插件(hackbar)或 Burpsuite 来完成。

  • Cookie 注入

    • GET 和 POST 如果被过滤,可以试试。

    • 一般通过 Burpsuite 来完成,修改 Cookie 进行注入。

  • UA 注入

    • 一般通过 Burpsuite 来完成,修改 UA 进行注入。

以注入的参数类型分类:
  • 数字注入

    • 当输入的参数为整型时,如 ID、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。

  • 字符注入

    • 当输入参数为字符串时,称为字符型。数字型与字符型注入最大的区别在于:数字型不需要引号闭合,而字符串类型一般要使用引号或其他符号来闭合。

  • 搜索注入

    • 当在搜索框注入的时候,称为搜索型。搜索类型一般要使用百分号进行闭合。

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值