Mysql注入中的outfile、dumpfile、load_file函数详解

作者:mrr 时间:2024-01-21 01:30:47 

在利用sql注入漏洞后期,最常用的就是通过mysql的file系列函数来进行读取敏感文件或者写入webshell,其中比较常用的函数有以下三个

  • into dumpfile()

  • into outfile()

  • load_file()

我们本次的测试数据如下

Mysql注入中的outfile、dumpfile、load_file函数详解

读写文件函数调用的限制

因为涉及到在服务器上写入文件,所以上述函数能否成功执行受到参数 secure_file_priv 的影响。官方文档中的描述如下

Mysql注入中的outfile、dumpfile、load_file函数详解

翻译一下就是

  • 其中当参数 secure_file_priv 为空时,对导入导出无限制

  • 当值为一个指定的目录时,只能向指定的目录导入导出

  • 当值被设置为NULL时,禁止导入导出功能

这个值可以通过命令 select @@secure_file_priv 查询。由于这个参数不能动态更改,只能在mysql的配置文件中进行修改,然后重启生效。

dumpfile与outfile的区别

导出数据库场景下的差异

select …… into outfile

我们先来看一下mysql官方文档里对于这两个函数的解释

Mysql注入中的outfile、dumpfile、load_file函数详解

Mysql注入中的outfile、dumpfile、load_file函数详解

其中有两个值得注意的坑点

outfile函数可以导出多行,而dumpfile只能导出一行数据
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

我们接下来通过导出测试看看这里面的细节

首先通过命令 select * from test into outfile '/tmp/test.txt' 来使用outfile导出

可以看到文件 /tmp/test.txt 文件中保存了所有的数据并且在一行数据的末尾自动换行

Mysql注入中的outfile、dumpfile、load_file函数详解

通过查看官方文档,可以看出使用如下参数可以进行格式调整

Mysql注入中的outfile、dumpfile、load_file函数详解

其中 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'

得到的导出文件如下

Mysql注入中的outfile、dumpfile、load_file函数详解

select …… into dumpfile

而接着使用命令 select * from test into dumpfile '/tmp/test.txt' 使用dumpfile进行导出

可以看到此命令在执行的时候提示输出超过一行

Mysql注入中的outfile、dumpfile、load_file函数详解

查看文件内容

Mysql注入中的outfile、dumpfile、load_file函数详解

可以看见通过dumpfile导出的数据行数据之间并未进行换行且只导出了部分数据

写入webshell或者udf下的差异

 select …… into outfile

我们使用命令 select 'a\naa\raaaa' into outfile '/tmp/test.txt' 来看一下在常用的写文件场景下的结果

Mysql注入中的outfile、dumpfile、load_file函数详解

可以看到outfile对导出内容中的\n等特殊字符进行了转义,并且在文件内容的末尾增加了一个新行

我们接着使用命令 select 'a\naa\raaaa' into dumpfile '/tmp/test.txt' 来看一下

Mysql注入中的outfile、dumpfile、load_file函数详解

可以看到dumpfile对文件内容是原意写入,未做任何转移和增加。这也就是为什么 我们在平常的UDF提权中使用dumpfile进行dll文件 写入的原因

还有一个需要关注的点就是:outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成\',那么基本就GG了,但是load_file,后面的路径可以是单引号、0x、char转换的字符,但是路径中的斜杠是/而不是\

总结

以上所述是小编给大家介绍的Mysql注入中的outfile、dumpfile、load_file函数详解网站的支持!

来源:https://hacksec.xyz/2018/05/09/mysql-file

标签:mysql,outfile,dumpfile,load,file
0
投稿

猜你喜欢

  • 详解Golang 中的并发限制与超时控制

    2024-02-18 12:43:21
  • go语言中iota和左移右移的使用说明

    2024-04-25 15:16:55
  • C#使用ADO.Net连接数据库与DbProviderFactory实现多数据库访问

    2024-01-24 08:56:29
  • Oracle查看逻辑读、物理读资源占用排行的SQL语句

    2023-06-25 23:53:53
  • 利用python库matplotlib绘制不同的图表

    2022-11-06 18:08:16
  • Web 前端优化最佳实践之 Cookie 篇

    2008-06-25 13:00:00
  • 详解Python字符串原理与使用的深度总结

    2021-09-17 17:31:14
  • 关于SQL嵌套的误解分析

    2024-01-22 22:01:03
  • Vscode 基础使用教程大全

    2023-03-06 01:58:18
  • pytorch 查看cuda 版本方式

    2022-07-16 23:43:05
  • 跟老齐学Python之变量和参数

    2023-01-12 22:23:31
  • Python urllib.request对象案例解析

    2022-04-14 22:24:43
  • python破解WiFi教程代码,Python蹭网原理讲解

    2022-09-05 20:14:43
  • Mysql错误1366 - Incorrect integer value解决方法

    2024-01-13 03:21:35
  • Jupyter Notebook安装及使用方法解析

    2022-06-22 08:28:09
  • python 装饰器功能以及函数参数使用介绍

    2022-04-03 05:12:32
  • Python中的多线程实例(简单易懂)

    2021-12-07 04:09:47
  • python清除函数占用的内存方法

    2021-10-29 19:15:47
  • 分析Python中设计模式之Decorator装饰器模式的要点

    2021-12-06 12:04:01
  • ASP:使用ImageMagickObject组件制作缩略图

    2008-10-21 12:21:00
  • asp之家 网络编程 m.aspxhome.com