• 代码审计:covercms 1.6


    小菜只能找找没人用的cms练练手了

    cnvd上有个 CoverCMS V1.16存在多个漏洞

    漏洞描述 :CoverCMS V1.16存在重装、信息泄露、暴力破解、存储型跨站脚本和反射型跨站脚本漏洞。攻击者可利用漏洞获取敏感信息,如数据库账号密码、数据库名泄露、后台默认弱口令;在用户投稿文章页面中插入恶意js代码,可获得用户cookie等信息,导致用户被劫持;在前台搜索框处构造XSS语句,可进行弹框操作,获得用户cookie等信息。

    简单安装完后看看代码吧。

    重装漏洞

    安装完后会在/dynamic/下生产install.lock

    install.php

    $lockfile = './dynamic/install.lock';
    $step = $_POST['step'] ? $_POST['step'] : ($_GET['step'] ? $_GET['step'] : 1);
    .../省略
    if(!isset($dbhost) || !isset($ckpre)){
    	$ierror = lang('base.inc.php noexist , please upload .');
    }elseif(!ini_get('short_open_tag')){
    	$ierror = lang('shorttaginvalid');
    }elseif(file_exists($lockfile)){
    	$ierror = lang('lockexist');
    }elseif(!class_exists('cls_mysql')){
    	$ierror = lang('include/mysql.cls.php noexist , please upload .');
    }
    

    安装时会进行判断是否存在install.lock

    如果存在会进行提示,但是没有exit()

    我们再次访问http://localhost/covercms/install.php

    发现开始安装的按钮无法点击。

    if($step == 1){
    	ins_header(1);
    	echo "<div class="licence">".lang('ins_introduce')."</div>";
    	ins_mider();
    	hidden_str('step',2);
    	button_str('submit',lang('start install'),$ierror ? 1 : 0);	
    	ins_footer(1);
    	$ierror && ins_message($ierror);
    }elseif($step == '2'){
    	ins_header(1);
    	echo "<div class="licence">".lang('ins_license')."</div>";
    	ins_mider();
    	hidden_str('step',3);
    	button_str('submit',lang('agree'),$ierror ? 1 : 0);	
    	ins_footer(1);
    	$ierror && ins_message($ierror);
    .../省略
    

    button_str函数会根据$ierror在html标签添加 disabled=""

    F12删掉 或直接http://localhost/covercms/install.php?step=2

    就可以跳步骤了

    虽然能看到 数据库账号密码、数据库名泄露、后台默认弱口令

    但还是重装不了啊...

    前台搜索xss

    search.php

    if($searchword){
    	$filterstr .= ($filterstr ? '&' : '').'searchword='.rawurlencode(stripslashes($searchword));
    }
    

    对搜索词根本没过滤

    闭合前后标签即可

    "> <script>alert(/xss/)</script> <"
    

    在用户投稿文章页面中插入恶意js代码

    没找到 先留着

    任意文件包含漏洞 (多处)

    搜索带include和$的 可能存在漏洞

    带后缀的就不看了

    answers.inc.php

    if(!submitcheck('barcsedit')){ //满足barcsedit为空 不设置即可
    			if(empty($u_tplname)){ 
                    //$u_tplname 可以变量覆盖(general.inc.php中伪全局 在admina中引用)
    				echo form_str($actionid.'arcsedit',"?entry=answers&action=answersedit&page=$page$param_suffix");
    				//搜索区块
    				tabheader_e();
    ....//省略
    			}else include(M_ROOT.$u_tplname);
    ....//省略
    

    .inc.php的文件会在admina.php中引用

    include_once M_ROOT.'./admina/'.$entry.'.inc.php';
    

    构造url http://localhost/covercms/admina.php?entry=answers&action=answersedit&u_tplname=robots.txt

    其他include $u_tplname的与之类似

  • 相关阅读:
    json解析:[1]gson解析json
    android 调用系统相机拍照 获取原图
    EventBus使用详解(二)——EventBus使用进阶
    java中的正则表达式
    java的UI设计--------------------------------待补充
    java的网络编程
    IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)
    IO知识点整理(文件File类的使用)
    040 DataFrame中的write与read编程
    039 DataFrame的理解
  • 原文地址:https://www.cnblogs.com/hehecat/p/9323986.html
Copyright © 2020-2023  润新知