从Cookie中的Self-XSS到高危XSS

iso60001  1929天前

22.png

上个月我到Synack的私有漏洞悬赏平台进行挖洞,发现在他们的一个网页中存在反射型XSS漏洞。由于Synack漏洞悬赏计划的私密性,我不会在这篇文章中提到测试目标,但是我将说明我是如何克服所遇到的许多不同的限制,最终挖到一个高危漏洞的。最初我的发现的XSS漏洞得到了272美元奖励,因为我无法证明我能访问文档对象模型,也就是DOM。而无法访问DOM的原因是括号字符被过滤,因此无法执行有效的payload,例如:

33.png

通常来说你必须像下图那样得到domain。

44.png

55.png

由于括号被过滤,我不得不用反引号来代替。但是,当我再次执行时,你是获取不到domain的,如下图。

66.png

综上所述,最初我得到了272美元的奖励。但同时我被告知,如果我能对dom进行访问,那我会得到一个更高的奖励,所以我当然要继续挑战下去。我和Brutelogic(Brute)讨论了一下,问他是否知道绕过这个限制的技术,他告诉我可以去看一下他的XSS备忘表。而在阅读文档时,我看到了这样一个payload:

77.png

这个payload成功帮我访问到了domain。于是我重新提交了漏洞,证明了我能对dom进行访问,最后获得了额外的60美元奖励。不过,我还要继续。

在早些时候,我在漏洞奖励范围内的另一个子域上发现了一个Self-XSS。这个XSS是将被ba se64编码的payload放入会话cookie中的某个参数而产生的。通常,基于cookie的XSS漏洞是很难利用的,除非攻击者可以设置cookie值。但幸运的是,我已经知道了上面的XSS漏洞。

除此之外,我还有另外一个限制,那就是我的payload不能有太多字符,否则会失败。因此我知道,要使这种XSS攻击成功,我必须从外部引入js文件,否则payload太长就无法生效。但是,我注意到目标页面使用了jQuery,利用它我就可以嵌入一个足够短的payload。下面是我使用的payload:

88.png

现在,我需要做的就是将我编写前端js文件托管在公网上,它的主要功能是重设cookie中某个参数的值,具体代码如下:

99.png

上面图片中的代码用标题文本替换了网页,标题文本上写着“单击下面的按钮以继续”。当受害者单击按钮时,它会将cookie中的某个值设置为以下被ba se64编码的字符串:

100.png

明文如下:

110.png

总之,我认为这是一个非常有趣的漏洞利用链,我遇到了很多限制,但最后还是绕过了全部限制。最后,我从这个Self-XSS得到了616美元的奖励,因为我把这个Self-XSS变成了一个高危XSS。正是因为一开始的272美元+60美元漏洞,使得这个漏洞的实际利用成为可能。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/bugbountywriteup/cookie-ba sed-self-xss-to-good-xss-d0d1ca16dd0e

最新评论

玄道日卫星  :  在国内估计就是忽略了
1929天前 回复
v萨达  :  阿斯达所
1929天前 回复
哎  :  国内就是能混就混
1929天前 回复
Vc-kin  :  撒打算
1929天前 回复
Vc-kin  :  回复 @ Vc-kin  :   大时代
1929天前 回复
Vc-kin  :  小姐姐
1929天前 回复
v萨达  :  黑胡椒
1929天前 回复
昵称
邮箱
提交评论