【学习笔记】SQL注入的“特殊战场”——不同场景与二阶注入
2026/4/22 16:31:41 网站建设 项目流程

【学习笔记】SQL注入的“特殊战场”——不同场景与二阶注入

一、开篇:当注入点不在“输入框”时

前六篇我们聚焦于URL参数、搜索框等“显性注入点”,但现实中,SQL注入可能藏在更隐蔽的地方:

Cookie里的sessionid;

HTTP Header中的User-Agent;

用XML/JSON格式传递的参数;

甚至“第一次注入,第二次触发”的二阶注入。

PortSwigger原路径将这些称为“上下文相关的SQL注入”——注入点的位置和环境,直接决定了Payload的写法和绕过技巧。

二、特殊场景1:注入点在“非参数位置”

PortSwigger原路径重点讲解了4类非传统注入点,我们用“实战+绕过”拆解:

  1. Cookie注入(最常见)

场景:某网站的Cookie中存储用户身份:Cookie: session=12345。应用逻辑:

SELECT*FROM users WHERE session_id ='12345';

注入方法:修改Cookie为’ OR 1=1–,让SQL变成:

SELECT*FROM users WHERE session_id =''OR1=1--';

✅ 触发条件:应用直接从Cookie中取数据拼SQL,未过滤。

  1. Header注入(User-Agent/Referer)

场景:应用记录用户访问日志,把User-Agent存入数据库:

INSERT INTO logs (ip, user_agent) VALUES ('1.2.3.4', 'Mozilla/5.0');

注入方法:修改User-Agent为’ OR (SELECT 1)–,让SQL变成:

INSERT INTO logs (ip, user_agent) VALUES ('1.2.3.4', ''OR (SELECT1)--');

✅ 触发条件:应用未过滤Header中的特殊字符(如’、;)。

  1. XML编码绕过(PortSwigger靶场实战)

场景:某网站的“订单提交”功能用XML传参:

<order>

应用逻辑:解析XML后拼接SQL:

SELECT*FROM orders WHERE product_id ='1'AND quantity ='1';

目标:绕过WAF过滤(WAF拦截’、OR等关键字)。

PortSwigger实验Payload(用XML实体编码):

<order>

S是S的十六进制编码(WAF不认识,但XML解析后会还原成S);

最终SQL变成:

SELECT*FROM orders WHERE product_id ='1'SELECT1--' AND quantity = '1';

✅ 成功绕过WAF,触发SQL注入!

三、特殊场景2:二阶注入(First insert, then execute)

PortSwigger原路径将二阶注入(Second-order SQLi)定义为:“第一次注入的数据被存储,第二次使用时才触发注入”。就像你把“炸弹”埋在数据库里,等有人“碰”它时才爆炸。

原理:两次查询的“时间差”

第一次请求:用户输入恶意数据(比如注册用户名’ OR 1=1–),应用将其存入数据库(未执行);

第二次请求:应用从数据库取出该数据,拼接到SQL中执行——此时注入生效!

PortSwigger靶场实战:注册时的“隐藏炸弹”

场景:某网站的“用户注册”功能,注册时用username和password,登录时用username查询:

注册时,应用执行:INSERT INTO users (username, password) VALUES (‘u s e r n a m e ′ , ′ username', 'username,password’);

登录时,应用执行:SELECT * FROM users WHERE username = ‘u s e r n a m e ′ A N D p a s s w o r d = ′ username' AND password = 'usernameANDpassword=password’;

目标:用二阶注入登录administrator账号(无需密码)。

步骤:

注册用户名为’ OR username=‘administrator’–,密码随便填(比如123);

应用将’ OR username=‘administrator’–存入users表的username字段;

登录时,输入刚才的用户名和密码,应用执行:

SELECT*FROM users WHERE username =''OR username='administrator'--' AND password = '123';

四、常见坑点与绕过技巧(PortSwigger原路径强调)

WAF过滤了’,怎么办?

  • 检查数据存储时是否被转义(比如'被变成\')→ 用CHAR()函数(CHAR(39)');
  • 检查第二次查询是否真的用了该数据(比如登录时才查询,而不是注册后立即查询)。

二阶注入没反应?

  • 十六进制编码(MySQL):' OR 1=1--0x27204f5220313d312d2d(需配合UNHEX());
  • 双写绕过' OR 'OR' 1=1--(WAF拦截OR,但双写后放行)。

五、防御:如何覆盖“特殊场景”?

PortSwigger原路径指出,特殊场景注入的根源是“所有用户输入(包括Cookie、Header、XML)都被当成SQL代码”,防御方法:

全输入点过滤:不仅过滤URL参数,还要过滤Cookie、Header、XML/JSON中的数据;

参数化查询(终极方案):不管是第一次插入还是第二次查询,都用?占位符(同第一篇);

二阶注入专项防御:存储数据时严格转义(比如mysqli_real_escape_string()),取出数据时再次验证。

六、互动与预告

小问题:你在测试中遇到过“Cookie注入”吗?是用Burp Suite的“Cookie Editor”修改的吗?欢迎评论区分享!

下期预告:我们将进入SQL注入的“终点”——防御篇,从代码层到架构层,彻底解决SQL注入问题。

(注:文中实验均基于PortSwigger Web Security Academy靶场,原文链接:https://portswigger.net/web-security/sql-injection)

学习资源


如果你也是零基础想转行网络安全,却苦于没系统学习路径、不懂核心攻防技能?光靠盲目摸索不仅浪费时间,还消磨自己信心。这份 360 智榜样学习中心独家出版《网络攻防知识库》专为转行党量身打造!

01内容涵盖

这份资料专门为零基础转行设计,19 大核心模块从 Linux系统、Python 基础、HTTP协议等地基知识到 Web 渗透、代码审计、CTF 实战层层递进,攻防结合的讲解方式让新手轻松上手,真实实战案例 + 落地脚本直接对标企业岗位需求,帮你快速搭建转行核心技能体系!

这份完整版的网络安全学习资料已经上传CSDN【保证100%免费】

**读者福利 |***CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 *(安全链接,放心点击)

02 知识库价值

  • 深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案
  • 广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南
  • 实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

03 谁需要掌握本知识库

  • 负责企业整体安全策略与建设的CISO/安全总监
  • 从事渗透测试、红队行动的安全研究员/渗透测试工程师
  • 负责安全监控、威胁分析、应急响应的蓝队工程师/SOC分析师
  • 设计开发安全产品、自动化工具的安全开发工程师
  • 对网络攻防技术有浓厚兴趣的高校信息安全专业师生

04部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

这份完整版的网络安全学习资料已经上传CSDN【保证100%免费】

**读者福利 |***CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享 ***(安全链接,放心点击)**

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询