这题的原型是php 4.8.1任意文件包含漏洞 细节看这个https://www.cnblogs.com/leixiao-/p/10265150.html 简单来说,就是你带过去的目录路径如果出现了形如/(windows下\ )或者.. 这样的东西,解析器会认为你人为制定了path,那么在这之前的所有东西都忽略不计 从这里开始解析路径,详情看PHP include函数说明
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。
如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。
如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 `..` 开头)
——include_path 都会被完全忽略。例如一个文件以 `..`/ 开头,则解析器会在当前目录的父目录下寻找该文件。
然后有了这个基础就很简单了,自己带一个?过去,然后出现点点,值得注意的是传参的&,因此checkFile里的任何操作都不会对file参数产生任何影响,over! 最后补充一点的是windows环境下自己搭建环境可能需要对url进行二次编码,即将payload里面的?变换为%253f,具体原因我也不知道,有懂得师傅可以在评论区指导一下 那个fffff的文件名是在hint.php里面给出的 参考视频链接:https://www.bilibili.com/video/BV1d64y1x7Pg/
|