当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-033188

漏洞标题:ECShop GBK版json解析模块可致拒绝服务

相关厂商:ShopEx

漏洞作者: monster

提交时间:2013-08-01 18:39

修复时间:2013-10-30 18:40

公开时间:2013-10-30 18:40

漏洞类型:拒绝服务

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-08-01: 细节已通知厂商并且等待厂商处理中
2013-08-02: 厂商已经确认,细节仅向厂商公开
2013-08-05: 细节向第三方安全合作伙伴开放
2013-09-26: 细节向核心白帽子及相关领域专家公开
2013-10-06: 细节向普通白帽子公开
2013-10-16: 细节向实习白帽子公开
2013-10-30: 细节向公众公开

简要描述:

ECShop GBK版json解析模块有点问题
当提交恶意json数据时可致php死循环。

详细说明:

includes/cls_json.php文件

212     function str()
213 {
214 $i = '';
215 $s = '';
216 $t = '';
217 $u = '';
218
219 if ($this->ch == '"')
220 {
221 while ($this->next() !== null)
222 {
223 if ($this->ch == '"')
224 {
225 $this->next();
226
227 return $s;
228 }
229 elseif ($this->ch == '\\')
230 {
231 switch ($this->next())
232 {
233 case 'b':
234 $s .= '\b';
235 break;
236
237 case 'f':
238 $s .= '\f';
239 break;
240
241 case 'n':
242 $s .= '\n';
243 break;
244
245 case 'r':
246 $s .= '\r';
247 break;
248
249 case 't':
250 $s .= '\t';
251 break;
252
253 case 'u':
254 $u = 0;
255
256 for ($i = 0; $i < 4; $i++)
257 {
258 $t = (integer) sprintf('%01c', hexdec($this->next()));
259
260 if (!is_numeric($t))
261 {
262 break 2;
263 }
264 $u = $u * 16 + $t;
265 }
266
267 $s .= chr($u);
268 break;
269 case '\'':
270 $s .= '\'';
271 break;
272 default:
273 $s .= $this->ch;
274 }
275 }
276 else
277 {
278 $s .= $this->ch;
279 }
280 }
281 }
282
283 $this->error('Bad string');
284 }


注意221行。next()的返回值与null是三等号。。。
再看next()的代码

197     function next()
198 {
199 $this->ch = !isset($this->text{$this->at}) ? '' : $this->text{$this->at};
200 $this->at++;
201
202 return $this->ch;
203 }


这里当at索引的值不存在时返回的是''。。。
再回到上面。221行就死循环了

漏洞证明:

随便找个用到json的地方测试。。以/flow.php?step=add_to_cart为例
够造如下表单

<form action="http://xxx.com/shop/flow.php?step=add_to_cart" method="post">
<input name="goods_id" value="1"><br>
<input name="goods" value="&quot;"><br>
<input type="submit">
</form>


。。。提交后卡了30秒。然后返回了。。(返回的时候还报了sql错误。不知道这是为什么,我本地测试是没有的)

10046399-665D-4BAB-B4AD-DB2F6B1910CE.png


本地测试下。。。原来cpu0.0%

111.png


..请求一次以后

222.png


CPU瞬间98%。。。
趁页面卡在那里不动。。。多点几次提交按钮。。大概狂点了20秒。。
再访问一次主页

3333.png


已经死了的样子。。mysql连不了了。。
我机器风扇已经转地和狗一样了。。

修复方案:

用二等号就好了。。不要用三等号

版权声明:转载请注明来源 monster@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:7

确认时间:2013-08-02 23:04

厂商回复:

非常感谢您为shopex信息安全做的贡献
我们将尽快修复
非常感谢

最新状态:

暂无


漏洞评价:

评论

  1. 2013-08-01 19:10 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    这尼玛也可以?

  2. 2013-08-01 19:14 | monster ( 实习白帽子 | Rank:70 漏洞数:10 )

    @xsser 不知道会不会被忽略。。。官方是utf8的。。不然直接把官方打死好了

  3. 2013-08-01 21:10 | 0x0F ( 普通白帽子 | Rank:231 漏洞数:60 | 尖刀安全 (JDSec.Com).......................)

    求打死。@xsser 劈了不?

  4. 2013-08-02 09:02 | 黑色的屌丝 ( 路人 | Rank:27 漏洞数:5 | →_→→_→)

    尼玛,这都可以?