一分钟内找到XSS注入的不寻常方法
许多开发人员都听说过您不能信任任何用户输入,而且确实如此。但是,也有一些地方经常被忽视,从而导致漏洞。
其中一个地方是……。注册功能点。
在注册新用户或更新他的数据时,开发人员不要忘记验证输入字段,但是如果我们将有效负载直接放入 Google 帐户(在名字和姓氏字段中),然后在通过此帐户访问网站?我们可以得到Stored XSS。
大约一个月前,我开始研究其中一个漏洞赏金计划,在他们允许的情况下,我可以透露细节。它是 TimeWeb Ltd — 一家俄罗斯托管服务提供商。
与往常一样,我首先注册一个帐户以扩大我的范围。为了节省时间,我决定使用 Yandex 帐户通过社交网络进行注册(Yandex — Google 的俄罗斯类似物),我的全名是">{{7*7}}<img>
通过这个恶意 Yandex 帐户注册后,在我的 TimeWeb 公开个人资料中,我看到了">49<img>
。代码已经执行,这意味着我们可以进行 XSS 攻击。我们只需要使用以下名称注册一个 Yandex 帐户:
{{constructor.constructor('alert(`XSS`)')()}}
但这就是问题所在。由于名字字段中特殊字符数量的限制,我们无法注册此类帐户。解决方案非常简单,将payload分成两部分,一部分用于名字,另一部分用于姓氏。由于全名在一个<span>中,因此payload将被连接起来。
我们只需要通过目标站点上的 Yandex 帐户进行注册。
成功发现 XSS 漏洞。
我还设法以这种方式入侵了很多网站。
PS:
由于 Google 限制了某些字符输入,因此不能使用 Google 帐户来利用 XSS,但它仍可用于查找大量其他错误。但是,还有一些其他服务,例如 Steam、Amazon,可用于此类攻击
推荐阅读
获取更多干货内容,戳“阅读全文