upload-labs pass-21

这一关还是来审计一下代码。

通过数据包conten-type类型进行MIME检查(可以伪造),如果提交了save_name参数,则以save_name参数作为文件名,否则取$_FILES超全局变量获取的文件名。接下来is_array()判断如果文件名不是数组则使用explode方法将文件转小写后,从”.“分开,作为数组元素。

end方法是使指针指向末尾元素,而reset方法是使指针指向开头元素。

理想的程序运行应为:(用户正常上传文件):

  1.         用户输入文件名,如abc.jpg,此时file=abc.jpg
  2.         explode判断非数组,将file以"."分割,转为数组。此时file=['abc','jpg']
  3.         接着判断后缀,end方法使ext指向数组中最后一个元素,即jpg,允许上传。
  4.         reset方法返回数组第一个元素,即abc,file[count(file)-1]这里是file[1],count()计算数组有几个元素,这里是两个,而file[1]是jpg,故拼接完成,移动到上传目录。

        这里理想情况是用户上传非数组,但是我们可以就上传数组,这里绕过思想就是,如果我们提交POST时,使save_name有三个元素,分别提交save_name[0]=a.php,save_name[2]=jpg,由于save_name[2]为数组最后一个元素,所以end获取后缀为jpg,可以绕过后缀白名单检测,而拼接文件名时,由于count=3,所以file[count(file)-1]为file[1],这里就是save_name[1],而我们没有提交,所以为空,故文件名就为数组第一个元素+"."+" "拼接,即"abc.php.",而利用Windows会自动处理特殊字符的特性,我们就可以访问到这个文件,从而绕过。

注意!这里还需要修改MIME类型,绕过第一道检测。

可以看到,我们上传成功了。

我们直接访问这个文件就好了。

解题点:数组绕过,windows处理特殊字符的特性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Forfun_tt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值