zoukankan      html  css  js  c++  java
  • XSS漏洞扫描

    精细化扫描 XSS 漏洞 – 智能化场景分析
    作者:星期二, 一月 15, 20191
     

    XSS 攻击简单、危害大

    Web 应用的研发人员对用户的输入输出若不加以严格控制,会导致产生 XSS 漏洞。XSS 漏洞的利用方式也非常简单,普通的攻击者通过 XSS 漏洞发起攻击可以获取用户(甚至是管理员)的访问权限进行敏感操作。

    传统扫描 XSS 的方式

    多年来,XSS 泛滥成灾,在 OWASP TOP 10 中的地位居高不下,安全研究者提出了许多 XSS 漏洞的扫描方式,我们来回顾一下:

    第一代 XSS 漏洞扫描

    安全工作者通常喜欢用弹框(js 中的 alert 函数)来证明一个页面是否存在 XSS 漏洞,因此也诞生了一批流传非常广泛的 XSS Payload:

    <script>alert(/xss/)</script>

    <body onload=alert(/xss/)>

    <img src=# onerror=alert(/xss/)>

    带着以上 Payload 进行访问,如果看到一个类似这样的弹框,说明漏洞真实存在。

    第一代 XSS 漏洞扫描工具就是利用这个思路,在工具内部集成了大量 XSS Payload,在扫描时逐个进行尝试,自动将参数替换为 Payload,如果服务端的响应中包含相同的字符串就认为发现了 XSS 漏洞。

    第一代 XSS 漏洞扫描工具填补了历史的空白,可以发现了大量初级 XSS 漏洞,但是随着 XSS 攻击的发展,衍生出了新的 XSS 攻击手段,此类工具也完成了它的历史使命,它解决不了的问题包括:

    • 原始 Payload 无法灵活变形,无法应对需要 DOM 渲染才能触发的 XSS 漏洞
    • 输出点的部位不一定可执行,会造成误报
    • 服务端有过滤逻辑时返回的字符串与原始 Payload 有差异,可能导致无法匹配响应中被过滤后的 Payload
    • 如果 Content-Type 不是 text/html,即使 Payload 能够输出也无法执行
    • 服务端有防护时,许多 Payload 会导致请求直接被拦截
    • 等等

    第二代 XSS 漏洞扫描

    当大量初级 XSS 漏洞被解决之后,攻击者对于 XSS 漏洞的利用方式也逐渐成熟,安全建设对于 XSS 漏洞的目标变成了“全面解决 XSS 攻击”。这个时期出现了许多思路新颖的 XSS 漏洞扫描工具,这些工具能覆盖许多第二代 XSS 漏洞扫描工具无法发现的问题,在当初的年代堪称神器,但是依然存在着或多或少的问题,因此始终无法推广到整个行业,成为可量产的 XSS 扫描基础算法。

    第二代扫描中表现最出色的方式是调用真实浏览器来辅助判断,hook 浏览器的基础函数,累积更加庞大的 Payload 规则库,覆盖更多的输入输出场景,使浏览器告诉扫描器漏洞是否可实际被利用。这种扫描思路的特点是:

    • 几乎没有误报
    • 可以发现部分 DOM 型 XSS
    • 会发送大量 HTTP 请求
    • 每次请求都需要调用浏览器进行渲染,因此扫描速度奇慢无比
    • 扫描效果与 Payload 的覆盖量息息相关

    传统方式的不足,为什么要精细化扫描 XSS 漏洞

    无论是第一代还是第二代 XSS 漏洞扫描,都缺少了对于上下文的理解以及对于场景的分析,无法摆脱其 Fuzz 的本质,优化的方向也停留在“如何使猜测的结果更靠近真实结果”,而不是“如何正向推理得出正确答案”,因此依然由于多场景是无法解决的,问题在于:

    • Web 业务复杂,输出点的类型非常多,payload 不可能覆盖所有的情况
    • 依然无法解决 WAF 会拦截敏感 payload 的问题
    • 误报漏洞的问题依然严重

    那么有没有一种可以快速、深度、精准的 XSS 漏洞探测方法呢?

    智能化场景分析技术

    从历史的行程来看,XSS 漏洞扫描需要解决根本的问题在于对于输入输出场景的识别,对于不同浏览器渲染方式的理解,以及对于服务器处理方式的灵活应对。

    长亭洞鉴使用了一种全新的 XSS 漏洞分析算法,脱离了传统的对于 Payload 规则库的依赖,无需大量发送 HTTP 请求即可完成页面分析,定位存在的 XSS 漏洞,并智能化生成最终的复测 Payload。

    看一个简单的例子,有以下 URL:

    http://xx.chaitin.cn/test?p=866f268a344ba71fa4b0

    用户访问后会得到如下的返回:

    <html>
    <body>
    <a href=”./news/866f268a344ba71fa4b0/”>
    <img src=”./xxx.png”>
    </a>
    </body>
    </html>

    这是一段可能存在 XSS 的代码,业务将用户输入的 p 参数输出到了 a 标签的 href 属性中。熟悉 XSS 的同学无需多想即可编写如下验证该漏洞的 Payload。

    “><script>alert()</script>

    自动化扫描工具只要覆盖这个 Payload 即可验证如上的漏洞。但是这个 Payload 真的能工作么?其实还需要考虑其他因素:

    1. 参数是否会被服务器编码或解码
    2. 参数中是否允许存在空格,是否有长度限制
    3. 会不会有 WAF 拦截 script 或 alert 等关键字
    4. ( 和 ) 有没有可能被过滤或转义
    5. ” 和 ‘ 有没有可能被过滤或转义
    6. < 和 > 有没有可能被过滤或转义
    7. 有没有其他可以利用的属性,是否可以使用 onXXX 事件,有没有可能被过滤或转义
    8. 有没有 CSP 策略
    9. 等等

    如果是传统自动化黑盒扫描器,包含如上文“无需多想”的 Payload 已属不易,以上意外因素只要存在一点就可以使扫描铩羽而归,更难想想需要累积并尝试多少 Payload 才能实际验证一个这样的 XSS 漏洞。

    想要精细化发现 XSS 漏洞,必须站在理解 DOM 结构的基础上,长亭洞鉴实现了兼容各种浏览器标准的 DOM 解析器,使可分析的参数输出点可以覆盖到包括但不限于以下范围:

    • 输出在标签外部
    • 输出在 HTML 注释中
    • 输出在标签的属性内部
    • 输出在标签的属性外部
    • 输出在标签的事件内部
    • 输出在地址的部位,如 a/href、form/action、iframe/src 等
    • 输出在标签的 style 属性内部
    • 输出在 style 标签内
    • 输出在 script 标签内的字符串中
    • 输出在 script 标签内的注释中
    • 输出在特殊标签内部
    • 输出在特殊标签的特殊属性内部

    除此之外,自动化工具还需要理解参数传递方式与常见编码方式,考虑如何自动化识别服务器对参数的编码方式,如何定位 Payload 中的敏感字符,并对 Payload 关键部分进行编码。洞鉴内置的编码探测算法与自动编码算法可以解决该问题,可覆盖的编码类型包括但不限于:

    • HTML Entity
    • HTML Code
    • HTML Hex Code
    • URL Encode
    • js string literal
    • GBK
    • UTF-7
    • Base64

    对于上文提到的漏洞,长亭洞鉴的发现过程会更加智能化,在理解业务的基础上进行深度分析,定位漏洞,并自动生成 Payload,简单模拟一遍,可以将发现过程简单理解如下:

    1. 访问原始页面,判断输入是否会出现在页面上
      结论:参数 p 的内容会出现在页面上
    2. 根据 HTML 的语义建立 DOM 结构,判断输出在 DOM 中的位置
      结论:输出位于 a 标签的 href 属性中
    3. 输出是否需要冲突破闭合
      结论:href 属性在双引号内,因此需要使用 ” 突破闭合,也可以进一步使用 > 突破标签闭合
    4. 是否能插入可执行的 js
      结论:不存在其他干扰标签,可以使用 ” 突破闭合后插入标签事件或插入新的标签
    5. 基本确定 XSS 漏洞存在,开始尝试自动生成 Payload,生成 Payload 时需要考虑

    洞鉴扫描截图如下:

    1. 正在扫描的任务详情部分截取

    2. XSS 漏洞详情部分截取

    总结

    传统的 XSS 扫描简单粗暴,无法实现“全面发现 XSS 漏洞”的目标。

    长亭洞鉴集成了基于智能化场景分析算法的扫描引擎,可以精确定位参数的输出,覆盖不同场景的多种 XSS 漏洞,从而实现对 XSS 漏洞进行快速、深度、精准地探测。

  • 相关阅读:
    jquery基本操作笔记
    unity 读取灰度图生成三维地形并贴图卫星影像
    unity 读取灰度图生成按高程分层设色地形模型
    opengl读取灰度图生成三维地形并添加光照
    opengl鼠标键盘控制相机漫游
    opengl球形网格生成
    opengl读取灰度图生成三维地形
    unity三维地球模型生成
    ue4读取灰度图生成三维地形mesh
    unity读取灰度图生成等值线图
  • 原文地址:https://www.cnblogs.com/bonelee/p/14516763.html
Copyright © 2011-2022 走看看