欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

ZCNCMS审计及漏洞分析

来源:本站整理 作者:佚名 时间:2019-06-10 TAG: 我要投稿

因为实际目标的需要审计了一下这个古老的CMS,接下来的内容将会包括本人发现漏洞代码及漏洞的利用过程、原有漏洞的细节分析、全局防SQL注入ids绕过细节分析等。
 
漏洞利用
先来看一下漏洞的利用效果
后台SQL注入绕过ids
该cms比较古老,与之前的dedecms同样用了全局的08sec ids过滤sql注入,后面会详细分析绕过的方法原理(网上也有的,说一下自己见解)
首先是比较容易理解的payload:

这里payload改为: and extractvalue(1,concat(0x7e,(database()),0x7e))也可,但利用受ids限制。
其次是绕过全局payload:

任意密码登录后台
外网vps安装mysql服务并开启允许远程访问,访问目标url。
eg: http://localhost/zcncms/admin/?c=login&db_host=vps_ip&db_name=root&db_pass=root&db_table=zcncms


客户端任意文件读取
以上的利用方法仅限于默认安装数据库,数据库名及表和列名都不变的情况。因此想到利用前段时间比较火的MySQL LOAD DATA LOCAL INFILE任意客户端文件读取。


其他漏洞如后台CSRF及后台getshell不放图了,下面具体分析一下这些漏洞成因及修复方法。
 
漏洞代码分析
分析的漏洞包括,SQL注入、变量覆盖、CSRF、修改配置文件getshell。
SQL注入漏洞
首先看漏洞产生的代码部分
//module/menus/admincontroller/menus.php
//第33行至63行
……
if($parentid == 0) {
    $rootid = 0;
    } else{
    $parent = $menus->GetInfo('',' id = '.$parentid);
    if($parent['parentid'] == 0) {
        $rootid = $parentid;
        } else{
            $rootid = $parent['rootid'];
    }
}
……
由于$parentid变量没有intval强制转换类型并且可控,因此漏洞发生。接下来分析绕过全局防注入ids。
//db.class.php
    function SafeSql($db_string,$querytype='select'){
        //var_dump($db_string);
        //完整的SQL检查
        //$pos = '';
        //$old_pos = '';
        $pos = 0;
        $old_pos = 0;
        $clean = '';
        if(empty($db_string)){
            return false;
        }
        while (true){           
            $pos = strpos($db_string, ''', $pos + 1);
            if ($pos === false)
            {
                break;
            }
            $clean .= substr($db_string, $old_pos, $pos - $old_pos);
            while (true)
            {
                $pos1 = strpos($db_string, ''', $pos + 1);

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载