正则表达式分组在Firefox中的有趣現象

  • A+
所属分类:lcx

原文:http://homakov.blogspot.hk/2013/12/regexp-groups-overflow-in-ff.html

分组(子表达式)在Firefox中只要匹配到999 998個以上就會產生一種類似「溢出」的現象,不論匹配與否皆返回false

文中給出了簡單的測試:

In Chrome

z=Array(999999).join('a');
console.log(/^([w])+$/.test(z),z.length);
//true 999998

z=Array(999999+1).join('a');
console.log(/^([w])+$/.test(z),z.length);
//true 999999


In FF

z=Array(999999).join('a');
console.log(/^([w])+$/.test(z),z.length);
//true 999998

z=Array(999999+1).join('a');
console.log(/^([w])+$/.test(z),z.length);
//false 999999

現象或許能提供bypass的新思路,例如基於正则判斷的XSS filter

考慮以下判斷XSS的代碼

var input = '';

if (//g.test(input)) alert('XSS detected!!');

只有Firefox不會彈出alert,也就是成功繞過

[原文地址]

相关讨论:

1#

mramydnei | 2013-12-24 16:52

今天早上才看到,m.facebook.com取location.hash的那个正则吧

2#

xsjswt | 2013-12-24 17:35

对replace有效么,很多不是会发现这些就不执行,而是会直接replace掉

3#

/fd (/proc) ‫() | 2013-12-24 17:48

@xsjswt 有效

4#

xsser (十根阳具有长短!!) | 2013-12-24 18:03

擦 用底层漏洞来配合应用利用

5#

xsjswt | 2013-12-24 18:40

@xsser 一下子就有好多xss了,现在

6#

xsjswt | 2013-12-24 18:44

@xsser 不过就是url里面很难写这么多个字符

7#

xsjswt | 2013-12-24 19:00

@xsser 刚试了一个应该因为这个存在xss的点,火狐直接死掉

8#

xsjswt | 2013-12-24 19:00

@xsser 我是把999999个字符写在#后面,当location.hash的

9#

Chu (学习ing。) | 2013-12-25 01:07

nice~

10#

Chu (学习ing。) | 2013-12-25 01:32

ff26.0 ubuntu13.10 进行replace 测试,没成功呀...

11#

xsjswt | 2013-12-25 10:23

@Chu ff 27 win7 64,确实不会replace掉,直接把原串返回回来了

12#

核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2013-12-25 10:29

Very Nice, Mark!

文章来源于lcx.cc:正则表达式分组在Firefox中的有趣現象

相关推荐: 乌云月“爆” 第五期发布啦!

乌云月“爆” 第五期发布啦! 疯狗 (你在乌云这么叼,你家人知道么?) | 2013-12-11 17:09 本期尝试用PS进行制图和后期的排版工作,设计方面一点点的改进,这期是第一次尝试,轻拍。 另外本期也开始将一些drops上优质的内容引入到月报中,便于将…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: