跳出JS变量封装

时间:2011-11-30 18:16:21

标签: javascript html sql xss

我正在读XSS攻击,我发现了一个关于XSS过滤器逃避的例子,有点奇怪(恕我直言)。

这是示例文本:

  

可能存在的另一个可能的注入点是开发人员使用未经过清理的情况   用户输入作为脚本元素中生成的HTML的一部分。例如:

     

<脚本>
  var query_string =“< XSS> ”;
  somefunction(QUERY_STRING);
  功能有些功能{
  ...
  }
  < /脚本>

     

看来我们可以访问JavaScript函数的内部。我们来试试吧   引用并看看我们是否可以跳出封装:

     

<脚本>
  var query_string =“”< XSS> “;
  somefunction(QUERY_STRING);
  功能有些功能{
  ...
  }
  <脚本>

     

它工作正常,并且在此过程中也导致了JavaScript错误,如图3.38所示。   让我们再试一次,但不要试图注入HTML,让我们直接使用   JavaScript的。因为无论如何我们都在脚本标签中,为什么不将它用于我们的优势呢?

     

<脚本>
  var query_string =“”; alert(“XSS”); // “;
  somefunction(QUERY_STRING);
  功能有些功能{
  ...
  }
  < /脚本>

粗体文本是我认为的用户输入,例如从表单中获取。

回到我的问题:这种攻击有什么办法吗?例如,假设somefunction(query_string)用于运行某些sql查询,query_string是要在数据库中搜索的产品名称。如果我在搜索函数中创建sql_query = 'SELECT name FROM table WHERE name = "'+query_string+'"';,我认为没有办法注入一些带引号的字符串来“跳出封装”,即输入YAY";alert('hi');//不会将JS更改为:

var query_string = [user input, in this case YAY";alert('hi');//]
function abc(query_string){
    sql_query = "select name FROM table WHERE name = 'YAY';
    alert('hi');//
    ....
}

我错了吗?你怎么看?你能否举一个关于这种攻击如何造成某种损害的简单例子(如果可能的话)?

我想过像网上商店这样的东西,但假设JS没有在服务器端使用,这次攻击唯一能做的就是修改查询字符串,然后将其提交给服务器..

希望你能理解我写的内容和我想要理解的内容,谢谢,最好的问候。

1 个答案:

答案 0 :(得分:2)

你应该只看第一行。其余部分在这个xss示例中没有发挥作用。这是一个精心挑选的例子。所以采取这个简单的例子

var first_name="<XSS>";

在此示例中,<xss>是用户生成的内容。所以,你的php代码看起来像这样

var first_name="<? echo $firstName; ?>";

$ firstName取自某个数据库或其他内容,由用户在某个文本字段中输入生成。假设用户键入:";alert("XSS");//。 PHP将生成以下代码

var first_name="";alert("XSS");//";

漂亮印刷:

var first_name="";
alert("XSS");
//";

如您所见,用户可以在访问该页面的每个其他用户浏览器中运行其代码alert("XSS")。在这个示例中,除了一些警告框之外不会发生任何坏事,但是用户可能会注入一些获取cookie信息并将其发送到某个服务器的代码,因此攻击者可以窃取某人的登录会话。

同样的问题 - 忘记转义用户生成的内容 - 也适用于创建SQL查询,但这与此示例无关。这个例子的创建者应该在他的例子中使用query_string,因为它显然令人困惑。