目錄
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