在玩php文件上传的时候发现,move_uploaded_file此函数好像是有某种缓存机制。
如果文件名包含<>*|之类的字符,会移动文件失败。 例如(test.php<)。
但是在上传过(test.php)文件后,再上传(test.php<)则能成功。
也许早有人发现了这个小特性,但我在网上却是没找到相关的文章。希望有大佬出来解答一下,这是什么特殊的机制吗?原理又是如何?
利用:可以绕过黑名单(test.<p<h<p我试过是可行的),但是得先提前上传上去一个.php文件。。所以很鸡肋吧
upload-labs-10
(.php)上传失败。理所应当,因为黑名单
(.php<)上传出错。显然是这个函数底层的错误,因为不允许文件名带这些特殊符号
在黑名单删除.php后。理所应当上传成功
(test.php)成功后,再上传(test.php<)。竟然也成功了,并且后缀名直接删减了<这个符号,匪夷所思。。