如何执行简单的基于DOM的XSS攻击

时间:2013-11-20 01:48:29

标签: javascript html dom xss

这是我的index.html(易受攻击的):

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>
<script>
    document.write("<form><select>"); 

    document.write("<option value=1>" + 
    document.location.href.substring(document.location.href.indexOf("default=") + 8)
+ "</option>");

    document.write("<option value=2> French </option>");

    document.write("</select> </form>");
    document.write(document.location.href);
</script>
  <body>

  </body>

</html>

它应该从../index.html?default=English获取默认语言,它将默认语言设置为英语。

我正在尝试使用../index.html?default=<script>alert(document.cookie)</script>在屏幕上显示Cookie,但浏览器似乎将>编码为%3E。我还使用了\x3Cscript>alert(document.cookie)\x3C/script>\x3Cscript\3Ealert(document.cookie)\x3C/script\3E and &lt;script&gt;alert(document.cookie)&lt;/script&gt;,但没有运气。

1 个答案:

答案 0 :(得分:1)

您的易受攻击的代码需要对从该位置解析的字符串使用decodeURIComponent,以使攻击有效:

document.write("<option value=1>" + 
    decodeURIComponent(
        document.location.href.substring(
            document.location.href.indexOf("default=") + 8)) 
    + "</option>");

对于那些编写易受攻击代码的人来说“有意义”这样做是因为来自URL的字符串可能合法地包含>等字符。

有关演示,请参阅http://plnkr.co/edit/Vctoj7GOLMvlvhS98Mk4?p=preview