XSS - 跨站脚本攻击

一、XSS简介。

XSS跨站脚本(Cross-Site Scripting,XSS)自1996年诞生以来,如今已经历十多年的演化。由于和另一种网页技术-层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故把原本的CSS简称为XSS。在各种WEB应用安全漏洞中,XSS跨站脚本攻击漏洞一直被OWASP(Open Web Application Security Project)组织评为十大应用安全中的其中之一。【参考OWASP TOP 10:2007年A2 / 2010年A2 / 2013年A3】        

XSS最大的特点就是能注入恶意的HTML/JavaScript代码到用户浏览的网页上,是因WEB应用程序对用户输入过滤不足而产生的,当用户浏览这些网页时,就会执行其中的恶意代码。由于HTML代码和客户端JavaScript脚本能在受害者主机上的浏览器任意执行,这样等同于完全控制了WEB客户端的逻辑,在这个基础上,黑客可以轻易地发起Cookie窃取,会话劫持,钓鱼欺骗等各种各样的攻击。

通常情况下,我们既可以把XSS理解成一种WEB应用安全漏洞,也可以理解成一种攻击手段。

 二、XSS攻击流程。

三、XSS攻击类型(反射型、DOM型、存储型)。

1.反射型。

 

 反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。

例子: <?php $username = $_GET['username']; echo $username; ?>      在这段代码中,程序接收username值后再输出,如果提交xss1.php?username=test,那么程序将输出test,如果攻击者输入username=<script>alert(‘xss’)</script>,将会造成反射型XSS漏洞。

反射型XSS攻击应用场景:

攻击场景: 假如http://test.com/xss1.php存在XSS反射型跨站漏洞,那么攻击者的步骤可能如下。 test1是网站test.com的用户,此时正在登录的状态中。

攻击者发现http://test.com/xss1.php存在XSS反射型跨站漏洞,然后精心构造JavaScript代码,此段代码可以窃取用户的cookie。

攻击者将带有反射型XSS漏洞的URL通过站内信息发送给用户test1,使用各种诱导的方式让用户test1去打开链接。

如果用户test1打开了带有XSS漏洞的URL,那么就会把自己的cookie发送到攻击者中。

攻击者接受到用户test1的会话cookie,就可以直接利用cookie以test1的身份登录test.com网站中。

以上步骤,通过使用反射型XSS漏洞可以以test1的身份登录网站,这就是其危害。

反射型演示如下图所示:

2.存储型。

     存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本。允许用户存储数据的WEB应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当再次访问页面时,这段XSS代码被程序读取响应给浏览器,造成XSS跨站攻击,这就是存储型XSS。        

在测试是否存在XSS时,首先要确定输入点与输出点,例如:我们要在留言内容上测试XSS漏洞,首先就要去寻找留言内容输出(显示)的地方是在标签内还是标签属性内,或者在其他地方,如果输出的数据在属性内,那么XSS是不会被执行的。 

当管理员登录后台去审核留言板的时候,弹框了,这下就中招了,当然这只不过是XSS漏洞测试而已,只是证明这里有XSS漏洞,但是实则对服务器没有任何危害,如图

3.DOM型。

     DOM—based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—based XSS漏洞。

 

 

XSS危害

网络钓鱼,包括盗取各类用户账号;

窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;

劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账,强制发表日志,发送电子邮件等;

强制弹出广告页面,刷流量等;

网页挂马;

进行恶意操作,例如任意篡改页面信息,删除文章等;

进行大量的客户端攻击,如DDOS攻击;

获取客户端信息,例如用户的浏览历史,真实ip,开放端口等;

控制受害者机器向其他网站发起攻击;

结合其他漏洞进一步扩大攻击;

提升用户权限,包括进一步渗透网站;

传播XSS跨站脚本蠕虫等;

......... 

XSS的防护

对用户提交的数据进行有效验证,仅接受指定长度范围内,采用适当格式的内容提交,阻止或忽略初次之外的其他任何数据

输入是否仅仅包含合法的字符

输入的字符串是否超过最大长度的限制

输入如果为数字,数字是否在指定的范围内

输入是否符合特定要求,例如:邮箱、电话号码、IP地址等

输入与输出中的过滤 黑名单与白名单 WEB安全编码规范 HttpOnly cookie

输出编码 对输出的数据进行编码,如HTML编码,就是让可能造成危害的信息变成无害

总的原则:输入做过滤,输出做转义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值