ECSHOP 2.7.x sql注入漏洞分析

ecshop将我们可控的参数渲染进模板时,其中利用到$fun($para) 进行动态调用,而通过精心构造的payload使得$fun和$para我们可控,导致可以调用任何函数,从而达到sql注入

1. POC与复现

POC:

Referer: 554fcae493e564ee0dc75bdf2ebf94caads|a:2:{s:3:"num";s:1:"1";s:2:"id";s:52:"1' and updatexml(0x7e,concat(0x7e,database()),0x7e)#";}

复现

ECSHOP 2.7.x sql注入漏洞分析_第1张图片

2. 漏洞分析

首先说一下漏洞触发点在includes\lib_insert.php的insert_ads函数,可以看到并没有对传入变量进行任何过滤并且拼接到sql语句中
ECSHOP 2.7.x sql注入漏洞分析_第2张图片
好了,从头开始跟,首先在user.php的308行,直接将referer的值传给back_act然后在325行将back_act的值分配到模板的back_act变量,然后跟进display函数
ECSHOP 2.7.x sql注入漏洞分析_第3张图片
这个函数是用来渲染模板的,这里的out就是渲染好的html内容,将内容用$this->_echash全局变量分割,也就是拿554fcae493e564ee0dc75bdf2ebf94ca分割html内容
ECSHOP 2.7.x sql注入漏洞分析_第4张图片
分割出来大概就是这样,可以看到我们的payload在数组索引3位置
ECSHOP 2.7.x sql注入漏洞分析_第5张图片
继续跟进到insert_mod函数
ECSHOP 2.7.x sql注入漏洞分析_第6张图片
先看下我们传入的参数值为
ECSHOP 2.7.x sql注入漏洞分析_第7张图片
然后利用|分割,fun的值为ads,para值为竖线后面那一大串
然后para被反序列化为数组
ECSHOP 2.7.x sql注入漏洞分析_第8张图片
继续往下走,此时fun就是insert_ads,这就到了我们的漏洞触发点
继续跟进,将id值嵌入sql语句,这就导致了sql注入漏洞
ECSHOP 2.7.x sql注入漏洞分析_第9张图片

3. 修复建议

可以给$arr[‘id’]和$arr[‘num’]进行intval强制类型转换

4. 参考文献

https://cloud.tencent.com/developer/article/1333449

https://xz.aliyun.com/t/2725

你可能感兴趣的:(漏洞复现,web安全,php)