MySQL越权读取研究-LOAD DATA LOCAL INFILE

在渗透测试过程中,大家碰到的MySQL环境的次数应该还是比较多吧,一旦拿到MySQL的root账号且又是Windows系列的系统,使 用UDF或MOF提权就可以直接getsystem了(PS:MOF仅限Win2k3及之前的系列的系统提权前提是MySQL未降权),若是Linux 依然可以利用UDF获取一个shell(PS:Shell继承MySQL的权限),但是通常root账号都不是那么好获取到的呢,一般都是获取到的普通用 户,但经过各位安全工作者的测试挖掘,有人提出了一种越权读取mysql的user.MYD文件来获取root账号的方法,这种方法是否真的可用呢?下面 我们就来进行测试。
环境:
CentOS6.5 + Apache + MySQL
越权EXP:
  1. LOAD DATA LOCAL INFILE C:/mysql_install_path/data/mysql/user.MYD INTO TABLE test fields terminated by LINES TERMINATED BY \0′;
测试:
用户laterain进入Terminal环境下,登陆MySQL的root用户,添加普通用户testuser,并将test数据库的完全操作权限赋给testuser--注意这里是系统普通用户

以用户laterain进入Terminal环境下,登陆MySQL的testuser用户,建立poc表,以file列来存储读取的数据
这里要先建一个表,类型是text,文件名必须是字符串字面值
读取MySQL的data路径

尝试利用EXP

结果以失败告终,这是为何??
查询了一下LOAD DATA LOCAL INFILE的相关文档,得到了相关的解释
  1. http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html
  2. http://jingyan.baidu.com/article/b7001fe17009990e7282dd22.html
LOAD DATA LOCAL是以MySQL客户端的权限来读取文件的当前MySQL客户端是由用户laterain运行的,那么将继承laterain的权限,那么我么切换到root下看看/var/lib/mysql/mysql/user.MYD的权限配置

猜测是因为laterain对该文件无任何操作权限,所以失败了
如何证明我的想法呢,我建立了三个文件

先来用laterain运行的mysql客户端来读取下/tmp/poc/laterain和/tmp/poc/mysql文件试试

到此,足以证明我的想法是对的,那么别人是如何测试成功的呢?
他们是在webshell下连接MySQL数据库,操作系统是Windows系列的,Mysql用户为普通用户,无法直接通过load_file()来读 取user.MYD文件,但是利用LOAD DATA LOCAL INFILE将user.MYD导入进了数据表当中。如何实现的呢?
猜想:
在webshell下连接MySQL数据库,那么对于Mysql来说客户端就是web容器(如:Apache),在用LOAD DATA LOCAL INFILE的时候就是用Apache所拥有的权限去读取文件,既然成功了,那么原因可能是Mysql的目录权限配置有问题,或者是Apache在以较高的权限运行着,那么在webshell下应该也可以直接读取而不用再多此一举去Load Data了。