php源码分析案例文件上传绕过

0x00前言分析两段php的文件上传源码,尝试进行后缀黑/白名单的上传绕过。0x01uploads-labs21这段源码来自uploads-labs靶场第21关。源码片段:分析:首先将上传的文件名以符号.为分隔符打散为数组,取数组的最后一个元素为后缀名,白名单检测后,实际的文件名为[数组的首个元素.数组的总长度-1位置的元素]。想要绕过白名单上传,很明显需要使end($file)和$file[count($file)-1]指向不同的内容,end($file)是合法的后缀用于骗过白名单,而$file[count($file)-1]是实际上传的后缀。简单的看,这两个都是指代数组的最后一个元素。那什么特殊情况才能使他们不同呢。源码中有这么一句:if(!is_array($file))也就是说,其实我们可以直接把文件名用数组的形式传进去,这样代码就不会自作主张的用符号.来进行分隔了。最后的payload:这样看end($file)就等于jpg,而$file[count($file)-1],实际变成了$file[1],我们上传的数组并没有给$file[1]赋值,也就是空的。于是最后的filename就变成了up.php/.,接下来进入move_uploaded_file函数。move_uploaded_file函数的作用是检查某个文件是否是由php的


转载请注明:http://www.aierlanlan.com/rzdk/226.html