前置知识回顾
- 前期学习内容:有回显联合查询注入
- 核心语句:union select 联合查询
- **利用条件:**页面存在数据回显点,数据库查询结果直接展示在前端
- **局限性:**现实业务中大量功能不属于查询类操作,不存在数据回显,无法使用联合查询注入
SQL 四大基础语法完整详解
1. SELECT 查询语句
标准语法:
-- 查询指定字段 SELECT 字段1,字段2 FROM 表名 WHERE 条件; -- 查询表内所有数据 SELECT * FROM 表名;
业务场景举例:
- 网站登录
- 关键词搜索
- 商品展示
- 新闻列表
- 个人信息展示等数据查询类功能
执行逻辑:
后端接收用户参数 → 拼接 SQL 查询语句 → 检索数据库数据 → 数据返回前端页面展示
注入特征:
- 具备数据回显
- 可用 order by 判断字段数,union select 查询库、表、字段、数据
- 注入门槛低,是基础入门注入方式
2. INSERT 插入语句
标准语法:
-- 指定字段插入数据 INSERT INTO 表名(字段1,字段2,字段3) VALUES(值1,值2,值3); -- 全字段直接插入 INSERT INTO 表名 VALUES(值1,值2,值3);
示例语句:
INSERT INTO t1(id,name,password) VALUES(1,'张三','123456');
业务场景举例:
执行逻辑:
前端提交表单数据 → 后端拼接插入语句写入数据库 → 仅返回操作状态提示,无数据库原始数据回显
注入难点:
- 文本参数多为字符型,依赖单/双引号闭合
- 语句被 values() 括号包裹,增加闭合难度
- 无回显,无法使用联合查询
3. UPDATE 更新语句
标准语法:
UPDATE 表名 SET 字段1=新值,字段2=新值 WHERE 限制条件;
示例语句:
UPDATE t1 SET name='王五' WHERE name='李四';
业务场景举例:
- 修改账号密码
- 编辑个人资料
- 后台内容修改
- 网站数据同步更新等
执行逻辑:
传入修改参数与限定条件 → 执行更新语句修改数据库内容 → 仅提示操作成功或失败,无原始数据输出
注入风险:
- 危害极高,可批量恶意修改全站数据、账号密码、核心配置信息
4. DELETE 删除语句
标准语法:
DELETE FROM 表名 WHERE 限制条件;
示例语句:
DELETE FROM t1 WHERE id=1;
业务场景举例:
执行逻辑:
接收删除条件参数 → 执行删除操作 → 静默执行,页面无任何数据返回与内容展示
注入特征:
- 多为数字型参数,无需引号闭合
- 完全无回显、无报错提示,是盲注高频场景
无回显注入产生核心原因
- select 为数据读取操作,必须返回结果
- insert/update/delete 属于写入、修改、删除操作,只执行动作,不返回查询数据
- 代码主动屏蔽数据库报错信息,关闭错误打印,前端无法看到数据库报错内容
- 增删改类功能仅反馈操作状态,不会将数据库原始数据渲染至前端页面
Pikachu 靶场完整学习框架
1. Insert 注入(注册功能)
底层 SQL 源码结构:
insert into member(username,pw,sex,phonenum,email,address) values('$_POST[username]','$_POST[pw]','$_POST[sex]','$_POST[phonenum]','$_POST[email]','$_POST[address]');
- 可控注入点:username、pw、sex、手机号、邮箱、地址等所有输入框
- 闭合方式:参数全部被单引号包裹,属于字符型注入
实操流程:
- 正常提交注册数据,抓包观察 POST 传参格式
- 输入单引号 ' 测试是否触发语法报错
- 使用 order by 探测字段数量
- 利用单引号闭合 + 注释符截断多余语句
- 结合报错注入、堆叠注入完成数据读取
2. Update 注入(资料修改功能)
底层 SQL 源码结构:
update member set username='$_POST[username]',pw='$_POST[pw]',sex='$_POST[sex]' where id=$id;
- 自定义资料字段为字符型,单引号闭合
- 语句末尾存在 where 条件限制
- 操作后无数据回显,仅状态提示
实操思路:
- 单引号测试闭合漏洞
- 构造报错语句读取库名、表名、字段
- 闭合 where 条件,实现批量数据修改测试
3. Delete 注入(数据删除功能)
底层 SQL 源码结构:
delete from message where id=$_GET[id];
- 注入特征:
- GET 方式传参,id 为数字型参数,无引号闭合
- 执行后无页面反馈,纯静默执行
实操思路:
- 拼接逻辑判断语句:and 1=1、and 1=2 观察页面差异
- 适用于布尔盲注、时间延时盲注实操练习