首页 > 数据库 >SQL注入介绍

SQL注入介绍

时间:2024-07-10 16:56:37浏览次数:15  
标签:语句 数据库 介绍 报错 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、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。

  • 字符注入

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

  • 搜索注入

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

标签:语句,数据库,介绍,报错,SQL,注入,页面
From: https://blog.csdn.net/qq_67611592/article/details/140328644

相关文章

  • 基于springboot+layui+thymeleaf的学生成绩管理系统设计与实现(源码+SQL+使用说明)
    本项目适合做计算机相关专业的毕业设计,课程设计,技术难度适中、工作量比较充实。完整资源获取点击下载完整资源1、资源项目源码均已通过严格测试验证,保证能够正常运行;2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;3、本项目比较适合计算......
  • 基于SpringBoot + SpringCloud+ElasticSear的在线教育管理系统设计与实现(MySQL、Mongo
    本项目适合做计算机相关专业的毕业设计,课程设计,技术难度适中、工作量比较充实。完整资源获取点击下载完整资源1、资源项目源码均已通过严格测试验证,保证能够正常运行;2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;3、本项目比较适合计算......
  • MySQL和Redis更新一致性问题
    1.先更新数据库,再更新缓存适用场景:适用于对数据一致性要求不是特别高,且缓存更新失败对系统影响较小的场景。例如,某些非关键数据的缓存更新。风险:如果缓存更新失败,会导致数据库和缓存数据不一致。//更新数据库updateMySQL(data);//更新缓存updateRedis(data);2......
  • .net 6及以上版本 WebAPI 初始化项目介绍
    从ZR.Admin里面摘出一部分作为参考 1.Program.cs publicclassProgram{publicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.......
  • SQL Server Compact的简单使用
    今天遇到公司之前一个项目,使用的是SQLServerCompact(SQLCE)数据库,记录一下创建SDF数据库:1.VisualStudio2022安装扩展,SQLiteandSQLServerCompactToolbox2.工具-->SQLite/SQLServerCompactToolbox2.添加一个连接 3.选择路径或者创建一个新的数据库4.已经......
  • Easyadmin创建新的目录菜单步骤,Curd创建方法介绍
    应用easyadmin创建文件目录,可以使用复制原有的目录,也可以使用CURD方法创建,一般为了防止复制后,修改出错或漏改,建议使用CURD方法,此方法不仅快捷方便,也因存在设计数据库,便于后面开发。1.创建CURD命令行,创建数据表。  2.打开Composer,注意版本,此处使用php7.4,  3.执行Compose......
  • MySQL中datetime和timestamp的区别
    #MySQL中datetime和timestamp的区别相同点两个数据类型存储时间的格式一致。均为YYYY-MM-DDHH:MM:SS两个数据类型都包含「日期」和「时间」部分。两个数据类型都可以存储微秒的小数秒(秒后6位小数秒)自动更新和默认值TIMESTAMP:支持默认值为当前时间,且在记录更新时可以......
  • sqlx库——在go中写sql
    sqlx库——在go中写sqlsqlx可以认为是Go语言内置的database/sql的超集,基于内置的连接数据库的库,sqlx做了非常好的拓展,使用起来更方便快捷,对于有sql基础的,使用起来会比gorm更顺手下载sqlx依赖在goland终端中输入下面代码,获取sqlx依赖gogetgithub.com/jmoiron/sqlx连......
  • mysql数据库中毒恢复
    一、立即隔离受感染的系统断开网络连接:首先,立即断开受感染系统的网络连接,以防止病毒进一步传播或黑客获取更多敏感信息。隔离受感染设备:将受感染的计算机或服务器从网络中隔离出来,以避免对其他系统造成影响。二、评估损害范围检查日志文件:查看系统日志和MySQL日志文件,了解病毒......
  • SQLite数据库恢复
    一、使用备份文件恢复直接替换法:如果之前有备份数据库文件,最简单直接的恢复方法就是将备份文件直接替换掉损坏的或丢失的数据库文件。这种方法简单快捷,但需要注意在替换过程中确保没有其他程序正在访问数据库文件,以免造成数据不一致。使用SQLite命令行工具恢复:SQLite提供了命......