前言

聊一聊mysql在被waf禁掉了information_schema库后还能有哪些利用思路,这个想法是前一段时间想到的,这次趁着安全客活动就在这里记录一下吧~

#  实验环境windows 2008 r2
phpstudy (mysql 5.7)
某waf(原因是该waf可以设置非法访问information_schema数据库)

前置任务

进行bypass之前先了解一下mysql中的information_schma这个库是干嘛的,在SQL注入中它的作用是什么,那么有没有可以替代这个库的方法呢?

information_schema

简单来说,这个库在mysql中就是个信息数据库,它保存着mysql服务器所维护的
所有其他数据库的信息,包括了数据库名,表名,字段名等。

在注入中,information_schema库的作用无非就是可以获取到table_schema,table_name,column_name这些数据库内的信息。

MySQL5.7的新特性

由于performance_schema过于发杂,所以mysql在5.7版本中新增了sys schemma,基础数据来自于performance_chema和information_schema两个库,本身数据库不存储数据。

*注*: 这里说一下,现在网络上能搜索到的文章大部分都是利用innoDB引擎绕过对information_schema的过滤,但是mysql默认是关闭InnoDB存储引擎的,所以在本文中不讨论该方法,若想了解可自行搜索,网络上有很多分析文章了。

sys.schema_auto_increment_columns

​ 开始了解这个视图之前,希望你可以想一下当你利用Mysql设计数据库时,是否会给每个表加一个自增的id(或其他名字)字段呢?如果是,那么我们发现了一个注入中在mysql默认情况下就可以替代information_schema库的方法。

schema_auto_increment_columns,该视图的作用简单来说就是用来对表自增ID的监控。

​ 这里我通过security(sqli-labs)和fortest(我自建库)两个库来熟悉一下schema_auto_increment_columns视图的结构组成,以及特性。

# fortest库data 表存在自增idno_a_i_table 表不存在自增idtest 表存在自增id
# security库//该库为sqli-labs自动建立emails,referers,uagents,users

​ 可以发现,fortest库中的no_a_i_table并不在这里存在,然而其他非系统库的表信息全部在这里。根据前面介绍的schema_auto_increment_columns视图的作用,也可以发现我们可以通过该视图获取数据库的表名信息,也就是说找到了一种可以替代information_schema在注入中的作用的方法。

​ 当然了,如果你说我们就是想想通过注入获取到没有自增主键的表的数据怎么办?通过翻阅sys中的视图文档,我又发现了一个视图也许可以实现这种需求?。

schema_table_statistics_with_buffer,x$schema_table_statistics_with_buffer

查询表的统计信息,其中还包括InnoDB缓冲池统计信息,默认情况下按照增删改查操作的总表I/O延迟时间(执行时间,即也可以理解为是存在最多表I/O争用的表)降序排序,数据来源:performance_schema.table_io_waits_summary_by_table、sys.x$ps_schema_table_statistics_io、sys.x$innodb_buffer_stats_by_table

​ 通过介绍的内容我们可以很容易的发现,利用“数据来源”同样可以获取到我们需要的信息,所以说这样的话我们的绕过information_schema的思路就更广了。加下来依次看一下各个视图的结构:

# sys.schema_table_statistics_with_buffer可以看到,在上一个视图中并没有出现的表名在这里出现了。
# sys.x$schema_table_statistics_with_buffer
# 在从`数据来源`中随便选取一个视图为例(想查看视图详细结构等信息可自行测试)
# sys.x$ps_schema_table_statistics_io
# 可忽略table_name='db',默认的并非我创建。

注: 类似的视图等还有很多,若有兴趣可自行翻阅,这里仅抛砖引玉吧,记录一下自己之前的想法思路。

Bypass information_schema

​ 上面的方法的确可以获取数据库中表名信息了,但是并没有找到类似于information_schema中COLUMNS的视图,也就是说我们并不能获取数据?

join

这个思路在ctf中比较常见吧,利用join进行无列名注入,如何利用到这里就显而易见了。

join … using(xx)

​ 简单的记录一下payload吧。以本文开头的环境为例,这里的waf会完全过滤掉information_schema库。

由于开启防护后会拦截正常注入,所以图中payload可能会有些乱,我会将简单的payload整理在下面,绕过防护的部分完全可以自由发挥。

# schema_auto_increment_columns?id=-1' union all select 1,2,group_concat(table_name)from sys.schema_auto_increment_columns where table_schema=database()--+
# schema_table_statistics_with_buffer?id=-1' union all select 1,2,group_concat(table_name)from sys.schema_table_statistics_with_buffer where table_schema=database()--+

其他的就不测试了,都是一个payload。


获取字段名

