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

目录

一、查找并利用XSS漏洞

1.1、简介:

二、查找并利用反射型XSS漏洞

2.1、简介:

2.2、确认用户输入的反射

2.3、测试引入脚本的反射

标签属性值

JavaScript字符串

包含URL的特性

过程:

2.4、探查防御性过滤


一、查找并利用XSS漏洞

1.1、简介:

确定XSS漏洞的基本方法是使用下面这个概念验证攻击字符串

"><script>alert(document.cookie)</script>

这个字符串被提交给每个应用程序页面中的每一个参数;同时攻击者监控它的响应,看其中是否出现相同的字符串。如果发现攻击字符串按原样出现在响应中,几乎可以肯定应用程序存在XSS漏洞。

如果仅仅是为了尽可能快地确定应用程序中存在的某种XSS漏洞,以向其他应用程序用户实施攻击,那么这个基本方法可能是最为有效的方法,因为它可以实现高度自动化, 而且很少生成错误警报。但如果是对应用程序进行复杂的测试,从而确定尽可能多的漏洞,那么在应用基本方法的同时,还需要组合使用更加复杂的技巧


几种情况下, 通过基本的检测方法可能无法确定应用程序中存在的XSS漏洞:

1、许多应用程序实施基于黑名单的初步过滤, 试图阻止XSS攻击。通常, 这些过滤在请求参数中寻找<script>之类的表达式,并采取一些防御措施, 如删除或编码表达式, 或者完全阻止这类请求。基本检测方法中常用的攻击字符串往往被这些过滤阻止。但仅仅因为一个常见的攻击字符串被阻止,并不能证明一个可利用的漏洞不存在。在有些情况下, 不使用<script>标签, 甚至不使用"< >/ 这些常被过滤掉的字符, 也可以利用XSS漏洞

2、许多应用程序实施的防XSS过滤存在缺陷,可以通过各种方法避开。如假设在处理用户输入前,应用程序删除其中出现的所有<script>标签。这意味着基本方法中使用的攻击字符串将不会在应用程序的响应中返回。但可轻易绕开过滤, 成功利用XSS漏洞


在服务器的响应中, 输入的字符串返回前,可能经过净化、编码或其他形式的修改,因而还不足以实现对XSS漏洞的利用。这时提交一个特殊字符串并检查它是否在服务器的响应中出现的基本检测方法将无法成功发现漏洞。

当利用基于DOM的XSS漏洞时,攻击有效载荷并不在服务器的响应中返回,而是保存在浏览器DOM中,并可被客户端JavaScript访问。在这种情况下,提交一个特殊字符中并检查它是否在服务器的响应中出现的基本检测方法将无法成功发现漏洞



二、查找并利用反射型XSS漏洞

2.1、简介:

系统性地检查在解析应用程序所以输入点步骤:

1、在每个进入点提交一个良性字母字符串

2、确定此字符串“反射” 在应用程序响应中的所有位置

3、对于每个反射, 确定显示反射型数据时的语法上下文

4、提交针对反射的语法上下文而修改的数据, 尝试在响应中引入任意脚本

5、如果反射型数据被阻止或净化,导致脚本无法执行,则尝试了解并避开应用程序的防御性过滤

2.2、确认用户输入的反射

1、选择任意一个字符串, 该字符串不曾出现在应用程序的任何地方, 而且其中仅包含字母字符, 因此不可能受到针对XSS过滤的影响

提交字符串, 以其作为每个页面的每一个参数, 且每次只针对一个参数

2、监控应用程序的响应,看其中是否出现同一个字符串。记下参数值被复制到应用程序响应中的每一个参数。这些参数不一定容易受到攻击, 但需要对它们进行深入分析

3、测试所有GET与POST请求,检查URL查询字符串与消息主体中的每一个参数。虽然有少数XSS漏洞传送机制只能通过一个POST请求触发,但仍有可能对漏洞加以利用

4、一且在POST请求中发现xss, 应使用Bp中的 "更改请求方法" 选项确定是否可以通过GET请求实施相同的攻击

5、除标准的请求参数外,还应该检测HTTP请求消息头内容被应用程序处理的每一种情况。有一种常见的XSS漏洞出现在错误消息中,Referer与User-Agent消息头之类的数据项被复制到请息的内容中,这些消息头是传送反射型XSS攻击的有效工具, 因为攻击者可以使用一个Flash对象诱使受害者提出一个包含任意HTTP消息头的请求

2.3、测试引入脚本的反射

渗透测试员必须手动检查已确定的每一个反射型输入实例, 以核实其是否确实可被利用。在响应中包含反射型数据的每个位置,都需要确认该数据的语法特点。必须找到某种修改输入的方法, 以使在将输入复制到应用程序响应中的相同位置时, 任何脚本都能够得以执行


标签属性值

页面中:<input type="text" name=" " value=" ">

终止双引号, 结束标签, 引入JavaScript脚本(如"><script>alert(1)</script>)

绕过输入过滤,使用触发型事件(如"οnfοcus="alert(1))


JavaScript字符串

页面中:<script>var a =' '; var b = 123456;……</script>

终止单引号,用分号终止整个语句,直接处理想要执行的JavaScript(如';alert(1); var foo=')

为阻止JavaScript解释器出现错误,声明一个变量,使单引号后面的代码终止(或者使用//结束)


包含URL的特性

页面中:<a href="URL">说明</a>

直接插入到href属性中,属性可能包含一个使用javascript:协议的URL(如javascript:alerrt(1))

输入将反射到标签属性中,还可以注人一个事件处理器(如"οnclick="javascript:alerrt(1))


过程:

对于在前面步骤中记下的每一个潜在的XSS漏洞, 采取:

1、检查HTML源代码, 确定受控制的字符串的位置

2、如果字符串出现在几个位置, 应将每个位置当做一个潜在的漏洞, 分别进行分析

3、根据用户控制的字符串在HTML中的位置, 确定需要如何对其进行修改以使任意JavaScript得以执行(有大量方法可成为传送攻击的有效工具)

4、向应用程序提交设计的字符串, 测试是否有用。如果设计的字符串仍然按原样返回,表示应用程序存在XSS漏洞。使用一段概念验证脚本显示一个警报对话框, 重复检查语法是否正确, 并确定响应显示时,对话框是否出现在浏览器中

2.4、探查防御性过滤

通常情况下最初提交的攻击字符串并不会被服务器按原样返回, 因而无法成功执行注入的JavaScript。接下来应确定服务器对输入进行了哪些处理:

1、应用程序或Web应用程序防火墙保护的应用程序发现一个攻击签名完全阻止了输入

2、应用程序已经接受了输入, 但对攻击字符串进行了某种净化或编码

3、应用程序把攻击字符串截短至某个固定的最大长度


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑色地带(崛起)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值