渗透测试技术 课件 第5章-5.3-XSS攻击_第1页
渗透测试技术 课件 第5章-5.3-XSS攻击_第2页
渗透测试技术 课件 第5章-5.3-XSS攻击_第3页
渗透测试技术 课件 第5章-5.3-XSS攻击_第4页
渗透测试技术 课件 第5章-5.3-XSS攻击_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

XSS攻击跨站脚本攻击(CrossSiteScripting),为不和层叠样式表(CascadingStyleSheets,CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。2017年在OWASP(openwebapplicationsecurityproject)评为十大安全漏洞中的第七威胁漏洞。也有黑客把XSS当做新型的“缓冲区溢出攻击”,而JavaScript是新型的shellcode。前言目录/CONTENTSXSS攻击原理XSS攻击分类XSS攻击防御XSS攻击实践跨站点脚本(也称为XSS)是一种Web安全漏洞,允许攻击者破坏用户与易受攻击的应用程序的交互。它允许攻击者绕过旨在将不同网站彼此隔离的同源策略。跨站点脚本漏洞通常允许攻击者伪装成受害者用户,执行用户能够执行的任何操作,并访问用户的任何数据。如果受害者用户在应用程序中拥有特权访问权限,那么攻击者可能能够完全控制应用程序的所有功能和数据。跨站脚本攻击简介跨站点脚本通过操纵易受攻击的网站来工作,以便将恶意JavaScript返回给用户。当恶意代码在受害者的浏览器中执行时,攻击者可以完全破坏他们与应用程序的交互。XSS工作原理假设一个网站有一个搜索功能,接收用户在URL参数中提供的搜索词:/search?term=gift假设应用程序不执行任何其他数据处理,攻击者可以构建如下攻击:/search?term=<script>alert(/xss/)</script>如果应用程序的另一个用户请求攻击者的URL,那么攻击者提供的脚本将在受害者用户的浏览器中执行。XSS攻击XSS概念证明你通过注入一个有效载荷来确认大多数类型的XSS漏洞,该载荷会导致你自己的浏览器执行一些任意的JavaScript。长期以来alert(),例如:payload:<script>alert("xss")</script><script>prompt(1)</script>

利用跨站点脚本漏洞的攻击者通常能够:冒充或伪装成受害者用户。执行用户能够执行的任何操作。读取用户能够访问的任何数据。捕获用户的登录凭据。对网站进行虚拟篡改。将特洛伊木马功能注入网站。XSS攻击危害通常出现XSS漏洞的地方:微博、留言板、聊天室等等收集用户输入的地方,都有遭受XSS的风险,只要没有对用户的输入进行严格过滤,就会被XSS。XSS漏洞挖掘目录/CONTENTSXSS攻击原理XSS攻击分类XSS攻击防御XSS攻击实践XSS攻击主要分为三种类型:反射型XSS,其中恶意脚本来自当前的HTTP请求。存储的XSS,其中恶意脚本来自网站的数据库。基于DOM的XSS,该漏洞存在于客户端代码而不是服务器端代码中。XSS攻击类型当应用程序在HTTP请求中接收数据并以不安全的方式在即时响应中包含该数据时,就会出现反射跨站点脚本(或XSS)。假设一个网站有一个搜索功能,它接收用户在URL参数中提供的搜索词:/search?term=gift应用程序在对此URL的响应中回显所提供的搜索词:<p>Yousearchedfor:gift</p>假设应用程序不执行任何其他数据处理,攻击者可以构建如下攻击:/search?term=<script>/*+Bad+stuff+here...+*/</script>反射型XSS此URL会产生以下响应:<p>Yousearchedfor:<script>/*Badstuffhere...*/</script></p>如果应用程序的另一个用户请求攻击者的URL,那么攻击者提供的脚本将在受害者用户的浏览器中,在他们与应用程序的会话上下文中执行。反射型XSS反射型XSS攻击步骤用户攻击者攻击者的web服务器被攻击的web服务器1、登录2、发送攻击url(含攻击js)3、访问攻击url4、对攻击js回应5、发送会话信息6、获取会话信息7、劫持用户会话图示是反射型XSS的攻击示意图,序号是攻击顺序。反射型XSS需要诱骗用户进行点击。而存储型,攻击者已经通过XSS漏洞(基本为输入框)将恶意脚本放入数据库中,只要每次浏览这个网页就会触发恶意脚本。如果攻击者可以控制在受害者浏览器中执行的脚本,那么他们通常可以完全危害该用户。除其他外,攻击者可以:在应用程序中执行用户可以执行的任何操作。查看用户能够查看的任何信息。修改用户能够修改的任何信息。发起与其他应用程序用户的交互,包括恶意攻击。反射型XSS攻击的影响使用BurpSuite的Web漏洞扫描器可以快速可靠地找到绝大多数反映的跨站点脚本漏洞。手动测试反射型XSS漏洞涉及以下步骤:测试每个入口点。分别测试应用程序HTTP请求中数据的每个入口点。这包括URL查询字符串和消息正文中的参数或其他数据,以及URL文件路径。它还包括HTTP标头,尽管只能通过某些HTTP标头触发的类似XSS的行为在实践中可能无法利用。确定反射上下文。对于响应中反映随机值的每个位置,确定其上下文。这可能在HTML标签之间的文本中,在可能被引用的标签属性中,在JavaScript字符串中等。反射型XSS漏洞挖掘测试候选有效载荷。根据反射的上下文,测试初始候选XSS负载,如果它在响应中未修改地反射,则将触发JavaScript执行。测试替代有效载荷。如果候选XSS负载被应用程序修改,或完全被阻止,那么您将需要根据反射的上下文和正在执行的输入验证类型来测试可能会提供有效XSS攻击的替代负载和技术。在浏览器中测试攻击。最后,如果你成功找到了一个看似在BurpRepeater中工作的有效载荷,将攻击转移到一个真实的浏览器(通过将URL粘贴到地址栏中,或者通过在BurpProxy的拦截视图中修改请求,看看注入的JavaScript确实被执行了。反射型XSS漏洞挖掘当应用程序从不受信任的来源接收数据并以不安全的方式将这些数据包含在其稍后的HTTP响应中时,就会出现存储的跨站点脚本(也称为二阶或持久性XSS)。假设一个网站允许用户提交对博客帖子的评论,这些评论会显示给其他用户。用户使用HTTP请求提交评论,如下所示:POST/post/commentHTTP/1.1Host:Content-Length:100postId=3&comment=This+post+was+extremely+helpful.&name=Carlos+Montoya&email=carlos%40存储型XSS提交此评论后,任何访问博客文章的用户都将在应用程序的响应中收到以下内容:<p>Thispostwasextremelyhelpful.</p>存储型XSS假设应用程序不对数据执行任何其他处理,攻击者可以提交如下恶意评论:<script>/*Badstuffhere...*/</script>在攻击者的请求中,此评论将被URL编码为:comment=%3Cscript%3E%2F*%2BBad%2Bstuff%2Bhere...%2B*%2F%3C%2Fscript%3E任何访问博客文章的用户现在都将在应用程序的响应中收到以下内容:<p><script>/*Badstuffhere...*/</script></p>然后,攻击者提供的脚本将在受害者用户的浏览器中,在他们与应用程序的会话上下文中执行。存储型XSS存储型XSS攻击步骤1、攻击者提交包含恶意代码的内容2、普通用户登录web程序3、用户浏览攻击者提交的内容4、服务器对攻击者的恶意代码做出回应5、攻击者的恶意代码在用户浏览器执行(证明存在XSS)6、用户浏览器向攻击者发送会话令牌(盗取用户身份)7、攻击者劫持回话如果攻击者可以控制在受害者浏览器中执行的脚本,那么他们通常可以完全危害该用户。攻击者可以执行任何适用于反映的XSS漏洞影响的操作。在可利用性方面,反射型XSS和存储型XSS之间的主要区别在于,存储型XSS漏洞可实现应用程序本身的自包含攻击。攻击者不需要找到诱使其他用户发出包含其漏洞利用的特定请求的外部方式。相反,攻击者将他们的漏洞利用放入应用程序本身,并简单地等待用户去触发它。存储型XSS攻击影响许多存储的XSS漏洞可以使用BurpSuite的网络漏洞扫描器找到。手动测试存储的XSS漏洞可能具有挑战性。您需要测试所有相关的“入口点”,攻击者可控制的数据可以通过这些“入口点”进入应用程序的处理过程,以及数据可能出现在应用程序响应中的所有“出口点”。存储型XSS漏洞挖掘申请处理的入口点包括:·URL查询字符串和消息正文中的参数或其他数据。·URL文件路径。·可能无法利用与反射XSS相关的HTTP请求标头。·攻击者可以通过其将数据传送到应用程序的任何外带路由。存在的路由完全取决于应用程序实现的功能:webmail应用程序将处理从电子邮件中收到的数据;显示Twitter提要的应用程序可能会处理第三方推文中包含的数据;新闻聚合器将包含源自其他网站的数据等。存储型XSS漏洞挖掘DOM:全称DocumentObjectModel,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。定义了访问和操作HTML文档的标准方法,把HTML文档呈现带有元素、属性、文本的树状结构。DOM概念DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DOM型xss也可以理解为反射性xss。DOM概念所有的元素都包含在标签中,没有父辈,也没有兄弟,所以称之为树根。<head>和<body>是html两个分支,在同一层,他们的父元素是<html>,他们还存在各自的子元素。最终形成html文档,在浏览器中以特定的形式被我们看到。DOM实例当JavaScript从攻击者可控制的来源(例如URL)获取数据并将其传递到支持动态代码执行的接收器(例如eval()函数)时,通常会出现基于DOM的XSS漏洞。这使攻击者能够执行恶意JavaScript,通常用来劫持其他用户的帐户。要进行基于DOM的XSS攻击,您需要将数据放入源中,以便将其传播到接收器并导致执行任意JavaScript。DOMXSS最常见的来源是URL,通常通过document.write等对象访问。攻击者可以构建一个链接,诱使受害者点击来触发。DOM型XSShttp://ip/xss/domxss.html?a=testhttp://ip/xss/domxss.html?a=%3Cscript%3Ealert(/xss/)%3C/script%3E漏洞原因:从URL中取参数值写入页面,未经过滤。DOM型XSS要手动测试DOM型XSS,通常需要使用带有开发者工具的浏览器,如Chrome。依次处理每个可用的输入源,并分别测试每个接收器。1、测试HTML接收器。2、测试javascript执行接收器。3、利用不同的源和接收器利用DOMXSS。4、DOMXSS结合反射和存储数据。DOM型XSS漏洞挖掘1、测试HTML接收器。在HTML接收器中测试DOMXSS,将一个随机的字母数字字符串放入源(例如location.search),然后使用开发者工具检查HTML并找到字符串出现的位置。DOM型XSS漏洞挖掘2、测试javascript执行接收器。测试DOM型XSS的JavaScript执行接收器有点困难,需要使用JavaScript调试器来确定输入是否以及如何被发送到接收器。对于每个潜在的源,比如location,首先需要在页面的JavaScript代码中找到源在哪被引用。一旦找到源在哪被读取,可以使用JavaScript调试器添加断点,并跟踪源的使用情况,使用search函数来跟踪这些变量,并查看它们是否被传递给接收器。当发现一个接收器正在被分配来自源的数据时,可以使用调试器检查该值,看看是否能够成功地提供XSS攻击。DOM型XSS漏洞挖掘3、利用不同的源和接收器利用DOMXSS。如果存在一个数据可以从源端传播到接收端的可实现路径,那么网站就容易受到DOM型XSS攻击。不同的源和接收器具有不同的属性和行为,常见的有:document.write接收器对script元素有效,简单payload如下:document.write('...<script>alert(document.domain)</script>...');浏览器的innerHTML接收器都不会接受script元素,也不会接受svgonload事件。可以使用其他元素,如img或iframe。onload和onerror等事件处理可以与这些元素一起使用。例如:element.innerHTML='...<imgsrc=1onerror=alert(document.domain)>...‘DOM型XSS漏洞挖掘如果使用了像jQuery这样的JavaScript库,注意那些可以改变页面上DOM元素的接收器。例如,jQuery中的attr()函数可以改变DOM元素的属性。如果数据是从用户控制的源(如URL)读取的,然后传递给attr()函数,则可以操作URL值,发送导致XSS。$(function(){$('#backLink').attr("href",(newURLSearchParams(window.location.search)).get('returnUrl'));});通过修改URL来利用location.search源包含一个恶意的JavaScriptURL。当页面的JavaScript将这个恶意URL应用到后退接的href,点击后退链接将执行:?returnUrl=javascript:alert(document.domain)DOM型XSS漏洞挖掘4、DOMXSS结合反射和存储数据。纯基于dom的漏洞自包含在单个页面中。网站经常在服务器的HTML响应中返回URL参数。这通常与普通XSS相关,但它也可能导致所谓的反射+DOM漏洞,在反射+DOM漏洞中,服务器处理来自请求的数据,并将数据回显到响应中。所反射的数据可以放在JavaScript字符串中,或者DOM中的数据项中,比如表单字段。页面上的脚本然后以不安全的方式处理反射的数据,最终将其写入一个危险的接收器。eval('vardata="reflectedstring"');DOM型XSS漏洞挖掘网站也可以将数据存储在服务器上,并在其他地方反射出来。在存储+DOM漏洞中,服务器从一个请求接收数据,存储数据,然后在随后的响应中包含这些数据。之后响应中的脚本包含接收器,然后该接收器以不安全的方式处理数据。element.innerHTML=comment.authorDOM型XSS漏洞挖掘以下是一些可能导致DOM-XSS漏洞的主要接收器:document.write()document.writeln()document.domainelement.innerHTMLelement.outerHTMLelement.insertAdjacentHTMLelement.onevent哪些接收器会导致DOM-XSS漏洞以下jQuery函数也是可能导致DOM-XSS漏洞的主要接收器:add()after()append()animate()insertAfter()insertBefore()before()html()prepend()replaceAll()replaceWith()wrap()wrapInner()wrapAll()has()constructor()init()index()jQuery.parseHTML()$.parseHTML()哪些接收器会导致DOM-XSS漏洞被攻击对象的不同:反射型XSS的被攻击对象一般是攻击者去寻找的,而存储型XSS是广撒网的方式或者指定的方式,就是攻击者将存储型XSS放在一些有XSS漏洞的网站上,只要有用户访问这个链接就会中招,而攻击者也可以寻找被攻击对象,DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。解析位置不同:反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!三种XSS区别存储时间不同:反射型XSS是既有即用,没有持久性,而存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM型XSS和反射型差不多。允许输入点的不同:一般情况下,反射型XSS在搜索框或者是页面跳转这些地方,而存储型XSS一般是留言或者用户存储的地方,而DOM是在DOM位置上,不取决于输入环境上。三种XSS区别目录/CONTENTSXSS攻击原理XSS攻击分类XSS攻击防御XSS攻击实践在某些情况下,防止跨站点脚本编写是微不足道的,但根据应用程序的复杂性及其处理用户可控数据的方式,可能会更加困难。一般来说,有效防止XSS漏洞很可能涉及以下措施的组合:·1.到达时过滤输入。在收到用户输入时,根据预期或有效输入尽可能严格地进行过滤。·2.对输出的数据进行编码。在HTTP响应中输出用户可控数据时,对输出进行编码以防止其被解释为活动内容。根据输出上下文,这可能需要应用HTML、URL、JavaScript和CSS编码的组合。XSS攻击防御·3.使用适当的响应头。为了防止不打算包含任何HTML或JavaScript的HTTP响应中的XSS,您可以使用Content-Type和X-Content-Type-Options标头来确保浏览器以您想要的方式解释响应。·4.内容安全政策。作为最后一道防线,您可以使用内容安全策略(CSP)来降低仍然发生的任何XSS漏洞的严重性。XSS攻击防御到达时验证输入:·如果用户提交的URL将在响应中返回,则验证它是否以安全协议(例如HTTP和HTTPS)开头。否则,有人可能会使用javascript或之类的有害协议来利用您的站点data。·如果用户提供了一个预期为数字的值,则验证该值是否实际包含一个整数。·验证输入只包含一组预期的字符。理想情况下,输入验证应该通过阻止无效输入来工作。另一种尝试清除无效输入以使其有效的替代方法更容易出错,应尽可能避免。XSS攻击防御对输出的数据进行编码:编码应该在用户可控数据写入页面之前直接应用。例如,JavaScript字符串中的值需要与HTML上下文中的值不同的转义类型。在HTML上下文中,您应该将非白名单值转换为HTML实体:<转换为:<>转换为:>在JavaScript字符串上下文中,非字母数字值应该是Unicode转义的:<转换为:\u003c>转换为:\u003eXSS攻击防御有时您需要以正确的顺序应用多层编码。例如,要安全地将用户输入嵌入到事件处理程序中,您需要处理JavaScript上下文和HTML上下文。所以你需要先对输入进行Unicode转义,然后对它进行HTML编码:<ahref="#"onclick="x='Thisstringneedstwolayersofescaping'">test</a>XSS攻击防御黑名单与白名单:输入验证通常应使用白名单而不是黑名单。例如,不要尝试列出所有有害协议(javascript、data等),只需列出安全协议(HTTP、HTTPS)并禁止任何不在列表中的内容。这将确保您的防御在新的有害协议出现时不会中断,并使其不易受到试图混淆无效值以逃避黑名单的攻击。XSS攻击防御使用模板引擎防止XSS:许多现代网站使用服务器端模板引擎(如Twig和Freemarker)在HTML中嵌入动态内容。例如,在Twig中,您可以使用e()过滤器,并使用定义上下文的参数:

{{user.firstname|e('html')}}其他一些模板引擎,例如Jinja和React,默认情况下会转义动态内容,这有效地防止了大多数XSS的发生。XSS攻击防御PHP中防范XSS:在PHP中有一个内置函数来编码实体,称为htmlentities.在HTML上下文中时,您应该调用此函数来转义您的输入。应使用三个参数调用该函数:您的输入字符串。ENT_QUOTES,这是一个标志,指定所有引号都应该被编码。字符集,在大多数情况下应该是UTF-8。XSS攻击防御在JavaScript中防止XSS:要在JavaScript中转义HTML上下文中的用户输入,您需要自己的HTML编码器,因为JavaScript不提供API来编码HTML。下面是一些将字符串转换为HTML实体的示例JavaScript代码:functionhtmlEncode(str){returnString(str).replace(/[^\w.]/gi,function(c){return'&#'+c.charCodeAt(0)+';';});}然后使用此函数:<script>document.body.innerHTML=htmlEncode(untrustedValue)</script>XSS攻击防御在JavaScript中防止XSS:如果您的输入在JavaScript字符串中,则需要一个执行Unicode转义的编码器。这是一个示例Unicode编码器:functionjsEscape(str){returnString(str).replace(/[^\w.]/gi,function(c){return'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4);});}然后使用此函数:<script>document.write('<script>x="'+jsEscape(untrustedValue)+'";<\/script>')</script>XSS攻击防御目录/CONTENTSXSS攻击原理XSS攻击分类XSS攻击防御XSS攻击实践XSS攻击中反射型XSS漏洞攻击:有个搜索框可以进行搜索功能,分析发现搜索框的form表达是用GET方法获取用户的输入。XSS攻击实践XSS攻击中反射型XSS漏洞攻击:构造XSS漏洞的测试payload:<script>alert(/xss/)</script>进行测试,代码被成功执行。XSS攻击实践XSS攻击中存储型XSS漏洞攻击:有个留言板功能可对网站进行留言评论XSS攻击实践XSS攻击中存储型XSS漏洞攻击:在Comment输入框构造XSS漏洞测试payload:<script>al

温馨提示

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

评论

0/150

提交评论