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

  • into dumpfile()
  • into outfile()
  • load_file()

我们本次的测试数据如下

读写文件函数调用的限制

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

翻译一下就是

  • 其中当参数 secure_file_priv 为空时,对导入导出无限制
  • 当值为一个指定的目录时,只能向指定的目录导入导出
  • 当值被设置为NULL时,禁止导入导出功能

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

dumpfile与outfile的区别导出数据库场景下的差异

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'

得到的导出文件如下

select …… into dumpfile

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

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

查看文件内容

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

写入webshell或者udf下的差异

select …… into outfile

我们使用命令 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注入中更加麻烦,因为会自动将单引号转义成\',那么基本就GG了,但是load_file,后面的路径可以是单引号、0x、char转换的字符,但是路径中的斜杠是/而不是\

mysql注入中的outfile、dumpfile、load_file函数详解相关推荐

  1. python中transpose函数_对numpy中的transpose和swapaxes函数详解

    transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...

  2. python中zip的使用_浅谈Python中的zip()与*zip()函数详解

    前言 1.实验环境: Python 3.6: 2.示例代码地址:下载示例: 3.本文中元素是指列表.元组.字典等集合类数据类型中的下一级项目(可能是单个元素或嵌套列表). zip(*iterables ...

  3. java里的进制转换函数_基于Java中进制的转换函数详解

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  4. 【转】angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下 通常大家在使用 ...

  5. MySql截取字符串的几个常用函数详解

    MySql截取字符串的几个常用函数详解 MySQL 截取字符的几个常用函数:left(), right(), substring(), substring_index(),mid(), substr( ...

  6. wow mysql dbc_DBC中悲观锁介绍附案例详解

    DBC中悲观锁介绍附案例详解 了解下DBC中悲观锁: 代码如下: BDUtils 工具类: package JDBC; import java.sql.*; public class BDUtils ...

  7. mysql注入 outfile_Mysql注入中的outfile、dumpfile、load_file函数详解

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

  8. mysql 注入 file load_Mysql注入中into outfile和load_file()总结

    (1)outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径.这个问题在php注入中更加麻烦,因为会自动将单引号转义成\',那么基本没的玩了. 唯一的一种可能就是你使用mysql ...

  9. angularjs指令中的compile与link函数详解

    通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link,post-link的用法与区别. angularjs里的指令非常神奇,允许你 ...

最新文章

  1. 大学录取通知书也越来越科技范儿
  2. 关于实现udev/mdev自动挂载与卸载
  3. tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
  4. Android 开发学习资源
  5. Java实现Huffman哈夫曼树(数组实现)
  6. XML——XSLT的一个简单荔枝
  7. 一文重新认识联邦学习
  8. Makefile:宏定义EXTRA_CFLAGS += -D 与CONFIG_ =y
  9. IDA for Linux/Mac/Windows
  10. 程序员以上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?
  11. 【机房收费系统C#版】——导出Excel
  12. 【一起学爬虫】爬虫实战:爬取京东零食
  13. 交易系统开发(一)——交易系统简介
  14. Windows 10聚焦怎么用?教你玩转Windows聚焦功能
  15. python中try怎么用_python中的try的用法,try 的用法?,英文try的用法
  16. 再不跳槽,应届毕业生拿的都比我多了!
  17. python 已知三角形的三条边,通过反三角函数计算出三角形的三个角;其中用到math的引用;
  18. Linux常用命令大全,一篇搞定
  19. Ghost高级教程——克隆备份
  20. java 通过 itext生成pdf添加,插入文字,图片

热门文章

  1. 使用Devstack部署neutron网络节点
  2. NR 5G SBA架构
  3. 【前端面试分享】- 寒冬求职下篇
  4. 009-对象—— 构造方法__construct析构方法__destruct使用方法 PHP重写与重载
  5. Spring+XFire WS-Security安全认证开发感悟
  6. JS开发利器-IxEdit傻瓜式JavaScript开发工具(附下载、汉化版、视频教程)
  7. [洛谷P1268]树的重量
  8. NGINX发布支持动态配置的开源Web服务器
  9. 2018年自媒体人的出路在哪?
  10. 不只是让利百亿,天猫618揭示了哪些新零售趋势?