为啥想写这道题的wp呢,因为这道题就是照着phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)复现出来的

题目

查看源码很容易找到source.php,直接访问

分析

题目的意思也很好理解主要是要这三个条件全部满足,就会进行文件包含

if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
}

发现了checkFile()这个函数,那我们从这个函数来进行分析

首先进来发现了白名单

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

还有就是该函数的末尾,如果输入的参数值包含有白名单里的值,就会返回true

 if (in_array($_page, $whitelist)) {
return true;
}

那我们先来看下hint.php(因为这个文件可能是隐藏文件)

http://220.249.52.133:54093/source.php?file=hint.php

确实是给了提示,接下来我们就要考虑怎样绕过,最后读到ffffllllaaaagggg中的内容

$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);

这个都很好理解,其实大概的意思就是先在$page最后追加个?,再返回最后一个?的地址,然后再用mb_substr截断,大概截断的就是传入file参数的内容

我们可以考虑用双重编码绕过,因为后端会自动解码一次,然后遇到urldecode()函数会再次进行解码,来进行绕过白名单

payload:

http://220.249.52.133:54093/source.php?file=hint.php%253f../../../../../../ffffllllaaaagggg

ps:这里我之前有个疑惑,就是最后再进行包含的时候这个?会有没有影响,其实我大概实践了一下,在进行目录穿越的过程中,文件名+其他字符../../../ 这是没有影响的

确实是可以返回上一级目录

最新文章

  1. Android之控件使用
  2. Chrome F12学习
  3. MyEclipse中代码格式化后自动换行
  4. MyBatis动态SQL详解
  5. Runas命令:能让域用户/普通User用户以管理员身份运行指定程序。
  6. Magento修改css样式更新之——grunt命令使用
  7. 4.python中的用户交互
  8. Getopt::Long 模块的简单使用
  9. Makefile里面的$(MAKE)到底是啥
  10. asp.net web api KnownTypeAttribute
  11. [2017.02.21] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》
  12. Android 编程之入门开发目录管理器开发文件事件操作-2
  13. 20175324 《Java程序设计》第3周学习总结
  14. QT中添加工具条QToolBar
  15. HTML table导出到Excel中的解决办法
  16. Docker Volume
  17. django+xadmin+echarts实现数据可视化
  18. HDU 1700 Points on Cycle (几何 向量旋转)
  19. javaWeb中的文件上传下载
  20. 微服务架构之spring boot admin

热门文章

  1. MySQL查询数据库表空间大小
  2. Java值引用和对象引用区别Demo
  3. 去除指定….RemoveMatching…(Power Query 之 M 语言)
  4. C#汉字转汉语拼音
  5. CF1427A Avoiding Zero 题解
  6. 我的邮箱客户端程序Popmail
  7. ACwing02.01背包问题
  8. nim_duilib(10)之slider、progress and circleprogress
  9. 【LeetCode】455. Assign Cookies 解题报告(Java & Python)
  10. 【LeetCode】695. Max Area of Island 解题报告(Python & C++)