SQL注入基础知识

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。

执行敏感命令

攻击方法

SQL 注入即攻击者通过构造特殊的 SQL 语句,入侵目标系统,致使后台数据库泄露数据的过程。
将 SQL 代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的 SQL 服务器加以解析并执行。 在这里插入图片描述

分类

以注入的技术分类

普通注入(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、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。

字符注入

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

搜索注入

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

CTF(Capture The Flag)是一种网络安全竞赛,旨在考察参赛者在网络安全领域的技能和知识。CTF中的SQL注入是一种常见的攻击技术,用于利用应用程序对用户输入的不正确处理而导致的安全漏洞。下面是CTF中SQL注入基础知识: 1. 什么是SQL注入SQL注入是指攻击者通过在应用程序的输入中插入恶意的SQL代码,从而绕过应用程序的验证和过滤机制,进而执行非法的数据库操作。攻击者可以通过SQL注入获取敏感信息、修改数据甚至控制整个数据库。 2. SQL注入的原理: SQL注入利用了应用程序对用户输入的不正确处理。当应用程序没有对用户输入进行充分验证和过滤时,攻击者可以通过构造特定的输入来改变原始SQL查询的语义,从而执行恶意操作。 3. SQL注入的类型: - 基于错误的注入:攻击者通过构造恶意输入,触发应用程序产生错误信息,从而获取敏感信息。 - 基于布尔盲注:攻击者通过构造恶意输入,利用应用程序对布尔表达式的处理方式,逐位猜测数据内容。 - 基于时间盲注:攻击者通过构造恶意输入,利用应用程序对时间延迟的处理方式,逐位猜测数据内容。 - 基于联合查询注入:攻击者通过构造恶意输入,利用应用程序对联合查询的处理方式,执行额外的查询操作。 4. 防御SQL注入的方法: - 使用参数化查询或预编译语句,确保用户输入不会被解释为SQL代码。 - 对用户输入进行严格的验证和过滤,包括输入长度、类型、格式等。 - 最小化数据库用户的权限,避免使用具有高权限的数据库账户。 - 定期更新和修补应用程序和数据库安全补丁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值