再谈Mysql中limit后的注入

admin 2021年12月1日08:13:40评论329 views1字数 911阅读3分2秒阅读模式

from:http://zone.wooyun.org/content/25820

0x01 问题来了
   前几天@DM_同学在群里发现一个问题,关于mysql中limit的注入。目前limit后注入的唯一方法是使用procedure analyse进行报错注入,详细请阅读http://zone.wooyun.org/content/18220,在文中提到此方法适用于5.x系列的mysql,然而DM_测试5.6.11的时候此方法报错(无耻盗@DM_图一张):

再谈Mysql中limit后的注入
那么问题就来了,翻遍国内外资料,群里各位大佬介不知情况。本着追根溯源的精神,我“不自量力”的翻看了mysql源码,发现了此问题的原因。

0x02问题根源
先说结论:此方法只适用于小于5.6.6的5.x系列。
翻看5.6.6以下版本的analyse()实现
https://github.com/mysql/mysql-server/blob/5.5/sql/sql_analyse.cc
重点在加粗函数
再谈Mysql中limit后的注入

我们动态调试
输入语句:SELECT id FROM test WHERE id >0 ORDER BY id LIMIT 1,1 procedure analyse(1,extractvalue(rand(),concat(0x3a,version())));
给proc_analyse_init函数下断点
对第一个参数做验证,fixed=1

再谈Mysql中limit后的注入
对第二个参数做验证,fixed=0,表示此参数没有被固定,将被fix_fields函数处理再谈Mysql中limit后的注入
此次可以看见我们的第二个参数extractvalue(rand(),concat(0x3a,version()))将被fix_fields处理
在mysql中所有函数都是用Item_func类来表示的,当然extractvalue也不例外。
继续跟:

再谈Mysql中limit后的注入
0x03为什么5.6.6以后不行了
在这个版本的时候analyse函数进行了改写,于是乎不行了
再谈Mysql中limit后的注入
怎么改写的?你没有看错,两个参数都只能为uint了。再谈Mysql中limit后的注入
0x03总结
其实我就想说limit后的注入,使用analyse()只能5.0.0<mysql<5.6.6的版本

再谈Mysql中limit后的注入


本文始发于微信公众号(关注安全技术):再谈Mysql中limit后的注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月1日08:13:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   再谈Mysql中limit后的注入https://cn-sec.com/archives/502611.html

发表评论

匿名网友 填写信息