当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(9) 关注此漏洞

缺陷编号: WooYun-2014-65835

漏洞标题: Qibocms图片系统任意文件查看导致的多处注入(可提升自己为管理员)

相关厂商: 齐博CMS

漏洞作者: ′雨。认证白帽子

提交时间: 2014-06-23 11:14

公开时间: 2014-09-21 11:16

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 无

0人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-23: 细节已通知厂商并且等待厂商处理中
2014-06-24: 厂商已经确认,细节仅向厂商公开
2014-06-27: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-08-18: 细节向核心白帽子及相关领域专家公开
2014-08-28: 细节向普通白帽子公开
2014-09-07: 细节向实习白帽子公开
2014-09-21: 细节向公众公开

简要描述:

最大化。 还有个跟之前类似的洞 这里就不多说了。

详细说明:

http://**.**.**.**/down2.php?v=photo1.0#down

下载地址

还有类似的 就说这里了。



在photo/member/post.php中

code 区域
require_once(Mpath."inc/check.postarticle.php");

if($job=='postnew')
{

if($step=='post')
{
post_new();

//生成静态
make_article_html("$Murl/member/post.php?job=endHTML&aid=$aid");

$mid && $mid<106 && $none='none';

refreshto("?job=postnew&fid=$fid","<CENTER>[<A HREF='?job=postnew&fid=$fid'>继续发表新主题</A>] <span style='display:$none;'>[<A HREF='?job=post_more&fid=$fid&aid=$aid'>续发本主题</A>]</span> [<A HREF='myarticle.php?job=myarticle&fid=$fid'>返回主题列表</A>] [<A HREF='$Mdomain/bencandy.php?fid=$fid&aid=$aid' target=_blank>查看主题</A>] [<A HREF='?job=edit&aid=$aid'>点击修改</A>]</CENTER>",60);
}





在这里 又是包含这个文件进来。



inc/check.postarticle.php



进去看看。



code 区域
$postdb[smalltitle]	=	filtrate($postdb[smalltitle]);
$postdb[picurl] = filtrate($postdb[picurl]);
//$postdb[description]= filtrate($postdb[description]);
$postdb[author] = filtrate($postdb[author]);
$postdb[copyfrom] = filtrate($postdb[copyfrom]);
$postdb[copyfromurl]= filtrate($postdb[copyfromurl]);

$postdb[description] = preg_replace('/javascript/i','java script',$postdb[description]);
$postdb[description] = preg_replace('/<iframe ([^<>]+)>/i','&lt;iframe \\1>',$postdb[description]);

//针对火狐浏览器做的处理
$postdb[content]=str_replace("=\\\"../$webdb[updir]/","=\\\"$webdb[www_url]/$webdb[updir]/",$postdb[content]);

if(!$groupdb[PostNoDelCode]){
$postdb[content] = preg_replace('/javascript/i','java script',$postdb[content]);
$postdb[content] = preg_replace('/<iframe ([^<>]+)>/i','&lt;iframe \\1>',$postdb[content]);
}

//采集外部图片
$postdb[content] = get_outpic($postdb[content],$fid,$GetOutPic);





在这里又调用了get_outpic这个函数 可以跟之前发的媒体版结合解析漏洞Getshell那样一样的利用。



这里我就不多说这个了、



继续往下面看 看看有神马不同的没。



这里和媒体版的那个还是有不同的



code 区域
if($post_db){
foreach($post_db[photourl][url] AS $key=>$value){
$value=trim($value);
if(!$value||eregi("://",$value)){
continue;
}

if(!$postdb[picurl]){
copy(ROOT_PATH."$webdb[updir]/$value",ROOT_PATH."$webdb[updir]/{$value}.jpg");
$postdb[picurl]="{$value}.jpg";
}
move_attachment($lfjuid,tempdir($value),$downloadDIR);





在这里$post_db 结合 qibocms的伪全局 直接 提交一下就行了。

code 区域
foreach($post_db[photourl][url] AS $key=>$value){
$value=trim($value);
if(!$value||eregi("://",$value)){
continue;
}



在这里循环出来后 不能让他匹配出:// 然后继续看

if(!$postdb[picurl]){ 当这个为false的时候进入分支所以就不提交这个了。

code 区域
copy(ROOT_PATH."$webdb[updir]/$value",ROOT_PATH."$webdb[updir]/{$value}.jpg");
$postdb[picurl]="{$value}.jpg";



然后把循环出来的value copy成jpg。

这里如果我们控制这个$value为配置文件 然后copy成.php.jpg后就可以直接查看配置文件了。



但是这只是一个任意文件读取。 怎么来把他最大利用呢。



继续看在member/yz.php中



elseif($action=='mobphone2')

{

if($lfjdb[mob_yz]){

showerr("请不要重复验证手机号码!");

}

if(!$yznum){

showerr("请输入验证码");

}

elseif(!$md5code){

showerr("资料有误");

}else{

unset($code,$mobphone,$uid);

list($code,$mobphone,$uid)=explode("\t",mymd5($md5code,"DE") );

if($code!=$yznum||$uid!=$lfjuid){

showerr("验证码不对");

}

}



add_user($lfjuid,$webdb[YZ_MobMoney],'手机号码审核奖分');

$db->query("UPDATE {$pre}memberdata SET mobphone='$mobphone',mob_yz='1' WHERE uid='$lfjuid'");



把$mobphone直接带入到了查询当中 而且在set位 如果可以成功引入单引号的话 那可就可以直接提升自己为管理了。

但是qibocms 对全局的GET POST COOKIE都addslashes了。

来看看这函数

code 区域
function mymd5($string,$action="EN",$rand=''){ //字符串加密和解密 
global $webdb;

$secret_string = $webdb[mymd5].$rand.'5*j,.^&;?.%#@!'; //绝密字符串,可以任意设定

if(!is_string($string)){
$string=strval($string);
}
if($string==="") return "";
if($action=="EN") $md5code=substr(md5($string),8,10);
else{
$md5code=substr($string,-10);
$string=substr($string,0,strlen($string)-10);
}
//$key = md5($md5code.$_SERVER["HTTP_USER_AGENT"].$secret_string);
$key = md5($md5code.$secret_string);
$string = ($action=="EN"?$string:base64_decode($string));
$len = strlen($key);
$code = "";
for($i=0; $i<strlen($string); $i++){
$k = $i%$len;
$code .= $string[$i]^$key[$k];
}
$code = ($action == "DE" ? (substr(md5($code),8,10)==$md5code?$code:NULL) : base64_encode($code)."$md5code");
return $code;
}





是一个加密解密的函数  如果可以知道key的话 那就可以自己生成一个语句然后来注入了。



然后利用任意文件读取那洞 可以看到key的。



SO Come on.

漏洞证明:

首先利用任意文件读取。读取data/config.php



qt1.jpg





成功拿到key 然后自己写个脚本 来生成一个语句。

qt4.jpg





qt3.jpg





构造一下语句yu',groupid=3 where uid=2#



groupid 为3的话即为管理员



不知道uid的话 可以直接就构造yu' 报错后就能看到uid



然后调用函数生成一下语句。



qt2.jpg





qt5.jpg





qt6.jpg





成功update。



调用这函数的地方还有很多



——————————————————————————————————————



在inc/common.inc.php中

code 区域
if($_COOKIE["adminID"]&&$detail=mymd5($_COOKIE["adminID"],'DE',$onlineip)){
unset($_uid,$_username,$_password);
list($_uid,$_username,$_password)=explode("\t",$detail);
$lfjdb=$db->get_one("SELECT * FROM {$pre}memberdata WHERE uid='$_uid' AND username='$_username'");
}


if($lfjdb[yz]){
$lfjid=$lfjdb['username'];
$lfjuid=$lfjdb['uid'];
$lfjdb[icon] && $lfjdb[icon]=tempdir($lfjdb[icon]);
if($lfjdb['groupid']==3||$lfjdb['groupid']==4){
$web_admin=$sort_admin='1';
}
if( file_exists(ROOT_PATH."data/group/{$lfjdb[groupid]}.php") ){
$groupdb=@include( ROOT_PATH."data/group/{$lfjdb[groupid]}.php");



貌似验证通过了就直接登录后台 来看看。



$_COOKIE["adminID"]&&$detail=mymd5($_COOKIE["adminID"],'DE',$onlineip



在这里 调用了这函数 这里需要注意一下 后面还跟了第三个参数$onlineip



看看第三个参数在函数中起的作用。



code 区域
function mymd5($string,$action="EN",$rand=''){ //字符串加密和解密 
global $webdb;

$secret_string = $webdb[mymd5].$rand.'5*j,.^&;?.%#@!';





加入到了这个$secret_string里面。

然后$onlineip 这个是根据xff来的 最后判断了一下是否是正确的ip

如果不正确 ip就为**.**.**.** 这里我们构造xff为一个错误的ip就行

$onlineip就为**.**.**.**了。



然后再生成一下语句。



qt7.jpg





应该可以直接登录后台 懒得弄了。

修复方案:

源头还是任意文件查看。,

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2014-06-24 11:09

厂商回复:

感谢提出来!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-06-23 11:58 | CplusHua ( 普通白帽子 | Rank:264 漏洞数:36 | 乌云奖金:-1)
    1

    你关注的白帽子 ′ 雨。 发表了漏洞 qibocms 黄页系统SQL注入一枚 2014-06-23 你关注的白帽子 ′ 雨。 发表了漏洞 Qibocms图片系统任意文件查看导致的多处注入(可提升自己为管理员) 2014-06-23 你关注的白帽子 ′ 雨。 发表了漏洞 Ecmall Sql二次注入第二弹 2014-06-23 你关注的白帽子 ′ 雨。 发表了漏洞 qibocms B2b 某隐蔽SQL注入漏洞 2014-06-23

  2. 2014-06-23 12:50 | ′ 雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    0

    不会吧 就一个上首页。

登录后才能发表评论,请先 登录