我正在读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没有在服务器端使用,这次攻击唯一能做的就是修改查询字符串,然后将其提交给服务器..
希望你能理解我写的内容和我想要理解的内容,谢谢,最好的问候。
答案 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
,因为它显然令人困惑。