关于SQL注入漏洞类型
SQL注入属于高危代码漏洞。核心根源:开发者直接拼接用户输入到SQL语句,没有使用预编译,攻击者能够篡改SQL语义。
主流五大注入类型
1. 报错注入(Error-based)
特征:传入特殊字符,网站直接抛出数据库原生报错信息。
例子: ?id=1' 页面爆出 MySQL语法错误、表名。
利用:依靠报错直接带出数据。
局限:网站关闭数据库报错就无法使用。
2. 联合查询注入(Union Select)
特征:页面会直接展示查询的数据。
?id=1 union select username,password from users
正常页面会额外打印账号密码。
局限:需要页面有位置输出查询结果;很多网站不具备条件。
3. 布尔盲注(Boolean-based)
没有明文数据、没有数据库报错
仅仅存在两种页面状态:正常 / 空白/跳转。
-
id=1 and 1=1 → 正常页面
-
id=1 and 1=2 → 空白/跳转首页>
攻击者依靠页面两种状态,逐字符猜数据库内容。
4. 时间盲注(Time-based)
页面外观完全没有任何变化,不会空白、不会报错,统一跳转。
依靠页面加载延迟判断语句真假。
Payload示例:
?id=1 and sleep(3)
条件成立 → 网页卡住3秒再加载;
条件不成立 → 立刻加载完成。
肉眼看不出页面内容区别,只能观察响应耗时。
这也是最隐蔽、最难手工测试的注入。
5. 堆叠查询注入(Stacked Queries)
使用分号 ; 结束当前SQL,执行一条全新独立SQL。
?id=1; drop table users;
能否使用取决于数据库驱动是否允许多条语句执行。
MySQL + PHP环境大多默认禁止堆叠注入。
简单横向对比
1. 能看见数据、报错 → 联合注入 / 报错注入
2. 页面只有两种显示状态(正常/空白) → 布尔盲注
3. 页面毫无视觉差别,只能看加载快慢 → 时间盲注
知识点
1. 所有类型底层本质全部都是SQL注入,只是网站前端封装方式不同,导致利用形式不一样。
2. sqlmap内置逻辑,可以自动识别上面全部类型,自动进行盲注猜解。
3. 水平越权 ≠ SQL注入
-
越权:业务权限问题,换数字访问他人数据,sqlmap测不出
-
SQL注入:操控数据库语句,可以衍生上面5种形态
拓展注入
1.二次 SQL 注入
前端对输入 Payload 做转义过滤,恶意字符先存入数据库;后续读取数据再次拼接 SQL 时,Payload 触发注入,可以绕过前端防护。
2.OAST 外带注入(高阶盲注 Payload)
当延时 Payload 被 WAF 拦截、页面无任何状态差异时使用;构造 Payload 触发 DNS/HTTP 请求,把数据库数据带出,摆脱页面限制。

峰林型喀斯特:地表石灰岩峰林、河流、稻田组合
SQL注入漏洞的核心根源在于开发者未采用预编译参数化查询,直接将用户输入拼接到SQL语句中,导致攻击者可通过恶意Payload篡改SQL语义。主流注入类型包括:报错注入(利用数据库报错泄露信息)、联合查询注入(通过union拼接查询结果)、布尔盲注(依据页面状态差异推断数据)、时间盲注(通过响应延时判断条件真假)和堆叠查询(分号分隔执行多条语句)。防御关键在于全面使用预编译,配合最小权限原则、关闭错误回显等措施。特殊字符过滤仅能作为辅助手段,因存在多种绕过方式。该漏洞与水平越权有本质区别,后者属于业务逻辑缺
浙公网安备 33010602011771号