关于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 请求,把数据库数据带出,摆脱页面限制。

posted @ 2026-08-01 23:09  你可曾有我  阅读(4)  评论(0)    收藏  举报