文章总结: 本文详解SQLi-Labs第50至53关,核心在于结合ORDERBY注入与堆叠查询。通过构造特定Payload在数字或字符串型注入点执行多句SQL操作,涵盖修改密码与删表等场景。文章对比了报错与盲注下的利用差异,提供了具体实例,旨在提升对堆叠注入实战技巧的理解与应用能力。 综合评分: 85 文章分类: WEB安全,渗透测试,漏洞POC
SQL注入实战:ORDER BY CLAUSE-Stacked Injection——sqli-labs第50/51/52/53关
原创
武文学网安 武文学网安
武文学网安
2026年2月4日 02:30 中国香港
大家好,我是武文。今天继续学习Stacked Injection ORDER BY注入,挑战sqli-labs第50/51/52/53关,因为这几个关卡类型一致,放一起简短介绍。
关卡名称:
- 第50关:GET – Error-based ORDER BY CLAUSE – Numeric – Stacked Injection
- 第51关:GET – Error-based ORDER BY CLAUSE – String – Stacked Injection
- 第52关:GET – Blind based – ORDER BY CLAUSE -numeric- Stacked injection
- 第53关:GET GET – Blind based – ORDER BY CLAUSE -String- stacked injection
这四个关卡都涉及到 ORDER BY 注入与 堆叠查询(Stacked Query)相结合的技巧,核心的差异在于 数据类型 和 错误信息的获取方式,以及是否使用 盲注 来绕过直接的数据回显。
通关思路:
第一步:理解核心注入点
每个关卡的注入点都在 ORDER BY 子句中,且都会通过 错误信息 或 盲注 来反馈条件真假。根据每个关卡的特点,我们分别探讨数字型和字符串型的注入。
- 第50关:数字型 ORDER BY 注入,通过错误信息确认注入点。
- 第51关:字符串型 ORDER BY 注入,核心原理和第50关类似,但处理的数据类型不同。
- 第52关:数字型 ORDER BY 注入,采用 盲注 来确认真假。
- 第53关:字符串型 ORDER BY 注入,采用 盲注 来确认真假。
第二步:确认注入点
在两关的表单中,注入点都位于 URL 参数中(比如 sort 参数)。首先,你需要确认 sort 参数是否可控,尝试修改其值并查看页面的变化:
?sort=1?sort=2?sort=3

页面能够正常显示,并且 ORDER BY的排序方式有所改变,说明我们成功控制了注入点。
第三步:构建注入语句
一旦确认了注入点,可以开始构造 堆叠查询 语句。堆叠查询使我们可以在一次请求中执行多个 SQL 语句,从而不仅能进行排序注入,还能执行其他操作(如获取数据库信息)。
第50关:数字型 ORDER BY 堆叠注入
-
确认排序字段数量:
通过测试以下几个数字,直到页面显示 SQL 错误,从错误信息中我们可以得知排序字段的数量:
?sort=1?sort=2?sort=3
测试中逐步增加字段,直到页面显示 SQL 错误,从错误信息中我们可以得知查询的列数为3。
可以参照46/47关的显错注入和盲注。本文主要利用stacked injection。
-
构建堆叠查询:
一旦确认了字段数量,使用堆叠查询语句来进一步注入。利用 布尔盲注 可以验证注入是否成立。
?sort=1; update users set password=’stacked50′ where username=’admin’;
此语句不仅会对 ORDER BY 进行排序,还会执行 UPDATE 语句更新 admin 用户的密码为 stacked50。通过数据库查询,可以验证密码已经成功修改。
第51关:字符串型 ORDER BY 堆叠注入
与第50关类似,第51关的核心原理一样,不过这次是针对 字符串类型的 ORDER BY。
-
确认闭合方式:
首先,检查
sort参数的闭合方式。你可以通过以下几个查询来测试闭合方式:
?sort=1?sort=1′?sort=1″?sort=1′–+

判断是否能正常显示,确定闭合方式为单引号闭合。
显错注入和盲注可以参考46/47关的显错注入和盲注。
- 构造字符串型堆叠查询:字符串类型的 ORDER BY 需要通过字符串拼接来构造查询,因此我们可以通过 堆叠查询 来构造查询语句。例如:
?sort=1′; update users set password=’stacked51′ where username=’admin’;
同样,执行堆叠查询会更新 admin 用户的密码为 stacked51。
第52关:数字型 ORDER BY 堆叠盲注
-
确认闭合方式:
测试
sort参数的闭合方式
?sort=1?sort=1′?sort=1″?sort=1″–+?sort=1′–+?sort=1′)–+?sort=1″)–+

可以判断出当前就是数字型,没有其他闭合方式。
显错注入和盲注可以参考46/47关的显错注入和盲注。
- 构造字符串型堆叠查询:字符串类型的 ORDER BY 需要通过字符串拼接来构造查询,因此我们可以通过 堆叠查询 来构造查询语句。例如:
?sort=1; update users set password=’stacked52′ where username=’admin’;
发现数据库里已经修改admin密码为stacked52,现在试一个更残暴的语句:
?sort=1;drop table users;
发现可以执行,成功删除users表。
第53关:字符串型 ORDER BY 堆叠盲注
(这里注意,前面我们删除了users表,需要点击reset数据库,不然后面一直报错)
- 确认闭合方式:
?sort=1?sort=1′?sort=1′–+?sort=1″?sort=1″–+?sort=1′)–+?sort=1″)–+

可以判断出当前闭合方式为单引号闭合。因页面无其他错误反馈,所以这关只能进行盲注。
- 构造字符串型堆叠查询:字符串类型的 ORDER BY 需要通过字符串拼接来构造查询,因此我们可以通过 堆叠查询 来构造查询语句。例如:
?sort=1′;update users set password=’stacked53′ where username=’admin’;
已经成功修改admin密码为stacked53.
总结:
这些关卡的通关技巧均基于 ORDER BY 注入与 堆叠查询 的结合,利用错误信息或盲注反馈来执行 SQL 操作。其实打了这么多关卡,会发现不同类型的SQL注入方式大致相同。当后面最后一页关卡通关后再来总结一份完整的sqli-labs通关攻略
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:武文学网安 武文学网安 武文学网安《SQL注入实战:ORDER BY CLAUSE-Stacked Injection——sqli-labs第50/51/52/53关》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论