upload-labs/Pass-21

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

注1:当在 HTML 表单中有多个具有相同名称且名称后带有方括号[] 的输入字段时,这些字段的值会被组合成一个数组发送到服务器
注2:第29 行代码是关键

posted @ 2025-02-25 21:57  小圣爱学习  阅读(19)  评论(0)    收藏  举报