我正在阅读一个关于XSS攻击的boook,我发现了一个关于XSS过滤器规避的例子,有点奇怪(IMHO)。
这是示例文本:
另一个可能存在的注入点是当显影剂使用未消毒时。
作为脚本元素中生成的HTML的一部分的用户输入。例如:

变量查询字符串=“”;
somefunction(查询字符串);
函数somefunction{
...
}

似乎我们可以访问JavaScript函数的内部。我们试着加一些
引用并查看是否可以跳出封装:

变量查询字符串“”;
somefunction(查询字符串);
功能某物功能{
...
}

它起作用了,还导致了流程中的JavaScript错误,如图3.38所示。
让我们再试一次,但是不要尝试注入HTML,而是直接使用
JavaScript。因为我们是在一个脚本标签无论如何,为什么不使用它为我们的优势?

变量查询字符串=“”警报(“XSS”);//“;
somefunction(查询字符串);
函数somefunction{
...
}

粗体文本是我假设的用户输入,例如从表单中获取。
回到我的问题:这种攻击有什么办法奏效吗?例如,假设somefunction(query_string)用于运行一些sql查询,并且query_string是要在数据库中搜索的产品名。如果在我创建的搜索函数中,我认为没有办法插入带引号的字符串以“跳出封装”,即输入sql_query = 'SELECT name FROM table WHERE name = "'+query_string+'"';不会将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没有在服务器端使用,那么这次攻击唯一能做的就是修改查询字符串,然后将其提交给服务器。。
希望你能理解我写的和我想理解的,谢谢,最好的问候。

最佳答案

你应该只看第一行。在这个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,因为它显然令人困惑。

关于javascript - 跳出JS变量封装,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8330833/

10-13 09:02