当前位置:网站首页>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的前提下进行目录穿越就可以了,直接的?
,也是可以的
边栏推荐
- Kotlin study notes
- 莅临GOPS大会龙智展位,获取Forrester最新报告:《Forrester Wave:2021年第四季度企业服务管理报告》
- Bluu海鲜公司推出首批实验室培育的鱼类产品
- 用固态U盘让你的办公环境随身移动
- JSP第二篇 -----JSP浅聊EL表达式第二篇:EL表达式中的运算符
- WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题
- Kotlin annotations
- Cesium中自定义材质material
- 第十三届蓝桥杯(Web 应用开发)线上模拟赛【第十题】(RESTful API 开发)
- Kotlin解析String路径小知识
猜你喜欢
给大龄准备转行网络工程师的朋友一些建议
Notes: The difference between laravel, updateOrCreate and updateOrInsert
新库上线 | CnOpenDataA股上市公司基本信息数据
JSP第二篇 -----JSP浅聊EL表达式第二篇:EL表达式中的运算符
劳务派遣业务流程图
What are the role of document management system for companies?
Ansible自动化运维工具(一)安装及模块
五大理由告诉你为什么开发人员选择代码质量静态分析工具Klocwork来实现软件安全
方舟开服务器教程——开服配置常见问题及解决方法
深度学习初步认知
随机推荐
Some useful frameworks in Kotlin
Kotlin-学习的第五天之Handler
利用shell脚本同时编译生成多个cmake工程
方舟建筑代码指令大全
PHPUnit 单元测试
Use fontforge to modify font, keep only numbers
场外基金开户在手机办理安全吗?
头条二面:你确定ThreadLocal真的会造成内存泄露?
矩阵相乘
Flask 教程 第十二章:日期和时间
Kotlin委托属性知识点
基于opencv的实时睡意检测系统
我们仍未知道那天踩的MultipartFile file为null的大坑是为什么
西湖大学鞠峰组招聘【塑料降解 / 污水工程 / 微生物学】方向博士后和科研助理...
解决gradle导包速度慢问题
源码分析Canal专栏
Solve the problem of slow speed of gradle import package
实践篇1:深度学习之----LetNet之tensorflow2的实现
What are the latest developments in the handling of false information?KDD2022 "Fighting Misinformation and Responding to Media Bias" tutorial, 161 pages ppt
技术分享 | 接口自动化测试之JSON Schema模式该如何使用?