phpMyAdmin4.8.0~4.8.1文件包含漏洞

实验环境

墨者学院:phpMyAdmin后台文件包含实验

实验背景

phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞。

phpMyAdmin版本号

phpMyAdmin 4.8.0和4.8.1受到影响
漏洞索引为:CVE-2018-12613


漏洞分析

(漏洞分析)https://www.freebuf.com/column/207707.html
这篇文章对漏洞的成因分析的非常透彻

漏洞总结

在index.php中定义了对参数target过滤条件。若符合过滤条件,则target参数的value会被include。在其中一条过滤的规则中,允许先对target参数的value进行urldecode后再进行截断、判断。这里正是可利用的漏洞。


漏洞利用
php1.PNG

注意观察URL中target的值:
db_sql.php是白名单中的文件,可以通过过滤规则。
target=db_sql.php%253f/../../../../../../etc/passwd在过滤规则中会被截断成db_sql.php,从而通过过滤。而最终include的文件是db_sql.php%3f/../../../../../../etc/passwd
[个人猜测:也许php会简化include中给定的路径,db_sql.php%3f即使是错误的目录名最终也能成功执行include语句]

总之,显而易见的是,最后include了/etc/passwd并打印了出来!
这也就成功利用了phpMyAdmin文件包含漏洞!


进一步渗透——phpinfo()获取网站服务器路径

现在已经知道如何利用该漏洞执行(include)主机上的一个文件了,我们想获取一个完整的shell,由此控制整台主机。可以通过上传一句话木马获取shell,但是我们不清楚网站的路径。我们可以先利用该漏洞执行包含phpinfo()函数的php文件,获取更多关于网站、主机的信息。

执行phpinfo():

在phpMyAdmin中执行select ""语句
由于php的session机制,这条语句会写入服务器对应的session文件中
在浏览器中查找phpMyAdmin的cookie值
利用文件包含漏洞执行这个session文件,从而执行phpinfo()

php2.PNG

注意 :
session文件的路径不一定是/tmp/sess_xxxxx....xxx
这取决于php在服务器端的配置情况 (可以在phpinfo中session.save_path中查看到)

在phpinfo()给出的信息中,Document_root给出了网站服务器的根目录为/var/www/html

php3.PNG

上传木马获取shell:

上传木马方法有多种,本文使用mysql中into outfile "xxxxxx"的方法上传
在phpMyAdmin中执行以下语句:

select "" into OUTFILE "/var/www/html/hacker.php"

利用菜刀、AntSword等工具就可以获取shell

php4.PNG

你可能感兴趣的:(phpMyAdmin4.8.0~4.8.1文件包含漏洞)