1. 首頁 > 運營 > 抖音推廣 >

Dedecms_V5.7 getshell 利用后臺文件上傳功能漏洞

 
 
 
因為是最新的dedecms版本,因此我們直接在織夢官網上下載即可~
 
 
 
http://www.dedecms.com/products/dedecms/downloads/
 
 
 
DedeCMS V5.7 SP2正式版
 
 
 
發布日期: 2017-04-05
 
 
 
這里我測試的是utf-8版本,,感覺版本這個無所謂~
 
 
 
下載下來然后安裝什么的就不說了,,直接進后臺,找到漏洞功能以及對應的功能函數
 
 
 
Dedecms_V5.7 根據文件上傳功能來getshell
 
漏洞在”模塊”下的”廣告管理”處,這里我們點擊“添加一個新廣告”
 
Dedecms_V5.7 根據文件上傳功能來getshell
 
 
 
 
 
跟原文復現的有一點不一樣,,不過不影響,,下面我們來抓包看看參數
 
 
 
Dedecms_V5.7 根據文件上傳功能來getshell
 
 
 
 
 
我們的參數在normbody里,文件為dede/ad_add.php
 
 
 
 $query = "
 
     INSERT INTO xiuzhanwang_myad(clsid,typeid,tagname,adname,timeset,starttime,endtime,normbody,expbody)
 
     VALUES('$clsid','$typeid','$tagname','$adname','$timeset','$starttime','$endtime','$normbody','$expbody');
 
    ";
 
    $dsql->ExecuteNoneQuery($query);
 
    ShowMsg("成功增加一個廣告!","ad_main.php");
 
    exit();
 
在這里我們看到了我們的代碼已經插入到了數據庫,,一般的思路應該是找哪些php文件調用了這個廣告代碼,但是點擊我們的廣告代碼就出現了地址。
 
Dedecms_V5.7 根據文件上傳功能來getshell
 
$cacheFile = DEDEDATA.'/cache/myad-'.$aid.'.htm';
 
if( isset($nocache) || !file_exists($cacheFile) || time() - filemtime($cacheFile) > $cfg_puccache_time )
 
{
 
    $row = $dsql->GetOne("SELECT * FROM `xiuzhanwang_myad` WHERE aid='$aid' ");
 
    $adbody = '';
 
    if($row['timeset']==0)
 
    {
 
        $adbody = $row['normbody'];
 
    }
 
    else
 
    {
 
        $ntime = time();
 
        if($ntime > $row['endtime'] || $ntime < $row['starttime']) {
 
            $adbody = $row['expbody'];
 
        } else {
 
            $adbody = $row['normbody'];
 
        }
 
    }
 
    $adbody = str_replace('"', '\"',$adbody);
 
    $adbody = str_replace("\r", "\\r",$adbody);
 
    $adbody = str_replace("\n", "\\n",$adbody);
 
    $adbody = "<!--\r\ndocument.write(\"{$adbody}\");\r\n-->\r\n";
 
    $fp = fopen($cacheFile, 'w');
 
    fwrite($fp, $adbody);
 
    fclose($fp);
 
}
 
include $cacheFile;
 
 
 
這里首先是三個判斷條件,nocache不為空,cachefile不為空,這些判斷條件我們都可以通過GET或者POST來提交,從而進行偽造~
 
 
 
進入判斷條件后往下走,首先是從數據庫中select aid,那么這時候我們到數據庫中去看看:
 
 
 
 
 
 
 
這里當時在填寫廣告信息的時候,設置的timeset為0,因此也就直接令$adbody = $row[‘normbody’];
 
而這里的normbody也就是我們的evil code,下面我們就應該重點看這個adbody參數
 
首先進行三個replace,這里的replace好像對我們的參數沒有影響,因此直接跳過~
 
接著將adbody參數插入到document.write()代碼中,這里如果做過ctf的人都應該有一種感覺,那就是參數閉合的話,將會造成任意代碼執行,這里也就是漏洞的成因所在!
 
最后打開cachefile,將adbody寫入到文件中~
 
這里由于這個文件是html靜態文件,,因此沒有可利用點,,還是找下文件吧,,
 
WWW\uploads\data\cache\myad-3.html
 
 
 
如果是動態文件,,因此我們也可以利用前后閉合來實現任意代碼,,扯遠了。。
 
總結來說其實就是$adbody = “<!–\r\ndocument.write(\”{$adbody}\”);\r\n–>\r\n”; 這段代碼出的問題
 
下面我們來構造參數進行poc驗證~
 
首先是訪問給的廣告鏈接
 
Dedecms_V5.7 getshell 利用后臺文件上傳功能漏洞
 
 
 
這里我還沒輸入參數,,下面輸入參數逐步進行循環~
 
其實也就是兩個判斷條件和一個代碼的執行~
 
Dedecms_V5.7 getshell 利用后臺文件上傳功能漏洞
 
這里url不用說,,就是給的廣告鏈接,,其中GET了aid參數,,因此我們只要加上nocache參數,來實現isset($nocache),至于!file_exists($cacheFile)這個剛才文件都找到了,,肯定存在的。。
 
最后就是就是代碼執行,,這里一開始有強迫癥,我一定要閉合參數!(下面就是閉合問題的一個嘗試)
 
這里一開始很不解,,這出現的是啥?
 
<!-- document.write("-->"); -->
 
這是源碼,,我們插入了–>這段,,但是雙引號沒閉合啊!也就是頁面語句實際成了下面這樣
 
<!-- document.write("--> "); -->
 
因此也就出現了上面的情況,,這里不太理解,,這樣不閉合竟然可以。。
 
 
 
但是我有強迫癥。。
 
 
 
Dedecms_V5.7 getshell 利用后臺文件上傳功能漏洞
 
 
 
最后強行閉合。。雖然對結果沒影響。。
 
 
 
上述如有不當之處,敬請指出~
 
 
 
本文地址:https://www.xiuzhanwang.com/dedecms_aq/1617.html

本文由自媒體運營網發布,轉載聯系作者并注明出處:http://localhost/a/douyin/59.html

聯系我們

在線咨詢:點擊這里給我發消息

聯系郵箱:12345678@qq.com

工作日:9:30-18:30,節假日休息

女友被粗大的猛烈进出