zoukankan      html  css  js  c++  java
  • DedeCMS Xss+Csrf Getshell dedefile_manage_control.php

    目录

    1. 漏洞描述
    2. 漏洞触发条件
    3. 漏洞影响范围
    4. 漏洞代码分析
    5. 防御方法
    6. 攻防思考

    1. 漏洞描述

    对这个漏洞的利用方式进行简单的概括

    1. 这个漏洞的利用前提是需要登录到后台进行操作,准确来说是从cookies的角度来说是需要处于登录的后台状态
    2. 后台的Logo上传存在xss漏洞,黑客可以在img的src中注入xss的代码
    3. 黑客可以利用xss未过滤漏洞,发起CSRF攻击,劫持目标用户向"/dede/file_manage_control.php"文件发送畸形POST数据包
    4. "/dede/file_manage_control.php"中未对外部输入的数据进行有效的过滤、转义,就将数据输出到磁盘文件中,最终导致了GETSHELL

    对于这个漏洞我们需要明白的是,漏洞的根源在于DEDE的后台存在XSS未过滤漏洞,而"/dede/file_manager_control.php"本身并没有太大的漏洞,因为这个文件本来就是网站系统提供的原生的业务功能,允许管理员以类似FTP管理的形式管理自己的磁盘

    Relevant Link:

    http://www.wooyun.org/bugs/wooyun-2010-025175
    http://www.wooyun.org/bugs/wooyun-2010-065561
    http://www.2cto.com/Article/201409/335025.html


    2. 漏洞触发条件

    1. 黑客已经拿到了管理员的后台帐号、密码
    2. 目标网站的后台(通常是审核的位置)存在XSS未过滤漏洞 
    3. 黑客通过后台XSS未过滤漏洞劫持管理员,强制向特定文件发起AJAX POST请求
    4. 发起基于XSS+CSRF的攻击
        1) SQL Injection Based On XSS+CSRF
        2) File Upload Based On XSS+CSRF

    0x1: POC

    1. 利用XSS强制劫持用户发起POST请求
    注入xss代码
    
    2. POST
    http://localhost/dedecms5.7/dede/file_manage_control.php
    
    3. DATA
    fmdo=edit&backurl=&activepath=&filename=csrf.php&str=<?php eval($_post[op]);?>&b1=


    3. 漏洞影响范围

    1. DedeCMS-V5.7-UTF8-SP1
    2. <= DedeCMS-V5.7-UTF8-SP1


    4. 漏洞代码分析

    从本质上来讲,这个漏洞的根源是基于后台管理员交互的XSS+CSRF攻击,但是XSS的代码防御涉及到很多的逻辑点,很难做到逐一防御,而且XSS的利用涉及到某个模块是否有安装这种问题
    一个可行的(但也不是最好的)的防御方法是"切断业务","dedefile_manage_control.php"是网站的一个业务功能,提供文件上传,我们可以对"dedefile_manage_control.php"中的文件上传进行"insert function hook",对"POST File Upload Based On XSS+CSRF"的文件进行恶意检测


    5. 防御方法

    0x1: dedefile_manage_control.php

    <?php
    /**
     * 文件管理控制
     *
     * @version        $Id: file_manage_control.php 1 8:48 2010年7月13日Z tianya $
     * @package        DedeCMS.Administrator
     * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
     * @license        http://help.dedecms.com/usersguide/license.html
     * @link           http://www.dedecms.com
     */
    require(dirname(__FILE__)."/config.php");
    
    function find_php_payload($body, $file)
    { 
        $express = "/<?(php){0,1}(.*)/i";
        if ( preg_match($express, $body) ) 
        {   
            if( file_exists($file) )
            {
                @unlink($file);
            }
            die("Request Error!");   
        }  
    }
    
    CheckPurview('plus_文件管理器');
    ...
    else if($fmdo=="edit")
    { 
        $filename = str_replace("..", "", $filename);
        $file = "$cfg_basedir$activepath/$filename";
        //对输入变量进行转义
        $str = stripslashes($str);
    
        $str = find_php_payload($str, $file);
    
        $fp = fopen($file, "w");
        fputs($fp, $str);
        fclose($fp);
        if(empty($backurl))
        {
            ShowMsg("成功保存一个文件!","file_manage_main.php?activepath=$activepath");
        }
        else
        {
            ShowMsg("成功保存文件!",$backurl);
        }
        exit();
    }
    ...

    0x2: 防御方案对网站业务的影响

    使用"业务切断"思想做的防御方案能够成功的防御这种XSS+CSRF Getshell攻击,但是也对业务造成了一定的影响

    1. 用户在编辑的文件中带有"<?php"标签

     

    2. 黑客使用XSS+CSRF发送AJAX POST请求进行GETSHELL

    代码成功地防御了黑客的注入攻击

    6. 攻防思考

    Copyright (c) 2014 LittleHann All rights reserved

  • 相关阅读:
    Electron+Vue开发跨平台桌面应用
    vue-cli3.0 脚手架搭建项目的过程详解
    dart-sass与node-sass介绍
    创建vue-cli4项目,报错 ERROR command failed: yarn
    CSS Grid 网格布局教程
    总结5种自适应方式
    前端实战:electron+vue3+ts开发桌面端便签应用
    SDK 和 API 的区别是什么?
    Pinia 快速入门
    返回数组中最大的三个数
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4237578.html
Copyright © 2011-2022 走看看