关于Mysql中select into outfile权限的探讨
来源:互联网 发布:vscode 设置语法高亮 编辑:程序博客网 时间:2024/05/21 11:00
在渗透测试的过程中,如果网站数据库为Mysql,在sql注入的过程中如果爆出了网站的绝对路径,常规思路会去查看一下Mysql中用户权限是否有读写权限。sqlmap就是按照这样的思路写入shell的,不过在不知道网站绝对路径的情况下,sqlmap会对一些常规的路径进行写入尝试。在这里,我主要记录一下为什么有时候shell写不进去路径。
在我的经验里,有时候在linux渗透测试的后,即使mysql数据库用户是root权限(肯定会有读写权限),在对特定目录进行写入shell的时候还是会出问题。在这里实验一下,到底是啥原因。
首先,在系统环境为ubuntu16.04.2+mysql 5.7.17中尝试一下。直接用的mysql中的root用户来进行测试。尝试写入0x3c3f70687020706870696e666f28293b203f3e,出现如下错误:
这是由于启动mysql的时候使用了--secure-file-priv这个参数,这个参数的主要目的就是限制LOAD DATA INFILE或者SELECT INTO OUTFILE之类文件的目录位置。可以使用SELECT @@global.secure_file_priv;查看当前设置的路径,默认为/var/lib/mysql-files。如下图所示:
现在,把这个选项关掉继续测试outfile写入文件权限的问题。在/etc/mysql/my.cnf中如下配置,然后重新启动mysql服务即可。
[mysqld]secure-file-priv = ""
查看一下:
好了,继续。写入tmp目录下成功了。
可以写入成功,这是因为tmp目录任何用户都有权限进行读写。查看一下写入的文件的权限,是数据库的权限。
以当前用户创建一个目录,如下所示:
尝试写入文件到该目录下:
写入失败。尝试把目录所有者改为mysql再试一下。
还是失败。给test目录777权限再试一下:
依然失败。原因是ubuntu中的apparmor在作怪。这个类似于selinux。可以关掉再试一下,记住关掉apparmor不是service apparmor stop;(执行stop还是写不进去的)而是service apparmor teardown。
发现在test目录设置为777权限的时候可以写入成功了,如果设置为当前用户muggle权限,还是写入失败了,把目录改为mysql权限又可以写入成功了。
接下来在CentOS7+MariaDB测试一下,MariaDB版本如下:
尝试写入/tmp目录:
写入成功。但是你到tmp目录下找不到写入的文件。这个的原因是mariadb systemd service中的设置造成的。
其实,在tmp目录下,之前写入的文件存到了下面这个目录下面:
如果想要让写入的文件直接存到/tmp目录下,需要把mariadb.service中PrivateTmp设置为false,然后执行systemctl daemon-reload命令,再重启一下mariadb即可。如下再次写入/tmp目录,即可让写入的文件直接在tmp目录下面。
然后按照与ubuntu下测试的类似,在Documents下创建test目录,test目录权限为当前用户权限时,写入失败,test目录为mysql权限,写入失败。test目录权限设置为777,写入同样失败。
我们来看一下CentOS中selinux的状态:
发现selinux是开启的,把selinux关闭试一下是否能够写入成功。发现采用命令sudo setenforce 0临时关闭selinux,然后写入也是失败的。那直接永久关闭试一下。
修改/etc/selinux/config。把SELINUX=enforcing,设置为SELINUX=disabled即可。然后重启系统。
selinux已经关闭了。然后继续尝试写入,在test目录权限为当前用户,mysql权限及目录为777权限的时候,都是写入失败。好吧,这个地方有点诡异。按理说关闭selinux之后,只要目录权限为777或者mysql权限,都是可以写入成功的。
把每一级目录都加上可执行权限,试一下是否可以写入成功。
可以看到,还是写入失败。那现在把panda和test目录的所有者改为mysql试试看。能不能写入成功:
发现可以写入成功的。那现在把panda和test目录都改为777,是不是也可以写入成功呢?发现也是可以写入成功的。也就是说,在CentOS 7下面,想要在test目录下写入成功,需要每一级目录的所有者都为mysql或者每一级目录都是777权限。然而,某次尝试把selinux关闭后,重启之后,发现只要写入目录为mysql权限或者777权限都是可以写入成功的。略诡异。。。
有一种讨巧的办法,在写入的时候不指定绝对路径,这样文件写入/etc/my.cnf中设置的datadir目录。默认目录为/var/lib/mysql/下面。然后mv写入的文件到指定目录下即可。
- 关于Mysql中select into outfile权限的探讨
- mysql 中关于select into outfile 提示权限不足的问题
- mysql的select into outfile
- mysql select into outfile
- MYSQL解决select ... into outfile '..' mysql写文件权限问题
- 解决select ... into outfile '..' mysql写文件权限问题
- mysql select into outfile报无权限,访问被拒绝
- MySQL select into outfile 语法
- mysql语句-select...into outfile
- mysql语句-select...into outfile
- select into outfile 需要file on *.* 的权限
- select into outfile的用法
- 关于MYSQL into outfile注射
- mysql select * into OUTFILE 不会锁表
- MySQL使用SELECT...INTO OUTFILE导出文本文件
- MySQL使用SELECT INTO OUTFILE导出文本文件
- mysql select into outfile 语法 乱码问题
- MySQL 导出数据select into outfile用法
- 前端性能优化
- 关于activiti
- 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
- nagios_监控客服端口
- Codeforces Round #405 Div. 1 B. Bear and Tree Jumps
- 关于Mysql中select into outfile权限的探讨
- AndroidStudio真机运行后中文乱码
- [Linux/Ubuntu] vi/vim 使用方法讲解
- SQL 函数
- 水果分类
- Java并发编程
- 中心极限定理的一个例子:大小医院的新生儿
- Gallery、ImageSwitcher
- Java基础总结(一)对象,类,属性,方法