sql注入分类有哪些

sql注入分类有哪些
最新回答
余盼兮

2024-03-30 11:51:41

SQL注入主要分为基于注入点类型、注入数据类型、注入技术等多种分类方式,核心可归纳为以下几类


一、按注入点类型分类
1. 基于参数类型
数字型注入:注入点为数字参数(如ID=1),无需闭合引号,直接拼接SQL语句。
字符型注入:注入点为字符串参数(如username='admin'),需闭合单引号或双引号。洞旦
搜索型注入:针对搜索框参数(如`keyword='test'`),常因未过滤通配符导致。

2. 基于请求方式
GET注入:参数通过URL传递(如`?id=1`),易被日志记录。
POST注入:参数通过表单提交,需抓包分析。
Cookie注入:参数存在于Cookie中(如`Cookie: id=1`)。
HTTP头注入:参数位于User-Agent、Referer等HTTP头字段。


二、按注入数据类型分类
1. 普通注入:仅获取数据库数据(如用户名、密码)。
2. 盲注(Blind SQL Injection)
基于布尔的盲注:通过页面返回的True/False(如页面显示“存在”或“不存在”)判断注入结果。
基于时间的盲注:通过`SLEEP()`或`WAITFOR`等函数延迟页面响应时间判断(如页面加载慢则表示注入成功)。
3. 报错注入:利用数据库报错信息(如MySQL的`floor()`、Oracle的`utl_inaddr.get_host_name()`)获取数据。
4. 堆查询注入:通过分号(`;`)拼接多条SQL语句(如`;DROP TABLE users;`),需数据库支持多语句执行。


三、按注入技术分类
1. 联合查询注入(UNION):通过`UNION SELECT`合并查询结果,需满足前后查询字段数、类型一致。
2. 二次注入:第一次注入获取的数据未被过滤,第二次注入时被重新利用。
3. 宽字节注入:利用数据库字符集编码差异(如GBK与UTF-8)绕过单引号转义(如`%df'`)。
4. 存储型注入:注入代码被存储到数据库(如留言板、评论区),每次访问时触发。


四、按数据库类型分类
不同数据库(MySQL、Oracle、SQL Server、PostgreSQL等)的注入语法存在差异:
• MySQL:常用`UNION`、`SLEEP()`、`information_schema`系统表。
• Oracle:需指定表空间,常用`DUAL`伪表、`DBMS_PIPE.RECEIVE_MESSAGE()`延迟。
• SQL Server:常用`WAITFOR DELAY`、`sys.sysobjects`系统表。


五、按危害程度分类
1. 非破坏性注入册颤衡:仅获取数据(如拖库)。
2. 破坏性注入:可执行删除、修改、创建表/用户等操作(如`DROP TABLE`、`CREATE USER`)。


总结:SQL注入分类无统一标准,核心是根州做据注入场景、技术手段和危害程度划分,实际渗透中需结合具体环境灵活判断。