首页 > 解决方案 > XSS注入和innerhtml

问题描述

我正在尝试了解 XSS 漏洞,但在理解这个概念时遇到了一些问题。我有一个测试站点http://mytestpage/index.html并试图通过 xss 从辅助页面http://xsstest.html启动一个警报框。我似乎无法让警报发生。我认为我的问题是我的 xsstest 页面中的代码没有注入到我的 mytestpage/index.html 页面中。我正在尝试使用 innerhtml,因为我阅读的帖子似乎在 XSS 测试中利用了这一点。我相当确定我没有正确使用innerhtml,或者它不是正确的“工作工具”,我走错了路。任何建议,将不胜感激。

我的 XSS 测试代码如下:

<!DOCTYPE html> 
<html>
   <head>
     <meta charset="UTF-8" />
     <title>XSS TEST PAGE</title>
   </head>
<body>

   <body onload="document.forms[0].submit()">

      <form method="POST" id="test" onsubmit="test()" action="http://mytestpage/index.html" >

      </form> 

   </body>


    <script>
        function test(){
            alert("Hiya buddy!");
        }

        document.getElementById().innerHTML = test();
    </script>

</html> 

测试首页代码如下:

<!DOCTYPE html> 
<html>
   <head>
     <meta charset="UTF-8" />
     <title>My Test Home Page</title>
   </head>

    <body>

        <form method="post">
            <label>Enter Your Name:</label>
            <input type="text" name="myname">
            <button class="btn" type="submit" name="action" value="submit">Submit</button>
        </form> 

    </body>

</html>

标签: javascripthtmldomxssinnerhtml

解决方案


你没有做 XSS。您只是在提交表单时显示警报。这也有错误,即 document.getElementById() 需要一个 id 来选择元素。

XSS 是在您有一些输入要输入的地方完成的。因此,您不能在 XSStest 页面中执行 XSS,但您可以通过将测试主页代码更改为

<!DOCTYPE html> 
<html>
<head>
 <meta charset="UTF-8" />
 <title>My Test Home Page</title>
</head>

<body>

    <form method="post" action="some page url">
        <label>Enter Your Name:</label>
        <input type="text" name="myname">
        <button class="btn" type="submit" name="action" value="submit">Submit</button>
    </form> 

</body>

并假设您在 action 属性中给出的 url 的页面就像

<!DOCTYPE html>
<HTML>
 <body>
  Name is: <%=request.getParameter("myname")%>
 </body> 
</HTML>  

我假设你在这里使用 jsp。

现在,当您在此页面的输入框中输入 XSS 有效负载并提交时,您提供的 url 的页面将打开并显示警报,因为您在第二页中使用输入值之前尚未对其进行清理。


推荐阅读