1.同样审查源码,发现跟上一关只有一处不同,那就是这个 “$_POST['save_path']
”,上一关是GET方法传进保存路径,而这关使用POST方法,关于POST跟GET的区别我不多讲。
2.那上一关可以使用%00截断进行文件名操作,这题是不是也可以呢?答案是 NO,但是可以使用另一个方法——0x00截断,其实他们的原理是一样的,就是编码问题而已,本质上都是ascii码中的保留符号 null
具体的原理可以看这里:关于0x00截断与%00截断
3.使用 burpsuite拦截下包
在保存路径那里添加 info.phpp我们想要保存在服务器的文件名,大家会问怎么php多了个p?其实是为了我们添加0x00比较方便预留了一个位置,ascii中的null是不能直接输入的,所以需要点击hex进行修改16进制值
找到我们输入的保存的路径的16进制值,把最后一个p也就是70,改为00,这样就实现了向文件名尾部加入null的这么一个操作。
下面是修改后,然后点击放行提交
3.可以看到文件上传成功
我们同样跟上一关一样文件名只保留 info.php进行访问
执行成功