美文网首页
ECShop 4.0反射型XSS漏洞分析

ECShop 4.0反射型XSS漏洞分析

作者: Cyc1e | 来源:发表于2019-03-13 20:21 被阅读0次

原文已发Freebuf ECShop 4.0反射型XSS漏洞分析

前言: Ecshop是国内的一款开源的电商框架,在国内应用较为广泛,当前最新版本为4.0.0,最近对其代码进行了简单的分析,发现可以绕过其filter触发XSS。

一、漏洞利用方式

发送GET请求包如下:

GET/CMS/ECShop_V4.0./user.php HTTP/1.1
Referer:https://127.0.0.1" /><a href=j&#97v&#97script:&#97lert('Cyc1e_test')><imgsrc="xxxxx
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko)Chrome/41.0.2228.0 Safari/537.21
Cookie:ECS_ID=17b608d2a679cf2c7e8611581478e6929dbfb34b;ECS[visit_times]=2
Connection:
keep-aliveAccept: /
Accept-Encoding:gzip,deflate
Host: 127.0.0.1

其中漏洞触发代码为:

Referer:https://127.0.0.1" /><ahref=j&#97v&#97script:&#97lert('Cyc1e_test')><imgsrc="xxxxx

实现绕过过滤规则,触发XSS漏洞的效果。

二、相关环境

版本:ECShop4.0.0

漏洞类型:反射型XSS

本地环境:php5.6.27+ Apache + Mysql

三、漏洞分析

该XSS漏洞路口点在user.php文件,查看user.php:328行

user.php

在用户登入界面的处理代码中,首先变量$action赋值为login进入主体代码,若变量$back_act为空并且请求包中存在REFERER字段,则将REFERER字段中的内容赋值给变量$back_act,这是导致该漏洞的直接原因,对$back_act变量赋值过后传入assign函数进行处理,其中$smarty是模版类cls_template的实例化:/includes/init.php:170行

init.php

所以查看assign函数时跟进到模版类cls_template中查看:/includes/ cls_template.php:70行

cls_template.php

对传入变量名和变量值进行变量注册,我们可以传入非数组数据对$back_act进行变量注册,注册完毕回到user.php代码,继续跟进模版类中的display函数:/includes/ cls_template.php:100行

cls_template.php

调用fetch函数进行user_passport.dwt文件的页面显示,也就是显示用户登入页面,其中在user_passport.dwt文件中:

user_passport.dwt

$back_act值被赋值给input标签中的value,所以我们控制了$back_act变量值便可以在html页面中插入js代码。

四、绕过全局Waf触发XSS

Ecshop中定义了全局安全过滤规则,查看代码:/includes/safety.php

safety.php

这个过滤规则比较简单粗暴,利用’on[a-zA-Z]{3,15}’ 过滤了所有的on开头js事件,所以用事件触发是较为困难了,并且<script、alert、eval、data、Javascript等敏感字符,继续查看代码:

safety.php

$back_act的值如果不是数组便传入filter()函数中利用preg_match进行字符校验,这里利用了/i,所以不区分大小写,无法利用大小写的方式进行绕过,不过这里的敏感字符过滤也不全,例如对于弹窗的js函数confirm就可以被利用,所以主要考虑的是如何绕过过滤检测。
我利用了HTML的实体编码来进行绕过,在 HTML 中,某些字符是预留的,比如不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体,如需显示小于号,我们必须这样写:< 或 <,其中'< '便是小于号(<)的HTML实体编码,并且不仅是 "<"">" 这样的能编码,所有字符均能编码,a-zA-Z的HTML实体编码方式是&#[字符ACCII编码],例如a->&#97。

所以可以利用这一编码方式进行构造POC:

Referer: [https://127.0.0.1](https://127.0.0.1)"/><a href=j&#97v&#97script:&#97lert('Cyc1e_test')><imgsrc="xxxxx

其中j&#97v&#97script:&#97lert('Cyc1e_test')可以绕过xss过滤规则的匹配从而绕过服务端的安全过滤植入html页面中,经过html编码解析会恢复成javascript:alert('Cyc1e_test'),从而触发执行,效果如图:

XSS代码植入

通过点击图片可以直接触发

XSS代码植入

漏洞绕过触发的方式不唯一。

相关文章

  • ECShop 4.0反射型XSS漏洞分析

    原文已发Freebuf ECShop 4.0反射型XSS漏洞分析 前言: Ecshop是国内的一款开源的电商框架,...

  • 代码审计——xss漏洞

    XSS漏洞大致分为三种 反射型XSS漏洞 存储型XSS漏洞 基于DOM的XSS漏洞 反射型XSS漏洞 它通过给别人...

  • Web漏洞分类

    普通反射型XSS存储型XSS基于DOM的XSS基于Flash的XSS 写类型CSRF读类型CSRFURL跳转漏洞 ...

  • (基础)XSS与CSRF代码审计

    XSS xss漏洞个人感觉就两种,一种是反射型xss,另外一种是存储型xss。我之前用bp学习xss漏洞挖掘的时候...

  • 【代码审计】跨站脚本 XSS

    0x01 反射型 XSS 以下代码展示了反射型 XSS 漏洞产生的大概形式 当访问 http://localhos...

  • DVWA之跨站脚本攻击漏洞测试02-存储型XSS

    一、Stored XSS概述 前文 DVWA之跨站脚本攻击漏洞测试01-反射型XSS 对Reflected XSS...

  • 04 常见Web漏洞解析

    XSS XSS有三类: 存储型 过程: 反射型 过程如下: DOM型错误信息在hash中总结: CSRF漏洞 点击...

  • XSS漏洞攻击教程:

    XSS分类:1.反射型XSS(非持久型);2.存储型XSS((持久型);3.DOM XSS(文档对象型). 反射型...

  • XSS攻击介绍

    扫码关注本人公众号 XSS(Reflected)原理 非持久型(反射型)跨站脚本漏洞是最基本的web漏洞。当web...

  • dvwa-XSS (Reflected)

    XSS攻击需要具备两个条件:需要向web页面注入恶意代码;这些恶意代码能够被浏览器成功的执行XSS反射型漏洞 反射...

网友评论

      本文标题:ECShop 4.0反射型XSS漏洞分析

      本文链接:https://www.haomeiwen.com/subject/xoqxmqtx.html