zoukankan      html  css  js  c++  java
  • Metlnfo CMS全版本漏洞收集

    根据https://www.seebug.org/appdir/MetInfo 进行书写。


     [版本:Metlnfo 4.0]

    漏洞标题:Metlnfo cms任意用户密码修改

    漏洞文件:member/save.php

    85-111行代码:

    if($action=="editor"){
    
    $query = "update $met_admin_table SET
                          admin_id           = '$useid',
                          admin_name         = '$realname',
                          admin_sex          = '$sex',
                          admin_tel          = '$tel',
                          admin_modify_ip    = '$m_user_ip',
                          admin_mobile       = '$mobile',
                          admin_email        = '$email',
                          admin_qq           = '$qq',
                          admin_msn          = '$msn',
                          admin_taobao       = '$taobao',
                          admin_introduction = '$admin_introduction',
                          admin_modify_date  = '$m_now_date',
                          companyname         = '$companyname',
                          companyaddress     = '$companyaddress',
                          companyfax         = '$companyfax',
                          companycode         = '$companycode',
                          companywebsite     = '$companywebsite'";
    
    if($pass1){
    $pass1=md5($pass1);
    $query .=", admin_pass         = '$pass1'";
    }
    $query .="  where admin_id='$useid'";
    $db->query($query);

    很明显的可以看出并没有进行任何的过滤然后就直接将用户的修改资料然后将其修改,这时候我们可以修改普通用户的资料然后抓包改为管理员的。

    至于SSV-88229也是一样的。直接将cookie删除是通杀的。

      [版本:Metlnfo 5.3.19]


    漏洞标题:Metlnfo cms admin/admin/getpassword.php任意用户密码修改

    漏洞页面:getpassword.php

     

    然后使用执行:tcpdump -X port 80(先拦截80然后在发包。找的时候要仔细比较难找)

    在服务器就可以看到

      [版本:Metlnfo 6.0任意文件读取]


     1 <?php
     2 # MetInfo Enterprise Content Management System
     3 # Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.
     4 
     5 defined('IN_MET') or exit('No permission');
     6 
     7 load::sys_class('web');
     8 
     9 class old_thumb extends web{
    10 
    11       public function doshow(){
    12         global $_M;
    13 
    14         $dir = str_replace('../', '', $_GET['dir']);
    15 
    16         if(strstr(str_replace($_M['url']['site'], '', $dir), 'http')){
    17             header("Content-type: image/jpeg");
    18             ob_start();
    19             readfile($dir);
    20             ob_flush();
    21             flush();
    22             die;
    23         }

    从代码中可以看到,$dir直接由$_GET['dir']传递进来,并将../置空。目标是进入到第一个 if 里面的readfile($dir);,读取文件。看看 if 语句的条件,里面的是将$dir中包含$_M['url']['site']的部分置空,这里可以不用管。外面是一个strstr函数,判断$dirhttp字符串的首次出现位置,也就是说,要进入到这个 if 语句里面,$dir中包含http字符串即可。

    从上面的分析可以构造出 payload,只要$dir里包含http字符串就可以进入到readfile函数从而读取任意函数,然后可以使用..././来进行目录跳转,因为../会被置空,所以最终payload 如下

    ?dir=..././http/..././config/config_db.php

  • 相关阅读:
    “5W1H”带你来学习JavaScript
    [windows+cocos2dx]文本类
    server后台TCP连接存活问题
    (七):处理MFC
    Servlet中的request对象、重定向和转发的差别(6)
    ORACLE 存储函数
    【@伏草惟存@】7年系列博文精选
    笔记14:Docker 部署Python项目
    笔记13:Python 和 Elasticsearch 构建简易搜索
    笔试12:Bootstrap知识
  • 原文地址:https://www.cnblogs.com/nul1/p/9528307.html
Copyright © 2011-2022 走看看