查看: 13484|回复: 7

xss之富文本挖掘

[复制链接]
  • TA的每日心情
    慵懒
    2017-4-9 19:10
  • 签到天数: 149 天

    [LV.7]常住居民III

    发表于 2017-1-6 00:43:20 | 显示全部楼层 |阅读模式
    本帖最后由 人=族 于 2017-1-6 00:52 编辑

    富文本跨站脚本的模糊测试之道



    一、背景

    通过分析大量互联网上的公开案例,跨站脚本漏洞(Cross-site Script)仍是不 少拥有大量 WEB 业务的互联网企业需要对抗的“大敌”。

    22.jpg

    (图:百度/腾讯/阿里巴巴乌云漏洞报告平台漏洞分布统计,XSS 占很大比重)

    XSS 可以粗分为反射型 XSS 和存储型 XSS,当然再往下细分还有 DOM XSS, mXSS (突变 XSS), UXSS(浏览器内的通用跨站脚本)。其中一部分解决方法较为简便, 使用 htmlspecialchars()对 HTML 特殊符号做转义过滤,经过转义的输入内容在输 出时便无法再形成浏览器可以解析的 HTML 标签,也就不会形成 XSS 漏洞。
    33.jpg

    (图:htmlspecialchars 函数的转义规则)

    但网站做大了,总有一些业务,比如邮件内容编辑、日志帖子类编辑发布等 功能时,需要授权给用户自定义链接、改变字体颜色,插入视频图片,这时就不 得不需要需要引入 HTML 富文本实现相应功能。之前提到,htmlspecialchars()这 样把所有特殊符号做转义处理的过滤办法,在这里,英雄无用武之地,因为 HTML 标签全部被过滤了,那之前提到的这些用户可以自定义功能又该如何实现?

    一个问题总有它的解决办法,所以基于白/黑名单防御思想的富文本内容过滤 器应运而生,并很快被应用到了对抗富文本存储型 XSS 的前沿。它的任务就是根 据内置的正则表达式和一系列规则,自动分析过滤用户提交的内容,从中分离出 合法和被允许的 HTML,然后经过层层删除过滤和解析最终展示到网页前端用户界面来。这样既不影响网站的安全性,也不会妨碍到用户自定义富文本内容功能 的实现。

    道高一尺魔高一丈,经过一些前期的手工测试和侧面从各种渠道公开的漏洞 报告中了解,大多数网站的富文本过滤器采用“黑名单”的设计思想。这也为我 们使用模糊测试来自动化挖掘富文本存储型 XSS 提供了可能性。


    与此同时,本文的主角,“强制发掘漏洞的利器”-- 模糊测试(Fuzzing Test), 相信各位一定不会陌生。无论是在二进制还是在 WEB 端的黑盒测试中都有它立 功的身影,从客户端软件漏洞的挖掘到 WEB 端弱口令的爆破,本质上都可以认 为是一种模糊测试。

    结合富文本过滤器“黑名单”的实现逻辑,接下来,本文将主要探讨这类富 文本存储型跨站脚本的模糊测试之道。将模糊测试这一强大的漏洞挖掘武器通过 精细的打磨,挖掘出大量的潜在缺陷,并同时给出修复此类漏洞的“防守”建议。有了模糊测试框架,就好比有了手枪,现在我们需要给它装上“子弹”--模
    糊测试模板,这样我们才能对不同的富文本编辑器背后的过滤程序展开模糊测
    试。
    一个模糊测试模板的好坏,很大程度上决定了,之后我们是否能够高效的测
    试出富文本编辑器中潜在的缺陷,从而发掘出大量的存储型 XSS构造姿势。而在
    设计自己的模糊测试模板时,主要需要考虑三点:边界、进制编码和字符集。
    先来说说边界问题。以下面简单的 HTML代码为例:
    <span class=”yyy onmouseover=11111” style="width:expression(alert(9));"></span>
    上述 HTML标记语言文本传给后端富文本编辑器的时候,程序会如何过滤和解
    析?也许是这样的:首先匹配到<span,进入其属性值过滤的逻辑,首先是否含
    有高危的 on开头的事件属性,发现存在   onmouseover但被”,”包裹,作为    class
    属性的属性值,所以并不存在危险,于是放行;接着分析 style属性,其中有高
    危关键词”expression()”,又有括弧特殊符号,所以直接清除过滤。
    上述过滤流程的实现,很大程度依赖于后端通过正则匹配进行的  HTML标签
    中的边界分析。通过对“边界”的判定,类似 class=”yyyy onmouserover=11111”的
    属性及其值才会被放行,因为虽然 onmouserover=11111虽然是高危的事件属性,
    但存在于=””中,没有独立成一个 HTML属性,也就不存在风险。所以在上面的
    例子中,=””就是边界,<span中的尖括号也是边界,空格也可以说成一种边界。
    所以,形象一点说,一段 HTML代码的边界位置很有可能是下面这样的:
    [边界]<span[边界]class=[边界]yyy[边界]>[边界]</span[边界]>
    所以如果是类似 style="width:expr/*”*/esion(alert(9));"属性和属性值呢?程序又该
    如何确定边界?是 style="a:expr/*”还是  style="a:expr/*”*/ession(alert(9));"?
    当后端富文本过滤程序遇到这样,略微复杂的选择题时,如果其后端规则设


    计的过于简单,就很有可能导致把不该过滤的过滤掉,而把非法的内容放行,从
    而我们可以构造出存储型 XSS。打乱 HTML边界,让后端富文本过滤器陷入选择
    窘境,这是我们设计模糊测试模板的原则之一。有哪些内容可能会导致富文本内
    容过滤器出现边界判断问题?
    (1)特殊   HTML符号,通过这类明显的符号,过滤器就可以到  HTML标签及其属
    性,但这些符号错误的时候出现在了错误的地点,往往会酿成大祸,如:
    =,”,’,:,;,>,<,空格,/,
    (2)过滤器会过滤删除的内容,我们在边界填充下面这些元素,过滤器盲目删除,
    很有可能导致原本无害的属性值,挣脱牢笼,成为恶意的属性和属性值,如:
    expression, alert, confirm, prompt, <script>,<iframe>
    (3)不可打印字符,如:
    \t、\r、\n、\0等不可打印字符
    综上,现在我们已经可以用 Fuzzer生成一个下面这样的  Payload。幸运的话,
    或许已经可以绕过一些后端逻辑简单的富文本过滤器了,示例如下:
    <<<span/class=/yyyy onmouseover=11111/style="a:exp/*”>*/ression(1);"></span>


                                                                                                       


    模糊测试脚本没找到 神器都是有一个  :   XSS神器]XssEncode chrome插件


      下载地址:
    游客,如果您要查看本帖隐藏内容请回复


    富文本存储型XSS的模糊测试之道.pdf

    407.17 KB, 下载次数: 14, 下载积分: i币 -1

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-26 13:46
  • 签到天数: 426 天

    [LV.9]以坛为家II

    发表于 2017-1-7 14:58:26 | 显示全部楼层

    RE: xss之富文本挖掘

    不错 收藏了啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-15 09:16
  • 签到天数: 139 天

    [LV.7]常住居民III

    发表于 2017-1-8 14:36:59 | 显示全部楼层
    来看看,学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-21 08:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2017-1-14 14:04:01 | 显示全部楼层

    RE: xss之富文本挖掘

    哈哈哈 顶一个
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-1-21 08:49
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2017-1-15 17:46:03 | 显示全部楼层
    支持一下 水经验
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-5-28 12:33
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2017-1-16 02:17:48 | 显示全部楼层

    RE: xss之富文本挖掘

    找了很久的一个插件,谢谢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-1-18 12:51
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2017-1-16 18:54:19 | 显示全部楼层

    RE: xss之富文本挖掘

    感谢分享
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-3-31 23:42
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2017-1-29 11:41:48 | 显示全部楼层

    RE: xss之富文本挖掘

    不错哟  借鉴学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-11-25 08:04 , Processed in 0.033848 second(s), 13 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部