PHPCMSv9.6.3 文件包含漏洞分析

PHPCMSV9.6.3 文件包含漏洞分析
代码审计
文件包含常出现在 include()、require()、include_once()、require_once() 等,审计时可以直接通过正则的方式追踪危险段
phpcms v9.6.3 的任意文件包含出现在 phpcms/modules/block/block_admin.php 267行
1 | include $filepath; |
分析 $filepath 变量,发现代码中不仅做了 include 包含文件,还在这之前先创建文件并写入内容,且内容可控
1 | public function public_view() { |
$id 在类方法开头会强制转为 int 类型,文件路径是不可控,但对漏洞不影响;$template 完全可控的,在 if 判断中进行文件写入,写入成功则包含文件。看看对 $template 过滤
global.func.php::new_stripslaches() 对转义后的字符去除转义,这根本不是过滤
1 | //phpcms/libs/functions/global.func.php |
以及 template_parse(),简单的正则替换,为指定格式的代码换成 的形式
1 | //phpcms/libs/classes/template_cache.class.php |
这里将 {php.*} 格式替换为 <?php.*?>
格式,也就是说即使题目过滤了 <?
这里也能直接绕过
1 | str = preg_replace ( "/\{php\s+(.+)\}/", "<?php \\1?>", $str ); |
最后将 ““ 拼接进 $str 之前并返回,但这不影响漏洞
1 | $str = "<?php defined('IN_PHPCMS') or exit('No permission resources.'); ?>" . $str; |
所以这里任意文件包含完全可行!再看逻辑与权限校验部分
block_admin 构造方法中直接静态调用父类的构造方法,跟进父类看看
1 | class block_admin extends admin { |
在其父类 admin 构造方法中,做了许多 admin 用户登录校验工作,因此必须先登录到 admin 后台,并获得 pc_hash
1 | //phpcms/modules/admin/classes/admin.class.php |
在 public_view 开头做了一次检测,判断 $id 是否存在,如果不存在则返回 nofound,且查出的数据库数据中 type 需为 2 才能进入 elseif 内部触发漏洞
1 | public function public_view() { |
但这个表怎么是空的?也许默认就是为空

在 block_admin 类往上翻一翻,发现了一个 add 类方法,就说默认为空很奇怪,肯定有功能提供添加
1 | public function add() { |
insert 追进去就不写了,依照 phpcms 框架数据库操作写法,依次是 block_admin.php -> model.class.php -> db_mysqli.class.php,最后肯定是插入数据
只需要提供 pos、dosubmit、name、type 即可直接添加,其中 type 必须为 2,因为我们要走进 elseif 内部,其他随意不为 false 就行
到这里分析就结束了,这个漏洞简单且危害大,只需要添加一条数据即可利用漏洞,没有任何过滤,同类方法下刚好提供 file_put_contents 和 include 直接文件写入+文件包含一步到位
漏洞验证
先往 v9_block 表内添加一条数据
1 | /index.php?id=1&m=block&c=block_admin&a=add&XDEBUG_SESSION_START=13013&pc_hash=uWIbNs&pos=1 |

然后向 block_admin.php::public_view 传参,这个类方法提供的应该是一个预览功能
1 | /index.php?id=1&m=block&c=block_admin&a=public_view&XDEBUG_SESSION_START=13013&pc_hash=uWIbNs |

根目录下就出现了写入的文件了

- Title: PHPCMSv9.6.3 文件包含漏洞分析
- Author: L1nq
- Created at : 2025-08-02 18:04:07
- Updated at : 2025-08-08 22:18:17
- Link: https://redefine.ohevan.com/2025/08/02/PHPCMS-V9-6-3-文件包含漏洞分析/
- License: This work is licensed under CC BY-NC-SA 4.0.