当前位置:网站首页>phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
2022-08-08 20:45:00 【sayo.】
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
$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;
}
你需要:
1.$_REQUEST['target']不为空
2.$_REQUEST['target']是字符串
3.$_REQUEST['target']不以index开头
4.$_REQUEST['target']不在$target_blacklist中
‘import.php’, ‘export.php’
5.Core::checkPageValidity($_REQUEST['target'])为真
代码在libraries\classes\Core.php 443-476行
check函数本身
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就是白名单
$_page
是取出$page
问号前的东西,是考虑到target有参数的情况,只要$_page
在白名单中就直接return true
但还考虑了url编码的情况,所以如果这步判断未成功,下一步又进行url解码
看似能够非常完美地能够验证请求的文件是正确的,但是利用url二次编码就可以绕过了。
由于服务器会自动解码一次,所以在checkPageValidity()中,$page
的值一开始会是db_datadict.php%3f
,又一次url解码后变成了db_datadict.php?
,这次便符合了?
前内容在白名单的要求,函数返回true
但在index.php中$_REQUEST[‘target’]仍然是db_datadict.php%3f,而且会被include,通过目录穿越,就可造成任意文件包含
其实也就是说在返回true的前提下进行目录穿越就可以了,直接的?
,也是可以的
边栏推荐
- 随手记:laravel、updateOrCreate 和 updateOrInsert 的区别
- 树查找(暑假每日一题 18)
- Mendix:企业成功执行数字化转型的9个因素
- 投资基金定投安全吗
- 同花顺买股票软件正规吗?安全吗?
- Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
- 高数_复习_第3章:一元函数积分学
- 学习笔记:线性表的顺序表示和实现(二级指针实现)
- 新库上线 | CnOpenData信息传输、软件和信息技术服务业工商注册企业基本信息数据
- 学习笔记:栈的应用1_递归(重点)
猜你喜欢
内网渗透之代理转发
莅临GOPS大会龙智展位,获取Forrester最新报告:《Forrester Wave:2021年第四季度企业服务管理报告》
头条二面:你确定ThreadLocal真的会造成内存泄露?
The new database is online | CnOpenData information transmission, software and information technology service industry basic information data of industrial and commercial registered enterprises
Ansible自动化运维工具(一)安装及模块
com.alibaba.fastjson.JSONException: default constructor not found. class
LeetCode_2_两数相加
Ansible自动化运维工具(二)playbook剧本
澳洲ABM创新模式将销售代理权给到个体,让利消费者
0-1 背包问题
随机推荐
Kotlin study notes
高数_复习_第3章:一元函数积分学
实践篇1:深度学习之----LetNet之tensorflow2的实现
Kotlin中IO流
Simple Swing interface notes
Flask 教程 第十章:邮件支持
VSCode 必知必会的 20 个快捷键
方舟建筑代码指令大全
Flask 教程 第十三章:国际化和本地化
Kotlin反射
The new library online | CnOpenDataA shares of the listed company basic information data
Kotlin parsing String path knowledge
fillder4 keeps prompting the system proxy was changed, watch me solve it
【分享】如何在集简云平台自己进行应用开发?
Kotlin-学习的第五天之Handler
Mysql management commands
莅临GOPS大会龙智展位,获取Forrester最新报告:《Forrester Wave:2021年第四季度企业服务管理报告》
Kotlin基础稳固第一天
Use fontforge to modify font, keep only numbers
劳务派遣业务流程图