HTML过滤器 - XSS Fucker 20160701

来源:互联网 发布:windows地图可以卸载吗 编辑:程序博客网 时间:2024/06/01 10:14

最近公司有些项目需要开放用户自由编辑HTML,业务需求强烈的很。 

为了防止世界被破坏,为了守护世界的和平,于是花了点时间写了一个基于白名单标签和属性的HTML过滤器。 

毕竟老大说了,被人插来插去,插上乌云终究感觉不太好…… 

https://github.com/Rtsjx123/xss_fucker 

目前已知存在两个问题: 

一个是基于css表达式的XSS无法识别和过滤; 
另一个是对于输入中没有完整HTML标签的payload无法识别和过滤(可以开启增强模式,但有误拦截)。 

这俩问题很痛苦啊,让我好好想想……

感谢(0)
分享到:0
18 个回复
  1. 1#笑看天下  | 2016-07-01 15:31

    收藏了

  2. 2#0x5010 (=。=)  | 2016-07-01 15:35

    这= =。大侠保重

  3. 3#冰麒麟  | 2016-07-01 16:08

    网站地址是多少

  4. 4#Rtsjx  | 2016-07-01 16:51

    好像对这个payload也没有能够过滤:
    <a href="javascript:alert(/fuckyouverymuch/)">戳我有惊喜</a>
    看来还要改。

  5. 5#piaoye (123)  | 2016-07-01 16:59

    把安全狗哪些规则提取出来不就够了

  6. 6#f4ckbaidu (<wtf>)  | 2016-07-01 17:29

    开发也太偷懒了,这部分就该开发在输出的时候做转换,输入做个jb毛啊

  7. 7#Rtsjx  | 2016-07-01 17:33

    @f4ckbaidu 他们需要支持HTML的效果(比如div标签的style/class属性,font标签的size/color属性),所以不能在输出的时候做即时的过滤,否则如果缓存没做好会造成负载过高,或某个输出的地方漏了,又被插的高潮迭起了。

  8. 8#phith0n (我也不会难过 你不要小看我)  | 2016-07-01 18:28

    https://phith0n.github.io/XssHtml
    测试:
    http://xsshtml.leavesongs.com/
    可以参考一下

  9. 9#Rtsjx  | 2016-07-01 18:45

    @phith0n 思路一致!我这边顾及业务需求,所以把HTML(5)的绝大部分标签都写进去了。

    另外,我看了下,对于href的相对路径会出一些BUG(被强制加了http://)。

    我先学习学习。

  10. 10#phith0n (我也不会难过 你不要小看我)  | 2016-07-01 18:55

    @Rtsjx 相对路径是有问题,但黑名单的话又容易出漏洞,所以强行加http

  11. 11#Rtsjx  | 2016-07-01 19:05

    @phith0n 请教一下,我如果尝试解析URL的scheme,对于非http(s)/ftp的再全部替换为空,应该可以兼顾业务和安全吧。

  12. 12#phith0n (我也不会难过 你不要小看我)  | 2016-07-01 20:42

    @Rtsjx 你还是没解决相对路径的问题,相对路径也非http/ftp……替换为空和强制加http://其实是一样的,只是处理方法而已,但没解决判断上的问题

  13. 13#mramydnei (一个逗逼运维)  | 2016-07-01 22:25

    毕竟老大说了,被人插来插去,插上乌云终究感觉不太好……

    这个净化器估计解决不了上面的问题。

  14. 14#Rtsjx  | 2016-07-02 08:14

    @phith0n 没有关系,相对路径从字面上取不到scheme,取不到scheme的,都认为是相对路径,可以予以放行。但是我担心:
    1.依靠:作为scheme的分隔符是否符合标准,亲爱的浏览器大爷会不会有一些高度兼容的方式(比如IE大爷会在css中兼容全角字符)
    2.是否有一种payload在基于白名单标签和属性中能够使用http(s)/ftp作为远程载荷的加载地址?(这个据我所知应该没有,不过某些浏览器大爷的css特有属性似乎有类似效果,比如-moz-bind)

  15. 15#Rtsjx  | 2016-07-02 11:34

    @mramydnei 求教一下,能稍微说说可能的风险吗?

  16. 16#感谢(1)mramydnei (一个逗逼运维)  | 2016-07-02 21:11

    @Rtsjx 
    其它楼层提出过的问题就不再重复叙述了。举两个bypass例子

    bypass1:
    <img usemap=#M width=100%><map name="M"><area href=javascript:alert(55) shape=default>
    bypass2:
    <embed src=javascript:alert(42)>

    bypass2相关实例:
    WooYun: 乌云主站XSS(持久xss涉及部分浏览器)

    还有一个问题现在不方便公开,不过从结论上来讲你强制allowscriptaccess为never是不行的。

  17. 17#Rtsjx  | 2016-07-03 10:25

    @mramydnei 十分感谢,我稍后调整一下过滤策略,先把已知问题修复掉~

  18. 18#
    回复此人 感谢
    _Evil (科普是一种公益行为)  | 2016-07-04 03:07

    @mramydnei @phith0n 赞

0 0
原创粉丝点击