DedeCMS Xss+Csrf Getshell \dede\file_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的利用涉及到某個模塊是否有安裝這種問題
一個可行的(但也不是最好的)的防御方法是"切斷業務","\dede\file_manage_control.php"是網站的一個業務功能,提供文件上傳,我們可以對"\dede\file_manage_control.php"中的文件上傳進行"insert function hook",對"POST File Upload Based On XSS+CSRF"的文件進行惡意檢測


5. 防御方法

0x1: \dede\file_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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM