【web-攻击用户】(9.1.4)查找并利用XSS漏洞--反射型

目录

查找并利用反射型XSS漏洞

2.8、避开净化

简述:

2.9、突破长度限制

方法一:缩短

方法二:

方法三:

2.10、实施有效的XSS攻击

简述:

将攻击扩展到其他应用权序页面

修改请求方法

攻击浏览器XSS过滤器


查找并利用反射型XSS漏洞

2.8、避开净化

简述:

1、应用程序对攻击字符串执行某种净化或编码,使其变得无害,防止它执行JavaScript

2、对传送攻击所需的某些关键字符进行HTML编码(因此<变成&lt, >变成&gt)是应用程序实行数据净化最常见的做法。其他情况下,应用程序可能会完全删除某些字符或表达式,试图清除输入中的恶意内容

3、首先应查明应用程序净化哪些字符与表达式,以及是否仍然可通过剩下的字符实施攻击。例如如果输入的数据被直接插入到现有的一段脚本中,那么可能不需要使用任何HTML标签字符。或如果应用程序从输入中删除<script>标签,则可以通过适当的事件处理程序使用其他标签。这时应考虑采用用于避开基于签名的过滤的各种技巧, 包括多层编码、空字节、非标准语法以及经过模糊处理的脚本代码。通过各种方式修改输入,就可以设计出不包含任何被过滤净化的字符或表达式的攻击, 因而能够成功避开过滤

4、应检查过滤是否以递归方式执行净化,如果过滤对输入执行多个净化步骤, 则应检查是否可以对这些步骤之间的顺序或相互关系加以利用

5、当在现有的一段脚本中注入一个引用字符串时, 应用程序经许常注入的引号字符前插入反斜线字符。应用程序这样做是为了对引号进行转义,阻止攻击者终止字符串或注入任意脚本。在这种情况下,应该始终核实反斜线字符本身是否被转义。如果其未被转义, 那么这种过滤就可以轻易避开(如果能够控制的foo值,就可实现各种测试)

6、即使攻击者能够控制一段脚本, 但由于应用程序对单引号或双引号进行了转义, 他也无法使用它们, 但可以使用String.fromCharCode技巧, 不用分隔符创建字符串

2.9、突破长度限制

当应用程序把输入截短为一个固定的最大长度时,有三种建立攻击字符串的方法。

方法一:缩短

相当明显的方法是尝试使用最短可能长度的JavaScriptAPI,删除那些通常包含在内但并不完全必要的字符,缩短攻击有效载荷(如:把用户的cookie传送至主机名-服务器;或者将标签从主机名-服务器加载并执行一段脚本)

JavaScript packer(网上的在线工具)

删除不必要的空白符, 尽可能地缩短某一段脚本,还可将脚本转换成单独一行, 方便插入到一个请求参数中


方法二:

将一个攻击有效载荷分布到几个不同的位置,用户控制的输入在这里插入到同一个返回页面中

假设应以用程序对每个字段实施了长度限制, 以阻止在其中插入有效的攻击字符串。但攻击者仍然可以使用URL链接,将一段脚本分布到他所控制的三个位置,从而传送一个有效的攻击字符串

(不需要的部分用注释掉,进行混淆)


方法三:

1、在某些情况下非常有效的突破长度限制:将一个反射型XSS漏洞转换成一个基于DOM的漏洞。如在最初的反射型XSS漏洞中, 如果应用程序对复制到返回页面中的message参数设置长度限制, 那么就可以注入脚本,对当前URL中的片断字符串(fragment string)求值

<script>eval(location.hash.slice(1))</script>

2、通过在易于受到反射型XSS攻击的参数中注入这段脚本, 可以在生成的页面中造成一个基于DOM的XSS漏洞,从而执行位于片断字符串中的另一段脚本,它不受应用程序过滤的影响,可为任意长度。

3、例如http://xxx.com/error/5/Error.ashx?message=

<script>eval(location.hash.substr(1))</script>#alert('……')

或者

<script>eval(unescape(location))</script>#%0Aalert('……')

整个URL经过URL解码, 然后传递给eval命令。整个URL将作为有效的JavaScript执行,因为http:协议前缀作为代码标签,协议前缀后面的//则作为单行注释,%0A经过URL编码后将变为换行符, 表示结束注释

2.10、实施有效的XSS攻击

简述:

在探测潜在的XSS漏洞,以了解并避开应用程序的过滤机制时,你往往是在浏览器以外进行测试, 也就是使用Bp之类的工具重复发送相同的请求,每次对请求进行略微修改,然后测试这种修改对响应的影响。某些情况下,在以这种方式创建概念验证攻击后, 可能还需要完成任务才能针对其他应用程序用户实施有效攻击。例如其他用户的请求中的XSS进入点(如cookie或Referer消息头)可能难以控制;或者目标用户可能使用的是内置了防范反射型XSS攻击功能的浏览器


将攻击扩展到其他应用权序页面

1、假如所确定的漏洞位于不感兴趣的应用程序区域, 只影响未经过验证的用户, 而其他区域则包含真正敏感的数据和希望攻破的功能

2、通常设计一个可以通过应用程序的某个区域中的XSS漏洞传送,并且在用户的浏览器中持续存在的攻击有效载荷,就可以攻破同一个域中的目标数据或功能。