# 获取第一列的列名?id=-1' union all select*from (select * from users as a join users b)c--+
# 获取次列及后续列名?id=-1' union all select*from (select * from users as a join users b using(id,username))c--+

写在后面

​ 文章只是分享一个自己在绕过类似防护的思路,当然也是有一定限制,前提要是mysql ≥ 5.7版本。绕过的方法可能还有很多,希望各位表哥可以不吝赐教。文中可能还有哪些视图并没有全部指出,可以自行查找类似的功能点。

聊一聊bypass information_schema相关推荐

  1. Bypass information_schema与无列名注入

    文章目录 Bypass information_schema 前言 前置任务 MySQL5.7的新特性 sys.schema_auto_increment_columns schema_table_s ...

  2. web安全学习-sql注入-针对mysql的攻击

    文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...

  3. SWPUCTF2019web题复现

    [SWPU2019]web1-easy_web 有一个登录框,试了试万能密码失败,那就注册吧 登录后发现有一个申请广告,在标题处输入11111111',发现报错,应该是sql注入 禁用了or,空格等等 ...

  4. i春秋2020新春公益赛 GYCTF有关SQL注入题复现

    0x00 前言 最近这段时间参加过一些CTF在线竞赛,做过一些Web题,发现SQL注入漏洞出现的频率可真高!不过在做题中也get到了一些Web新知识,现在通过题目复现的方式总结一下. 0x01 bla ...

  5. 【web-ctf】ctf_BUUCTF_web(2)

    文章目录 BUUCTF_web SQL注入 1. [RCTF2015]EasySQL 2. [CISCN2019 华北赛区 Day1 Web5]CyberPunk 3. [CISCN2019 总决赛 ...

  6. [GYCTF2020]Ezsqli --BUUCTF

    目录 分析 爆表 无列名注入 分析 先上fuzz跑 长度为507的表示被过滤掉了,长度497的回显false,也有可能被过滤删掉的,测试的时候发现注释符被过掉了,对比查询1和1#或1-- 结果都是返回 ...

  7. SQL注入绕过之过滤了‘as‘与无列名注入

    0x00 当过滤了as时: 也就代表database()无法使用,无法查询数据库信息 换思路获取库名,利用报错: -1' || (select*from aa)#          -1'or(sel ...

  8. Go singleflight

    缓存穿透.缓存击穿.缓存雪崩解决方案 缓存处理 缓存处理流程 缓存击穿 单飞 缓存击穿是指缓存中没有但数据库存在的对应key的值,由于缓存中key的过期时间到期,转而去数据库读取.当并发请求多大时会引 ...

  9. 【网络安全】SQL注入bypass最新版安全狗

    前言 安全狗又偷偷摸摸更新了 [网络安全学习] 绕过 之前安全狗就像没开发完一样,简单内联就过去了,但是现在的安全狗摇身一变,变得稳重了起来. 就连报错界面都变成了大人的模样. 看这架势,不好过啊 首 ...

最新文章

  1. 如何查看matlab的启动参数,如何使用多个参数在Matlab中执行“查找”?
  2. zk和eureka的区别
  3. mdkstc系列器件支持包下载_Find X2系列 Android 11 Beta1 测试版发布
  4. 编写五子棋的完整python代码_python实现五子棋游戏(pygame版)
  5. 初识面向对象(理论1)
  6. linux-shell-命令总结
  7. ClassicLink概述
  8. 【渝粤教育】国家开放大学2018年春季 0299-21T中国古代文学(1) 参考试题
  9. paip.为什么软件体积越来越大
  10. 360张图围绕成为3d_3D设计将在10分钟内成为专业人士
  11. linux音视频编解码工具,LINUX 音视频编解码
  12. 微信小程序---快速上手云开发
  13. Git 版本控制/项目迭代
  14. iOS 开发 : 14个技巧助你适配 iOS10
  15. 关于数字化转型方法论的一些思考
  16. 对Slim 框架进行总结 一
  17. RobotStudio教程:ABB机器人拆垛与码垛应用示教编程与虚拟仿真
  18. 朱有鹏 socket编程接口介绍(3)
  19. 什么是CRC和CRC检验?
  20. 带UI界面的学生管理系统

热门文章

  1. redis 硬件要求_Redis持久化机制
  2. java动态代理--代理接口无实现类
  3. spark实验遇到的问题
  4. ByteBuf的源码分析
  5. DevC++怎么更改背景颜色
  6. 1094 谷歌的招聘 (20分)_25行代码AC
  7. 【最新合集】IDEA 快捷键整理
  8. c语言函数的程序设计,C语言程序设计第3版,第6章函数程序设计.ppt
  9. samba 端口_无需公网IP,易有云支持SAMBA远程连接家里设备
  10. Fiddler对手机抓包