您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcms<= v9.15 任意文件读取漏洞分析和利用示例
傲芙2025-05-25 22:41:38phpcms教程已有2人查阅
导读phpcms v9的phpcms\modules\search\index.php存在任意文件读取漏洞问题很明显,$_GET['q']的参数没有进行校验,直接调用了file_get_contents函数文件并显示内容
phpcms v9的phpcms\modules\search\index.php存在任意文件读取漏洞
漏洞代码如下: 问题很明显,$_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,看到漏洞已经修补。 修改方式:将提交的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或者域名,比如这样: 就可以继续往下了
4. 远程连接mysql数据库: 建立了新用户:xnhandt:xnhandt
(关于密码:phpcms使用的加密方式是md5( md5($pass) . $encrypt),如果想更换密码,可以在 这里 加密后替换掉insert语句的内容)
5.访问网站后台:
index.php?m=admin
6.插入一句话木马:
(试过用mysql 写入一句话,但mysql用户权限不够,不能创建文件,所以还是迂回到网页的方式)
依次找到如下位置:【界面】-【default 详情列表】 - 【vote】(这个是默认的模块) - 【list_new.html 修改】
在页面顶部加入一句话: 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 现在登录后台会有提示
之后,希望看到本文的读者,以学习的态度来对待漏洞。
漏洞代码如下: 问题很明显,$_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,看到漏洞已经修补。 修改方式:将提交的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或者域名,比如这样: 就可以继续往下了
4. 远程连接mysql数据库: 建立了新用户:xnhandt:xnhandt
(关于密码:phpcms使用的加密方式是md5( md5($pass) . $encrypt),如果想更换密码,可以在 这里 加密后替换掉insert语句的内容)
5.访问网站后台:
index.php?m=admin
6.插入一句话木马:
(试过用mysql 写入一句话,但mysql用户权限不够,不能创建文件,所以还是迂回到网页的方式)
依次找到如下位置:【界面】-【default 详情列表】 - 【vote】(这个是默认的模块) - 【list_new.html 修改】
在页面顶部加入一句话: 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 现在登录后台会有提示
之后,希望看到本文的读者,以学习的态度来对待漏洞。
本文标签:
很赞哦! (0)
下一篇:phpcms模板引擎源码分析
暂无内容 |
暂无内容 |
相关文章
暂无内容 |
暂无内容 |
随机图文
phpcms首页制作方法代码示例
首先是要把首页分为三个部分: 导航部分 、尾部和首页中间部分用了三个不同的文件 header.html ; index.html; footer.html在使用phpcms之前 首先要把网页的css/js/imgPHPCMS不支持fsockopen函数怎么办?
1、安装的时候,在地址栏直接改“step=3”,跳过这一步即可;2、将fsockopen函数替换为pfsockopen函数;3、修改“client.class.php”中的代码。PHPCMS下载之后安装方法
首先进入虚拟机后台,并进入文件管理;这里使用记住主机信息,然后是FTP工具上传,也可以在文件管理中上传然后将下载的PHPCMS文件上传到虚拟机中PHPCMSv9二次开发验证码结合Session开发代码实例
本文主要讲解了在V9中使用v9自带验证码并且需要使用session的情况下,多种问题的解决。:)。如有问题或者更好的解决办法,希望不吝赐教。1、前端调用验证码
留言与评论 (共有 0 条评论) |