这是我的第一个bug bounty的writeup,大佬别喷我,只是新手文章。
我在Hackerone的一个程序中找到了这个XSS,关于这个存储型XSS的有趣之处在于它反映了我找到了从self XSS升级到存储型XSS的方式。此外,我不能透露出漏洞程序名称,因为他们要求不能泄露。但如果你发现了它,我也不会感到惊讶。那么让我们来看看这个网站,我们称之为redacted.com。
虽然停留在redacted.com上几个小时了,我在试图找出它存在的XSS漏洞,最后,我认为在这个网站上获取XSS是不可能的,因为它正确编码了所有内容。即使我找到一个,它也会成为Self XSS。
这不是一个大型网站,在每个端点都尝试寻找XSS后,最后我放弃了,决定继续寻找其他漏洞。
所以第二天,当我在hackone上的AngularJS读到关于模板注入的报告,我就想,会不会有思路呢?事实证明,redacted.com也是运行AngularJS的。
所以我尝试了一个简单的表达式,如{{4 * 4}},如果没有编码将输出16,最终也找到了一个不编码的输出点。现在我可以为XSS提供此payload{{constructor.constructor(’alert(“XSS”)’)()}}。
好极了!!!我发现了XSS,一分钟后意识到…… MD,这是一个self xss!
现在怎么办????
因此,经过几个小时的搜索,我找到了一个有趣的地方,它可以执行,且不需要任何身份验证。
为了提供有关此应用程序的背景信息,它具有通过电子邮件发送报告的功能(无论此网站做什么),我们也可以为报告提供自定义名称。这些报告是敏感的,只能由经过身份验证的用户查看。我发现的Self XSS是在本报告的名称中,由于报告只能由经过身份验证的用户查看,因此无法在其他用户上执行。真的吗???
所以我使用了这个功能,并通过电子邮件将报告发送到我的邮箱,却发现了一个小小的取消订阅的链接隐藏在角落里。
打开它后!它显示了报告名称,没有任何身份验证。
是时候测试它是否编码了大括号{{}}了
所以我快速进入我的报告页面,将名称命名为{{constructor.constructor(’alert(“XSS”)’)()}} 并保存。打开那个再取消订阅链接后!发现这是存储型XSS。
现在当任何人打开取消订阅链接时,XSS将被执行。无论受害者是否经过身份验证,这都适用于任何人。
1)查看应用程序上正在运行的技术并找到特定于它们的漏洞。
2)在自己感到无聊时阅读已经披露的旧hackerone报告。
3)在应用程序的尝试中更加努力 – 我阅读的报告和文章很多但从未遇到过能在电子邮件取消订阅链接中获得XSS的人。我本来可以报告self XSS并最终获得漏洞确认信息,但我给了自己更多的时间去深入挖掘并且最后很幸运地提升了漏洞等级。
09/10/2018 – 提交报告
10/10/2018 - 审核
11/10/2018 – 奖励
22/10/2018 – 已修复
谢谢阅读。
*参考链接:nahoragg,由生如夏花编译,转载请注明来自FreeBuf.COM