敏感的管理参数未得到充分清理,导致攻击者能够污染指向系统二进制文件的路径。
随后,攻击者可以上传危险的 CSV 文件,这些文件可被当作包含 shell 元字符的 PHAR 归档处理,并由 PHP 的 exec() 调用执行,从而实现远程代码执行。
严重 - 9.1 - CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
在文件 functions/classes/class.Scan.php 中,我们可以看到以下代码结构:

exec() 调用的第一个参数直接依赖于 $ping_path 参数,该参数可以在“管理设置”面板中自由修改:

攻击者需要满足的唯一条件是让 ping_verify_path 函数不返回 false。该方法的定义如下:

此方法仅依赖于 PHP 原生函数 file_exists()。该函数可以支持传入 ZIP 文件(不需要 .zip 扩展名)并深入 ZIP 归档的结构中。例如:

因此,如果攻击者能够在服务器上上传一个有效的 ZIP/PHAR 归档,其中包含一个文件名带有 shell 元字符的文件,就能绕过 file_exists() 检查,并让这些元字符被 exec() 调用执行。
经过身份验证的攻击者可以通过“XLS / CSV 子网导入”功能上传文件:

该文件不一定是有效的 CSV 文件。如果导入失败,文件不会从服务器上删除。通过 import-verify.php 脚本,我们也可以知道文件的存储位置:

攻击者已经具备发起远程代码执行攻击的所有前提条件:
恶意归档可以通过如下方式制作:

https://www.youtube.com/watch?v=oMvyfFrlRAs