php前台登录 sql注入_ECShop 4.0 前台SQL注入漏洞分析(需用户注册)

#00 前言

前两天看到有公众号发了ECShop的注入分析漏洞,所以想看下与笔者挖的是否重复,看完还是非常佩服作者的分析水平,基于Nday然后对整个利用链进行回溯分析,从而发现0day,对代码审计人员帮助颇多,不过这个漏洞需要用户注册,严格意义上来讲需要进行用户认证,因此危害性还不至于那么广泛。

#01 漏洞分析

整个漏洞利用链是基于两年前广泛流传的ECShop RCE漏洞链来的,笔者在挖掘ECShop的漏洞时也曾经在互联网上搜索过ECShop的历史漏洞,基本上都是由insert_mod引起的,这次漏洞也不例外,但是引出了一条新的攻击链,整个分析思路还是非常值得研究的。

本篇就以ECShop 4.0.7(20200102)为例进行分析,首先漏洞入口点在user.php第1146行

img_5f77e275e7783.png

这里存在smarty的模板注入,通过$ecs->url()函数来对模板里的url变量进行赋值,跟进url()函数

7c9bef69753fc8443cd1d109a9ca934a.png

继续跟进get_domain函数

e623a263c368cfcfa0338e7013c1693b.png

那么这里的X-Forwarded-Host作为HTTP头部字段的首选,可以替代HOST,变成我们可以控制的变量,至此我们可以控制模板中的url变量,然后进行display

8d148a2bf9cf8477dd5c56216d4bd39e.png

display在上次ECShop比较严重的漏洞中扮演了极其重要的角色,这次漏洞也不例外,通过读取模板注入后的文件内容,如果存在echash字段,则进行切割分析

57def284b4bd4f00b008b4a2ce21e26d.png

$_echash字段事实上每个版本都为固定值,所以当知道对方ECShop版本时,这个变量就等同于一个固定变量,笔者认为从修复漏洞的角度来讲,该值如果为md5(time())这种随机值能增加很大的安全性!

回到上面display函数,通过echash切割模板文件内容,然后对奇数位置的文件内容进行insert_mod函数,由于我们可以控制url变量,事实上我们也可通过增加echash这个值到url变量中,来控制具体进入insert_mod的值的内容,最后跟进到insert_mod函数

d4f3eaa56c96497182869f603ce711cb.png

前文也提到了我们可以控制echash的位置来控制最终进入到insert_mod函数的中的name变量,那么这里对name变量中的"|"进行切割,对para内容进行反序列化,最终由insert_xxx函数调用$para变量,那么这里由于ECShop的代码特殊性,并没有像TP框架那样在代码初始化引入全局变量,因此这里如果想要有效利用,或者进行反序列化利用,就必须得看当前代码环境所包含的文件名,最好的情况就是包含的文件中存在insert_xxx函数,或者存在一些可利用的类能够进行反序列化?

而user.php所include或者require的文件数并不多

991a0b8f4a66ea69bab72f3cc178e4f8.png

这里针对该路由特地包含了一个文件,实际上在user.php开头也引入了两个基础的配置文件,很难利用起来,那么跟进到includes/lib_clips.php文件进行分析,主要看亮点,一是看是否有可以进行反序列化的链,二是查看有无可以利用的insert_xxx函数

针对第一个反序列化的链,该文件都没有魔术方法,因此反序列化也就到此为止。

针对第二个insert_xxx函数,这里由于有原文的指导,笔者是知道一定存在可利用的函数,另外文中没提及,其实还有一个可利用的函数

222addca78770f2df52ac2f54f525363.png

891b2ee5d719e02ed579e1166fb4d535.png

上面两个函数其实都存在SQL注入漏洞,至此漏洞分析完毕。

#02 poc构造

$a = "1' and updatexml(1,user(),1) and '";

$s = serialize($a);

$_echash = '45ea207d7a2b68c49582d2d22adf953a';

echo $_echash.'pay_log|'.$s.'|'.$_echash;

?>

1

2

3

4

5

6

$a="1' and updatexml(1,user(),1) and '";

$s=serialize($a);

$_echash='45ea207d7a2b68c49582d2d22adf953a';

echo$_echash.'pay_log|'.$s.'|'.$_echash;

?>

poc构造其实讲究几个点,一个是控制echash的位置,使得能够控制的内容始终位于奇数位置,二就是需要对插入的内容进行序列化,对应代码中反序列化的操作。

bf3000ca2120afb0eb65628834bc83f3.png

至此可以通过注入漏洞获得管理员的相关信息,然后配合相关漏洞进入后台完成RCE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值