无需括号与分号的XSS

栏目: 编程工具 · 发布时间: 5年前

内容简介:几年前,我发现了一种技术,它可以使用在每次JavaScript出现异常时都会调用

无需括号与分号的XSS

几年前,我发现了一种技术,它可以使用 onerrorthrow 语句,在JavaScript中调用函数而无需括号。它的工作原理是将 onerror 处理程序设置为您要调用的函数,并使用 throw 语句将参数传递给函数:

<script>onerror=alert;throw 1337</script>

在每次JavaScript出现异常时都会调用 onerror 处理程序,然后 throw 语句允许您创建一个自定义异常,该异常包含一个发送到 onerror 处理程序的表达式。因为 throw 是一个语句,所以通常需要在 onerror 赋值后加上一个分号以开始一个新的语句,而不是形成一个表达式。

我曾遇到过一个过滤括号和分号的网站,我认为它肯定能够使用这种技术来执行一个没有分号的函数。第一种方法非常简单:您可以使用大括号来形成一个块语句,在这个语句中您有一个 onerror 可赋值。在块语句之后,您可以使用不带分号(或新的行内)的 throw

<script>{onerror=alert}throw 1337</script>

块语句很好,但我想要一个更好的选择。有趣的是,因为 throw 语句接受一个表达式,所以你可以在 throw 语句中执行 onerror 赋值,并且因为表达式的最后一部分被发送到 onerror 处理程序,所以将使用所选参数调用该函数。以下是它的工作原理:

无需括号与分号的XSS

<script>throw onerror=alert,'some string',123,'haha'</script>

如果您已尝试运行代码,你将会注意到Chrome使用”Uncaught”作为将发送到异常处理程序字符串的前缀。

无需括号与分号的XSS

在我之前的博客文章中,我展示了如何使用eval作为异常处理程序并执行字符串。我们来回顾一下,你可以在字符串前加上一个 = ,然后将’Uncaught’字符串变成一个变量并执行任意JavaScript。例如:

<script>{onerror=eval}throw'=alertx281337x29'</script>

发送到eval的字符串是”Uncaught=alert(1337)”。这在Chrome上工作正常,但在Firefox上,异常会以两个字符串”uncaught exception”作为前缀,这当然会在执行时导致语法错误。我开始寻找方法。

值得注意的是,当我在控制台执行 throw 时, onerror/throw 的技巧并不能奏效。这是因为当throw在控制台中执行语句时,结果将发送到控制台而不是异常处理程序。

当你使用Error函数在Firefox中创建异常处理时,它将不会包含前缀”uncaught exception”,而只会回显字符串”Error”:

throw new Error("My message")//Error: My message

我显然无法直接调用Error函数,因为它需要括号,但我想如果我使用带有Error原型的对象也许能达到一样的效果。但是这并不起作用 – Firefox仍然使用相同的字符串作为前缀。然后我使用Hackability Inspector检查Error对象以查看它具有的属性。我将所有属性添加到对象中,终于它奏效了!然后我一个接一个地删除属性,直到找到了所需的最小属性集:

<script>{onerror=eval}throw{lineNumber:1,columnNumber:1,fileName:1,message:'alertx281x29'}</script>

您也可以使用fileName属性在Firefox上发送第二个参数:

<script>{onerror=prompt}throw{lineNumber:1,columnNumber:1,fileName:'second argument',message:'first argument'}</script>

当我在Twitter上发布了这个技巧后, @terjanq@cgvwzq (Pepe Vila)紧接着发布了一些很酷的操作,例如 @terjanq 删除所有字符串文字:

<script>throw/a/,Uncaught=1,g=alert,a=URL+0,onerror=eval,/1/g+a[12]+[1337]+a[13]</script>

除此之外,通过使用类型错误将字符串发送到异常处理程序,Pepe完全删除了对throw语句的需要。

<script>TypeError.prototype.name ='=/',0[onerror=eval]['/-alert(1)//']</script>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Definitive Guide to MongoDB

The Definitive Guide to MongoDB

Peter Membrey、Wouter Thielen / Apress / 2010-08-26 / USD 44.99

MongoDB, a cross-platform NoSQL database, is the fastest-growing new database in the world. MongoDB provides a rich document orientated structure with dynamic queries that you’ll recognize from RDMBS ......一起来看看 《The Definitive Guide to MongoDB》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具