Maccms V8 最新版SQL注入(无视GPC)

2014-09-15T00:00:00
ID SSV:94853
Type seebug
Reporter Root
Modified 2014-09-15T00:00:00

Description

简要描述:

官网刚下的程序,确认不重复。利用起来特别有意思。

详细说明:

苹果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; 来判断是否成功。 初始下

<img src="https://images.seebug.org/upload/201409/1116564628161ff7443642a0ec2feb2ee5627cc0.png" alt="7777.png" width="600" onerror="javascript:errimg(this);">

插入语句

<img src="https://images.seebug.org/upload/201409/111657424d3de40c04eb35fef1dd5a46d8aca77d.png" alt="8888.png" width="600" onerror="javascript:errimg(this);">

这里必须多条更新,插入到最后一条中,这样or成立,标签1就会被重置。就判断成功了。