要实现上述目的,一个简单的办法是创建一个包含整个浏览器窗口的iframe, 然后在该iframe中重新加载当前页面。在用户浏览站点并登录到通过验证的区域时,注入的脚本将始终在顶层窗口中运行,就能够钩住子iframe中的导航事件和表单提交,监视iframe中显示的所有响应内容, 当然也能够在适当的时候劫待用户的会话。在支持HTML5的浏览器中, 当用户在页面间移动时, 脚本甚至可以使用window.history.pushState()函数在地址栏中设置适当的URL


修改请求方法

1、假如确定的XSS漏洞使用POST请求,但实施攻击的最便捷的方法需要使用GET请求,例如提交一个论坛贴子, 其中包含针对易受攻击的URL的IMG标签。在这种情况下, 有必要进行判定, 如果将POST请求转换为GET请求,应用程序是否对请求进行相同的处理。许多应用程序接受以上任何一种请求。在BP中,可以使用上下文菜单中的”更改请求方法” 命令将任何清求在GET与POST方法之间切换

2、有时把使用GET方法的攻击转换成使用POST方法的攻击可能会避开某些过滤。许多应用程序在整个应用程序中执行某种常规过滤,阻止已知的攻击字符串。如果一个应用程序希望收到使用GET方法的请求,它可能只对URL查询字符串执行这种过滤,将请求转换为使用POST方法就可

3、传送跨域XML请求

使用HTML表单(将enctype属性设置为text/plain)可以在HTTP请求主体中跨域传送几乎任何数据,将告诉浏览器按以下方式处理表单参数:在请求中隔行传送每个参数;使用等号分隔每个参数的名称和值;不对参数名称或值进行任何URL编码;

上述行为意味着,只要数据中至少包含一个等号,就可以在消息主体中传送任意数据。需要将数据分隔成两块,等号前和等号后,再将第一块数据放在参数名称中,将第二块数据放在参数值中。这样浏览器在构建请求时,它会传送以等号分隔的两块数据, 因而实际上构建了所需的数据

由于XM以遠始XML标签的version属性中始终至少包含一个等号,可以在请求主体中使用跨域传送任意数据

<……name='<?xml version='

value=' "1.0"?><data><param>foo<param></data>'>

要在param参数的值中包含常用的攻击字符,如标签尖括号,需要在XML请求中对这些字符进行HTML编码。因此在生成该请求的HTML表单中,需要对它们进行双重HTML编码

在使用这种技巧时,唯一需要注意的地方是, 生成的请求将包含以下消息头

content-Type:text/plain

正常情况下,根据生成请求的具体方式,最初的请求本应包含一个不同的Content-Type消息头。如果应用程序接受提供的Content-Type消息头并正常处理消息主体,则在设计有效的XSS攻击时就可以使用这种技巧。如果由于Content-Type消息头已修改,应用程序无法正常处理请求, 则可能没有办法跨域传送适当的请求来触发类似于XSS的行为

4、从XML响应中执行JavaScript

在尝试利用非标准内容中的类似于XSS的行为时,需要克服的第二个障碍是找到一种操纵响应的方法,使其在由浏览器直接处理时能够执行你的脚本。如果响应中包含错误的Content-Type消息头, 或根本不包含Content-Type消息头或者如果输入在响应主体的开始部分就已反射, 则可以轻松克服这种障碍

但响应通常都包含准确描述应用程序返回的数据类型的Content-Type消息头。此外输入大多是在响应的中间部分反射。同时在此位置之前和之后的响应内容包含的数据遵循指定内容类型的相关规范。不同浏览器解析内容的方式各不相同。一些浏览器完全信任Content-Type消息头,一些浏览器则会检查内容本身,并在具体的类型有所不同时覆盖指定的类型。但这种情况下,无论浏览器如何处理内容, 它都不大可能将响应作为HTML处理

如果可以构建能够成功执行脚本的响应,往往需要利用所注入的内容类型的特定语法特性。对于XML而言,可以使用XML标记定义一个映射为XHTML的新命名空间, 并使浏览器将该命名空间解析为HTML,从而达到执行脚本的目的(如果响应由浏览器直接处理, 而不是由通常处理响应的原始应用程序组件处理时,此攻击将取得成功)


攻击浏览器XSS过滤器

1、在利用几乎任何反射型XSS漏洞时总是会遇到一个障碍,即各种浏览器功能都针对XSS攻击为用户提供了保护,浏览器使用XSS过滤器(但可能存在误报等原因不被默认使用), 或者通过插件的形式提供类似的功能,这些过滤器的工作方式基本类似,它们被动监视请求和响应,并使用各种规则来确定正在进行的潜在XSS攻击,一且确定潜在攻击, 就修改响应的某些部分来阻止这些攻击

2、如前所述,如果可以通过任何广泛使用的浏览器来利用XSS条件,就应将这些条件视为漏洞,且某些浏览器提供XSS过滤器并不意味着不需要修复XSS漏洞,在某些情况下,攻击者可能恰恰需要通过包含XSS过滤器的浏览器来利用某个漏洞,用于避开XSS过滤器的方法本身也值得关注。在某些情况下,甚至可以利用这些方法来实施通过别的方法无法实施的其他攻击

3、利用过滤器/组件的核心功能,可以找到一些透开该过滤器的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值