跨站脚本攻击注入

6

我正在测试一个网页应用程序。我想编写一个会显示警报信息“Hello”的XSS脚本。

我编写的第一个脚本是:

<script >alert("Hello");</script > 

但是没有显示弹出框"Hello"。我发现有效的XSS脚本是

<SCRIPT >alert(String.fromCharCode(72,101,108,108,111,33))</SCRIPT >

我想知道为什么第一个脚本没有起作用。


如果你想了解更多关于XSS混淆的内容,我可以向你推荐XSS Filter Evasion Cheat Sheet - Eich
我不确定为什么你还没有接受这个答案。它看起来非常可靠。 - vinczemarton
1个回答

8
很可能这个网站用HTML实体替换双引号或以其他方式转义它们,导致双引号在JavaScript中无法使用。当使用 String.fromCharCode(...) 时,您不需要使用任何引号,因此它可以正常工作。它获取字符串的字符的ASCII代码列表,并在运行时将它们组合成一个字符串。因此没有任何引用的必要。
避免这种XSS攻击的正确方法是将 < 替换为 &lt;,这样就根本无法创建脚本标记。
请注意,当清理包含HTML的数据时,还应将 >"& 替换为相应的HTML实体!然而,只有在假定HTML属性中不可能使用未受信任的数据时(这就是需要清理 " 的地方),< 才绝对必要来避免XSS攻击。

是的@ThiefMaster,该网站将第一个脚本中的“Hello”更改为"Hello"。我想知道该网站为什么这样做。此外,我想知道如何使用'String.fromCharCode(72,101,108,108,111,33)'来显示Hello! - IBK
String.fromCharCode是一个普通的JavaScript方法(在此处解释:http://www.w3schools.com/jsref/jsref_fromcharcode.asp)。您可以在`<script>`环境中使用任何JavaScript代码。 - Eich
没有访问该网站代码权限的人绝对无法知道他们为什么要用反斜杠转义双引号。通常,只有单引号需要这样转义,以在参数化查询不可行时在 SQL 查询中使用它们。我已经在上面解释了它与 String.fromCharCode 一起工作的原因。 - ThiefMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接