DouPHP file.class.php 无限制上传CVE-2025-13198
DouPHP是漳州豆壳网络科技有限公司开发的一款轻量级企业网站管理系统,可运行在Linux、Windows、MacOSX、Solaris等各种平台上。
一、基本情况
DouPHP 基于PHP+Mysql架构的,系统搭载Smarty模板引擎,支持自定义伪静态,前台模板采用DIV+CSS设计,后台界面设计简洁明了。

DouPHP功能简单易具有良好用户体验,稳定性好、扩展性及安全性强,可通过后台在线安装模块,比如会员模块、订单模块等诸多功能。
栋科技漏洞库关注到在 DouPHP 1.8 Release 20251022 及之前的版本中的文件上传漏洞,被追踪为CVE-2025-13198,CVSS 4.0评分5.1。
二、漏洞分析
CVE-2025-13198漏洞是在 DouPHP 1.8 Release 20251022 及之前的版本中发现了一个文件上传漏洞,漏洞已公开,存在被利用的风险。
该漏洞存在于文件 upload/include/file.class.php中,漏洞源于对 File 参数的处理不当,导致上传功能不受限制。
该漏洞使得攻击者可通过精心构造的请求上传恶意文件,通过操纵参数File会导致无限制上传,允许远程攻击者实施文件上传攻击。
该漏洞发生在upload/include/file.class.php的bigfile方法中:

当在表单中传递sql_link_url参数时,将使用dirname获取目录并将其分配给$sql_file。
然后,判断$sql_file的值是否等于常量ROOT_URL.$file_dir。
如果相等,则获取sql_link_url中的文件名并将其分配给$full_file_name。
$file_dir的值在创建类时传递,暂时不相关。

随后,$full_file_name与$full_file_dir连接,并分配给$file_address,然后将其传递给move_uploaded_file函数进行分块上传。


常量ROOT_URL的值在upgrade/include/init.php中定义
define('ROOT_URL', preg_replace('/' . U_PATH . '\//Ums', '', dirname($http . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) . "/"));

即网站域名目录。例如,如果网站域名为http://test.com,ROOT_URL的值为http://test.com/.
在函数开始时,必须传入几个参数。

blob_num和total_blob_num必须传入;否则,脚本将退出。
在upload/admin/file.php中找到了对bigfile函数的调用。

显然,file.class.php被实例化并分配给$file。让我们看看它的具体代码。

这里还有一个可控的模块参数。

让我们看看file.class.php的构造函数。

因此,我们上传文件的目录可以通过$module进行控制。
如前所述,要调用bigfile函数,rec的值必须是bigfile,并且rec的数值在这里是可控的。

这里需要传递几个其他值;否则,脚本将退出。

此外,在uploader.class.php中,您还需要传递filename参数以绕过以下验证。

文件名可以是任意的,后缀为zip。此文件并不重要,也不会影响webshell的生成。
请注意,$sql_file的值必须等于ROOT_URL.$file_dir。


三、POC概念验证
由于file.php文件位于admin目录中,因此只有在管理员登录后才能利用此漏洞。
访问file.php。
捕获数据包并传递必要的参数。由于需要分块传输,因此必须构造用于分块传输的数据包
1、POC代码
管理员已设置登录后刷新可查看2、发送数据包后,将在上传目录的images目录中创建一个黑客目录,并在该目录中生成一个shell1.php文件。
响应将包括文件位置。



3、访问文件:

4、漏洞成功利用
四、影响范围
DouPHP <= 1.8
五、修复建议
DouPHP > 1.8
六、参考链接
管理员已设置登录后刷新可查看