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