sql注入类型有哪些:按触发特征分类
sql注入类型有哪些,业内主流分类维度包含按数据返回方式、按注入手法、按数据库交互形态划分,常见类别有联合查询注入、报错注入、布尔盲注、时间盲注、堆查询注入、内联注释注入、二阶注入、宽字节注入,该分类是Web安全渗透测试学习与代码审计的基础识别框架,适用对象为Web安全测试人员、后端开发人员、代码审计人员,仅可在拥有书面授权的靶场、自有业务系统开展识别验证,未授权对线上业务测试属于违规行为,OWASPTop102021将注入类漏洞列为高危风险项,SQL注入是其中占比较高的子类。
sql注入类型有哪些,基于回显特征划分
联合查询注入依靠UNIONSELECT语句,把攻击者构造的查询结果和原有SQL查询结果合并,直接在页面回显位置输出数据,前提是前后查询字段数量一致、字段数据类型可兼容,你在识别时观察页面是否新增额外查询结果,即可初步判定,这类注入在老版本PHP+MySQL业务系统中出现频率较高。报错注入利用数据库内置报错函数,让数据库执行语句时抛出错误信息,错误内容里携带查询得到的数据,常用函数包括extractvalue、updatexml,不需要页面正常业务回显,只要错误信息会输出到前端就能提取数据,对关闭业务结果展示但开启错误回显的系统有效。
布尔盲注没有直接数据回显,页面只会呈现两种固定状态,也就是查询条件成立时页面正常,条件不成立时页面内容变化,你需要逐位猜解字符,通过页面真假状态判断表达式结果,猜解速度偏慢,适合页面不输出数据库报错、也不支持UNION联合查询的场景。时间盲注同样没有数据回显,依靠sleep、benchmark这类延时函数,根据服务器响应耗时判断条件真假,当布尔盲注两种页面状态几乎无差异时,优先选用时间盲注,缺点是单次请求等待时间长,大批量猜解会产生大量请求日志。
堆查询注入可以在单条请求内追加多条SQL语句,使用分号分隔,能够执行删表、建表这类写操作,风险等级高于只读类注入,多数数据库驱动默认不支持多语句执行,例如PHPmysqli默认关闭多语句,只有开启相关配置后这类注入才具备利用条件。二阶注入的特征是恶意payload先存入数据库,不会在提交请求当下触发,后续业务读取这条存储数据并拼接进新SQL语句时才触发执行,审计时不能只看输入接口,还要追踪入库数据后续调用链路。
sql注入类型有哪些,特殊手法与识别对比
宽字节注入常见于GBK编码环境,原理是利用%df这类宽字节,转义掉addslashes添加的反斜杠,让单引号成功闭合SQL语句,仅在数据库连接编码设置为GBK、程序使用addslashes做转义防护的场景出现,UTF-8编码环境一般不会触发该类注入。内联注释注入使用/*!*/形式包裹SQL代码,绕过部分WAF规则,数据库解析时会执行注释内部代码,多用于绕过简单关键词过滤,WAF升级规则后该手法成功率会明显下降。
| 注入类型 | 是否有数据回显 | 核心利用条件 |
|---|---|---|
| 联合查询注入 | 有 | 字段数匹配,支持UNION语法 |
| 报错注入 | 错误信息回显 | 数据库错误信息输出至前端 |
| 布尔盲注 | 无,仅真假状态 | 真假条件页面存在可区分差异 |
| 时间盲注 | 无,依靠延时 | 可执行延时函数,网络延迟稳定 |
| 堆查询注入 | 取决于后续语句 | 数据库驱动允许多语句执行 |
| 二阶注入 | 触发时才有回显 | 恶意数据入库后二次拼接SQL |
识别时不要只依赖payload特征。
你做类型判断时,需要区分本质:所有SQL注入根源都是用户可控输入未做参数化处理,直接拼接进SQL语句,分类只是利用方式的差异,并不代表底层漏洞成因不同,很多真实业务会同时叠加多种注入特征,例如同时存在报错注入与布尔盲注通道,不能只判定成单一类型。防护层面优先采用预编译参数化查询,相比单纯关键字过滤,能够覆盖绝大多数注入类型,关键字过滤容易被内联注释、编码变形绕过。
该分类体系存在适用边界,部分新型变形注入不在传统八类划分内,例如HTTP头注入、二次编码绕过注入,这类变形属于传统注入的衍生手法,没有单独归类,如果你做自动化扫描规则编写,需要额外补充衍生payload检测,不能只覆盖基础八类。
