upload-labs/Pass-21

- 从上面的代码可以看出,首先需要绕过MIME处理上传的文件,然后再处理保存的文件名
- 保存的文件名如果不是数组,则把文件名以 . 分开,. 后面的部分作为后缀名用于白名单处理
- 因此,保存的文件名部分必须要满足白名单才行
- 处理完白名单后,代码并未直接使用上传的文件名作为后续操作使用,而是从新做了组合;
- 文件名部分很显然就是 . 号之前的内容,后缀部分则是数组所有元素的长度-1 的位置的值
count() 函数返回数组中元素的数目
综合上面的考虑,我们可以将数据包发送的表单中的上传的名字为数组,这样就可以绕过2
为了满足3 ,无论我们的数组设置多大,最后一个值必须的是png
为了将webshell成功上传,必须确保数组的第一个值为test.php
那么数组应该设置多大,中间又应该设置多少个值哪?条件5中可以看出,我们需要把中间的值空出来不做设置,这样才能保证最后一个值不是png而是空;我们需要确保数组长度大于元素长度,这样才能够在取后缀名时绕过真实设置的后缀名
注1:当在 HTML 表单中有多个具有相同名称且名称后带有方括号[] 的输入字段时,这些字段的值会被组合成一个数组发送到服务器
注2:第29 行代码是关键


浙公网安备 33010602011771号