最新消息:

javascript大小写特性toUpperCase()与toLowerCase()

xss admin 4791浏览 0评论

ps:在toUpperCase()函数中,字符ı会转变为I,字符ſ会变为S。在toLowerCase()函数中,字符İ会转变为i,字符K会转变为k。利用这些特性可以绕过xss的某些防御。

toUpperCase():
ı  ==>I
ſ  ==>S


toLowerCase():
İ  ==>i
K  ==>k

toUpperCase():

a0171411234653

toLowerCase():

QQ截图20140923103948

参考资料:

Fuzz中的javascript大小写特性

转自:http://www.leavesongs.com/HTML/javascript-up-low-ercase-tip.html

某比赛实在有点坑人,题目涉嫌抄袭不说,还不停改来改去。算了不吐槽了,说一则javascript小特性吧。

toUpperCase()是javascript中将小写转换成大写的函数。toLowerCase()是javascript中将大写转换成小写的函数。但是这俩函数真的只有这两个功能么?

不如我们来fuzz一下,看看toUpperCase功能如何?

<script>
for (var j = 'A'.charCodeAt(); j <= 'Z'.charCodeAt(); j++)
{
	var s = String.fromCodePoint(j);
	for (var i = 0; i < 0x10FFFF; i++) 
	{
		var e = String.fromCodePoint(i);
		if (s == e.toUpperCase() && s != e) 
		{
			document.write("char: "+e+"<br/>");
		};
	};
}
</script>

结果我们可以看到:

a0171411234653

其中混入了两个奇特的字符”ı“、”ſ“。

这两个字符的“大写”是I和S。也就是说ı“.toUpperCase() == ‘I’,”ſ“.toUpperCase() == ‘S’。通过这个小特性可以绕过一些限制。

同样,toLowerCase也有同样的字符:

<script>
for (var j = 'a'.charCodeAt(); j <= 'z'.charCodeAt(); j++)
{
	var s = String.fromCodePoint(j);
	for (var i = 0; i < 0x10FFFF; i++) 
	{
		var e = String.fromCodePoint(i);
		if (s == e.toLowerCase() && s != e) 
		{
			document.write("char: "+e+"<br/>");
		};
	};
}
</script>

QQ截图20140923103948

这个”“的“小写”字符是k,也就是”“.toLowerCase() == ‘k’.

用这个特性可以完成 http://prompt.ml/9 。还有某比赛的神题,当然有更简单的方法。

ps: http://prompt.ml/9的题目如下:

function escape(input) {
    // filter potential start-tags
    input = input.replace(/<([a-zA-Z])/g, '<_$1');
    // use all-caps for heading
    input = input.toUpperCase();

    // sample input: you shall not pass! => YOU SHALL NOT PASS!
    return '<h1>' + input + '</h1>';
}

因此我们可以通过输入:<ſcript>prompt(1)</script>来绕过。

转载请注明:jinglingshu的博客 » javascript大小写特性toUpperCase()与toLowerCase()

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址