漏洞一:鸡肋的getshell(需注册并能发布文章,需配合apache、iis6解析漏洞)

文件 /inc/artic_function.php

//采集外部图片

function get_outpic($str,$fid=0,$getpic=1){

 global $webdb,$lfjuid;

 if(!$getpic){

  return $str;

 }

 preg_match_all("/http:\/\/([^ '\"<>]+)\.(gif|jpg|png)/is",$str,$array);

 $filedb=$array[0];

 foreach( $filedb AS $key=>$value){

  if( strstr($value,$webdb[www_url]) ){

   continue;

  }

  $listdb["$value"]=$value;

 }

 unset($filedb);

 foreach( $listdb AS $key=>$value){

  $filedb[]=$value;

  $name=$lfjuid.'_'.rands(5)."__".basename($value);//拼接文件名,当文件名为1.php.jpg 、1.asp;.gif 可作为解析漏洞利用

  if(!is_dir(ROOT_PATH."$webdb[updir]/article/$fid")){

   makepath(ROOT_PATH."$webdb[updir]/article/$fid");

  }

  $ck=0;

  if( @copy($value,ROOT_PATH."$webdb[updir]/article/$fid/$name") ){

   $ck=1;

  }elseif($filestr=file_get_contents($value)){

   $ck=1;

   write_file(ROOT_PATH."$webdb[updir]/article/$fid/$name",$filestr);

  }



利用方法:发表文章,勾选"是否将文章中的外部图片采集回来" 文章内容直接写图片马地址.

漏洞二:任意文件读取(鸡肋,需注册并能在图片频道发布文章)

文件 /inc/check.postarticle.php 

......省略......

 //图片频道转移图片目录

 if($mid==100){  //mid=100,对应的是图片频道

  foreach($post_db[photourl][url] AS $key=>$value){  //图片url可控,为发布图片处post方式传入

   $value=trim($value);

   if(!$value||eregi("://",$value)){

    continue;

   }

   if(!$postdb[picurl]){

    copy(ROOT_PATH."$webdb[updir]/$value",ROOT_PATH."$webdb[updir]/{$value}.jpg");//图片文件copy,如果copy一个php呢? 文件名就会变成config.php.jpg,从而可以读到配置信息.

    $postdb[picurl]="{$value}.jpg";

   }

   move_attachment($lfjuid,tempdir($value),"photo/$fid");

   if(is_file(ROOT_PATH."$webdb[updir]/photo/$fid/".basename($value))){

    $post_db[photourl][url][$key]="photo/$fid/".basename($value);

   }   

  }

 ......省略......

利用方法:

注册用户,在图片频道下的栏目发布文章,图片路径处填写要读取的文件。

从/data/config.php中我们可以读到管理后台地址,加密密玥等信息.有了密钥我们可以构造cookie登录后台,也可以sql注射(无视GPC)

文件 /inc/common.inc.php

......省略.....

  //同步后台登录

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'");

}

//$_password没有参与登录验证过程,只要uid与username对应就ok.



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';

 }

 ......省略......

所以只要知道加密使用的密钥,就能登录后台。

版权声明:若无特殊注明,本文皆为( August )原创,转载请保留文章出处。