这个知识点一直都是似懂非懂,今天正式回顾一下:
…/是作为状态码被理解还是解析的时候进行了跳转?
再linux中使用一下命令:
cd tmp
mkdir 123
mkdir ../321
我们会发现在tmp目录下新建了一个123的文件,在tmp的上层目录新建了一个321的文件
这里我们猜测是因为文件名中包含了 "…/"这个条约字符串导致的
接下来我们直接修改文件名看看会有什么反映:
mv命令这里会出现一点分歧:
原因: 因为mv又修改文件名和移动文件的意思,而我又修改了文件名且包含…/ ,所以这里应该是被理解成了移动文件
所以使用mv修改文件名失败(!!!!之前我记得是可以修改的 会显示无法读取文件的状态之类的错误!!!
试试直接修改:
总结:
关于文件名包含…/字符能否实现目录跳跃,这里个人相信是可以实现的,无论是mkdir …/123.txt ,不管这个…/被理解成状态还是…/123.txt整体被理解成了文件名,都应该是由于文件名包含…/导致解析的问题。
!!!
依稀记得看过一篇文章,使用01editor修改文件名使之包含…/实现目录条约,有兴趣的同学可以去看一下
综上我认为其实我们如果说可以定义一个文件名为…/的话,那么这个文件会自动条约到上一层目录,但是具体为什么,我个人的理解是:创建一个文件夹 相当于命令mkdir , 既然命令mkdir …/test.txt 可以实现一个目录条约,那么创建一个…/test.txt的时候也可以实现目录条约
还是那句话 01editor可以修改文件名为…/test.txt 当时这个是实现了目录穿越的
关于file_put_content实现目录穿越的一点东西:
file_put_contents实现目录跳跃:
<?php
$path="../path123.txt";
$data="test";
file_put_contents($path,$data);
highlight_file(__file__);
在上层目录下创建了一个ppath123.txt
更改一下路径:
<?php
$path="/../path123.txt";
$data="test";
file_put_contents($path,$data);
highlight_file(__file__);
依然在上层目录下创建了文件
继续修改一下:
<?php
$path="sdsada";
$data="test";
file_put_contents($path,$data);
highlight_file(__file__);
在当前目录下创建了sasada文件
继续修改
<?php
$path="sdsada/../path123.txt";
$data="test";
file_put_contents($path,$data);
highlight_file(__file__);
依然是当前文件下创建 至于为什么 理解一下/…/就懂了
继续修改:
<?php
$path="sdsada/../../path123.txt";
$data="test";
file_put_contents($path,$data);
highlight_file(__file__);
在上层目录下创建了一个path123.txt的文件
因此我们在一些CTF比赛题目中可以使用这个方法实现目录穿越写文件