[RoarCTF 2019]Simple Upload
我们打开页面进行代码审计
1 | <?php |
是一个文件上传,但根往常的不一样,文件上传没有上传键
通过查询wp,我们发现这道题其实是定义了一个路由,我们知到在路由里,默认上传路径是/home/index/upload,但在这道题里,如果我们直接访问url+/home/index/upload,会直接报404错误,这里来解释一下
所以我们找到了题目的上传路径。
解法一
代码层绕过
主要是传进入的文件名在处理的时候被这么处理:
1 | foreach ($files as $key => $file) { |
这里有个strip_tags-— 从字符串中去除 HTML 和 PHP 标签
那我们能直接绕过,传1.<>php
1 | import requests |
得到.
我们访问这个文件(注意去左斜杠\),得到flag
解法二
upload批量上传
原因
1 | thinkPHP里的upload()函数在不传参的情况下是批量上传的 |
因此如果上传多个文件,这里的处理:
1 | $uploadFile = $_FILES['file'] ; |
$uploadFile['name']
是个数组,里面的每个元素是文件名。因此对数组操作,这里肯定可以绕过了,之后的处理也不用管了,反正支持多文件上传,和正常的单文件上传最后肯定是一样的。
师傅的脚本
1 | import requests |
我们发现文件名都是通过uniqid得到的,这是根据当前时间来得到的随机数,取这么个区间:
直接爆破最后的那几位即可