很简单,在download函数中我们可以看到,`$remotefileurls``数组,中,$k是未经过滤去除#.jps的恶意url,而$file是经过过滤处理的恶意url。并且保存的后缀,将会使用$file参数,也就是.php。由此我们可以写出一个临时的防护方案,将保存的文件后缀,使用未经过滤的url参数。这样,将不会受到过滤函数的影响,
修改 phpcms/libs/classes/attachement.class.php 文件中的download函数
在
foreach($remotefileurls as $k=>$file)
循环中,大约是167行左右的位置,将
if(strpos($file, '://') === false || strpos($file, $upload_url) !== false) continue;
$filename = fileext($file);
修改成
$filename = fileext($k);
我们再使用poc测试一下
如图
图中的两个jpg文件,就是我测试的结果。这样就可以防御住任意文件上传攻击了。
正在写具体分析,所以呢大家等一下吧