文章目录
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、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。
字符注入
当输入参数为字符串时,称为字符型。数字型与字符型注入最大的区别在于:数字型不需要引号闭合,而字符串类型一般要使用引号或其他符号来闭合。
搜索注入
当在搜索框注入的时候,称为搜索型。搜索类型一般要使用百分号进行闭合。