编辑(问题已关闭,因为不是关于编程问题,所以我会改写):
可用于将任意文件上传到 Laravel
/storage
文件夹的可能漏洞是什么?
应该检查哪些日志以尝试找出这样的文件是如何到达系统的?
一些背景:
我正在更新部署在临时服务器上的 laravel 项目,并注意到项目
/storage
文件夹中有一个额外的“servers.php”文件(不是 /storage/app
,它有子文件夹供用户上传附件)。
在检查文件后,它看起来非常可疑。从
urldecode()
-ing字符串开始获取函数名称“base64_decode”并将其用于base64_decode()
一个已经被base64编码两次的字符串,这会产生一些二进制内容,我不准备运行以查看它的作用.
我不确定这个文件是如何结束的,所以我想知道是否有任何已知的漏洞可能导致这种行为?
编辑(回答问题): 存储子路径是硬编码的,因此它们不能从请求中被篡改。 在除一个控制器之外的所有控制器中,文件名由我的系统基于简单的数字 ID 和基于单一允许的 MIME 类型的硬编码文件扩展名生成。我怀疑这些路径可能会被篡改。另一个控制器使用 Laravel 的本地存储过程,它通过调用
$storage_path = $attachment->store('storage_folder_sub_path');
重命名文件。这些文件名是某种哈希,所以我发现很难看出它们是如何被篡改的。
这肯定是一些混淆的恶意软件。这个文件似乎不是 Laravel 的原生文件。你如何处理文件?如果例如 shell(或一些移动命令)未正确转义,则可能是路径篡改。
在查看gist 并看到@dbf 和@mp035 之间的通信后更新。里面的东西是@dbf发现的:
servers.php文件中的恶意混淆代码反混淆为代码,试图从指定的URL下载文件并通过PHP中的shell_exec函数执行。这个文件做了一些讨厌的事情: