ECShop全系列版本远程代码执行高危漏洞分析+实战提权

漏洞概述

  ECShop的user.php文件中的display函数的模版变量可控,导致注入,配合注入可达到远程代码执行。攻击者无需登录站点等操作,可以直接远程写入webshell,危害严重。

漏洞评级

  严重

影响范围

  ECShop全系列版本,包括2.x,3.0.x,3.6.x等。

漏洞分析

0x01. SQL注入

  先看 ecshop/user.php:302

mark

  $back_act 变量来源于 HTTP_REFERER ,可控。

  Ecshop 使用了 php 模版引擎 smarty ,该引擎有两个基本的函数assign()、display()。assign()函数用于在模版执行时为模版变量赋值,display()函数用于显示模版。smarty运行时,会读取模版文件,将模版文件中的占位符替换成assign()函数传递过来的参数值,并输出一个编译处理后的php文件,交由服务器运行。

  在:ecshop/includes/init.php:169文件中创建了Smarty对象cls_template来处理模版文件,对应的文件是includes/cla_template.php,如下图:

mark

  我们再看 assign函数:ecshop/includes/cls_template.php:70

mark

  assign函数用于在模版变量里赋值。

  display 函数:ecshop/includes/cls_template.php:100

mark

  从函数来看,首先会调用 $this->fetch 来处理user_passport.dwt 模板文件,fetch() 函数中会调用 $this->make_compiled 来编译模板。 make_compiled 会将模板中的变量解析,也就是在这个时候将上面 assign 中注册到的变量 $back_act 传递进去了,解析完变量之后返回到 display 函数中。此时 $out 是解析变量后的html内容,判断 $this->_echash 是否在 $out 中,若在,使用 $this->_echash 来分割内容,得到 $k 然后交给 insert_mod 处理。

   user_passport.dwt 模版文件内容:

mark

  来看看 _echash 是啥,此文件28行:

mark

  由于 _echash 是固定的,不是随机生成的。(2.7版本的 _echash 值为 554fcae493e564ee0dc75bdf2ebf94ca而3.x版本的 _echash 值为 45ea207d7a2b68c49582d2d22adf953 )所以 $val 内容可控!

  跟进 insert_mod()函数,此文件1150行:

mark

  $val 传递进来,先用 | 分割,得到 $para 和 $fun ,$para 进行反序列操作,insert_ 和 $fun 拼接,最后动态调用 $fun($para) 。函数名部分可控,参数完全可控。接下来就是寻找以 insert_ 开头的可利用的函数了,在 ecshop/includes/lib_insert.php 有一个 insert_ads 函数,正好满足要求。

  最后来看动态内容函数库中的 inser

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值