漏洞概要
关注数(24 )
关注此漏洞
漏洞标题:Maccms V8 最新版SQL注入(无视GPC)
提交时间:2014-09-15 16:04
修复时间:2014-12-14 16:06
公开时间:2014-12-14 16:06
漏洞类型:SQL注射漏洞
危害等级:中
自评Rank:10
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情 披露状态:
2014-09-15: 细节已通知厂商并且等待厂商处理中 2014-09-15: 厂商已经确认,细节仅向厂商公开 2014-09-18: 细节向第三方安全合作伙伴开放 2014-11-09: 细节向核心白帽子及相关领域专家公开 2014-11-19: 细节向普通白帽子公开 2014-11-29: 细节向实习白帽子公开 2014-12-14: 细节向公众公开
简要描述: 官网刚下的程序,确认不重复。利用起来特别有意思。
详细说明: 苹果CMS使用be函数来获取参数
function be($mode,$key,$sp=',') { ini_set("magic_quotes_runtime", 0); $magicq= get_magic_quotes_gpc(); switch($mode) { case 'post': $res=isset($_POST[$key]) ? $magicq?$_POST[$key]:@addslashes($_POST[$key]) : ''; break; case 'get': $res=isset($_GET[$key]) ? $magicq?$_GET[$key]:@addslashes($_GET[$key]) : ''; break; case 'arr': $arr =isset($_POST[$key]) ? $_POST[$key] : ''; if($arr==""){ $value="0"; } else{ for($i=0;$i<count($arr);$i++){ $res=implode($sp,$arr); } } break; default: $res=isset($_REQUEST[$key]) ? $magicq ? $_REQUEST[$key] : @addslashes($_REQUEST[$key]) : ''; break; } return $res; }
其中arr方法没有过滤,因此开始找一个arr的点。终于找到一个能利用的。 在admin\tpl\module\art.php文件中存在
elseif($method=='typesaveall') { $t_id = be('arr','t_id'); //使用了arr方法 $ids = explode(',',$t_id); foreach($ids as $id){ $t_name = be('post','t_name' .$id); $t_enname = be('post','t_enname' .$id) ; $t_sort = be('post','t_sort' .$id); $t_tpl = be('post','t_tpl' .$id); $t_tpl_art = be('post','t_tpl_art' .$id); if (isN($t_name)) { $t_name='未知';} if (isN($t_enname)) { $t_enname='weizhi';} if (!isNum($t_sort)) { $t_sort=0;} if (isN($t_tpl)) { $t_tpl = 'artlist.html';} if (isN($t_tpl_art)) { $t_tpl_art = 'art.html';} $db->Update ('{pre}art_type',array('t_name','t_enname', 't_sort','t_tpl','t_tpl_art'),array($t_name,$t_enname,$t_sort,$t_tpl,$t_tpl_art),'t_id='.$id); //最终带入了sql语句中。 } updateCacheFile(); redirect( getReferer() ); }
漏洞证明: 这个点比较有意思的就是虽然带入了语句,但是是update的类型,最后使用盲注。 但是又不能使用逗号,经过多方咨询终于搞定。 http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring substring方法存在 类似: SELECT SUBSTRING('Sakila' FROM -4 FOR 2);这样的方法即可不适用逗号 使用ord避免了单引号出现。 最后利用 or 1 = (select ord(substring(user() from 1 for 1))=114)-- 1; 来判断是否成功。 初始下
插入语句
这里必须多条更新,插入到最后一条中,这样or成立,标签1就会被重置。就判断成功了。
修复方案: 漏洞回应 厂商回应: 危害等级:中
漏洞Rank:8
确认时间:2014-09-15 20:34
厂商回复: 利用起来有一定的前提,需要进入后台。确认此问题,稍后改进。
最新状态: 暂无
漏洞评价:
评论
2014-09-15 16:48 |
寂寞的瘦子 ( 普通白帽子 | Rank:242 漏洞数:53 | 一切语言转汇编理论)
2014-09-15 18:53 |
袋鼠妈妈 ( 普通白帽子 | Rank:449 漏洞数:61 | 故乡的原风景.MP3)
2014-09-16 11:09 |
xiaoL ( 普通白帽子 | Rank:361 漏洞数:67 | PKAV技术宅社区!Blog:http://www.xlixli....)