发布:2019年10月14日,13:04 UTC
更新:2020年9月8日在12:15 UTC
通常,当您测试网站时,您可能会在测试的输入上遇到长度限beplay体育能用吗制,这就是为什么尽可能减少矢量的长度很重要,当然也很有趣。
当我做我的XSS魔术谈论全明星我提出了一种使用CSP的技术Angularjs在63个字符中:
<输入ID = x ng-focus = $ event.path | orderby:'css && [1] .map(alert)'>
它通过使用Chrome中的路径属性来起作用,Chrome是DOM对象的数组,它还包含窗口对象作为最后一个元素。AngularJ中的管道字符表示过滤器操作,因此将路径阵列发送到Orderby滤波器,并接受表达式。然后,当执行表达式时,其在数组的当前元素中执行的上下文。然后我使用CSS
属性要检测数组元素当前使用窗口的最后一个元素。然后,我使用地图函数执行警报
功能是因为沙箱将检测到窗口,如果打电话警报
作为正常函数调用。向量如下:
我向听众挑战,以进一步减少它,精神错乱通过更换CSS
带有“ X”的属性,这是注射输入元素的ID。这是因为“ x”将是窗口的全局属性,因此可以用于检测窗口对象。见下文:
<输入id = x ng-focus = $ event.path | orderby:'x && [1] .map(alert)'>
我在懒惰的人面对进一步减少它的挑战。我自己承担挑战,我想到了打电话的方法警报
不触发AngularJS窗口检测。我想到了使用数组和流行音乐
方法:
<输入ID = x ng-focus = $ event.path | orderby:'x && [alert] .pop()(1)'>
该有效载荷与原始的长度相同。但是,等等 - AngularJS允许您无视不确定的功能而不会引发例外。因此,我可以通过删除&&
和财产检查:
<输入ID = x ng-focus = $ event.path | orderby:'[alert] .pop()(1)(1)'>
仍然决心进一步减少它,我尝试使用一个阵列,没有流行音乐
通过引用第一个元素并调用它:
<输入ID = x ng-focus = $ event.path | orderby:'[arter] [0](1)'>
但这导致非法操作,因为调用对象不是窗口,而javaScript只能让我们呼叫警报
在窗口上。所以我需要一种打电话的方式警报
作为直接呼叫并维护对窗口的引用,同时仍避免了Angularjs的窗口检查。最后,我想出了这种简单而优雅的方法 - 使用分配逃避Angularjs的窗口对象检测:
<输入ID = x ng-focus = $ event.path | orderby:'(y =警报)(1)'>