在本节中,将解释下什么是反射型跨站脚本,描述反射型XSS攻击的影响,并说明如何找到反射型XSS漏洞。
什么是反射型XSS?
当应用程序接收到HTTP请求中的数据并以不安全的方式将这些数据包含在即时响应中时就会出现反射型XSS。
假设一个网站有个搜索功能,它在URL参数中接收用户提供的搜索词:
应用程序在对此URL的响应中回显提供的搜索词:
假设应用程序不执行任何其他数据处理,攻击者可以构造如下攻击:
这个URL产生如下响应:
如果应用程序的另一个用户请求攻击者的URL,那么攻击者提供的脚本将在受害者用户与应用程序会话的过程中在浏览器中执行。
场景试验-反射型XSS漏洞的利用:
https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded
场景说明:
这个试验场景在搜索功能中包含一个简单的反射型跨站脚本漏洞。
试验目的:
要完成这个试验,需要执行alert()函数来进行跨站脚本攻击。
攻击过程:
①这个试验很简单,打开网站页面后,把下面这条语句复制到"Search"框中
②点击搜索后,会出现弹框,即可完成试验
反射型XSS攻击的影响
如果攻击者可以控制在受害者浏览器中执行的脚本,那么他们通常可以完全危害该用户,攻击者可以:
●在应用程序中执行用户可以执行的任何操作。
●查看用户能够查看的任何信息。
●修改用户能够修改的任何信息。
●发起与其他应用程序用户的交互,包括恶意攻击。
攻击者可以通过多种方式诱使受害者用户发出他们控制的请求以进行反射型XSS攻击。
其中包括将链接放置在攻击者控制的网站上,或放置在允许生成内容的另一个网站上,或是通过在电子邮件、推文或其他消息中发送链接。
攻击者可以直接针对已知用户,也可以不分青红皂白地攻击应用程序的任何用户。
但攻击需要外部传递机制意味着反射型XSS的影响通常不如存储型XSS严重,后者可以在易受攻击的应用程序本身内传递自包含攻击。
不同上下文中的反射型XSS
有许多不同种类的反射型跨站脚本,应用程序响应中反射数据的位置决定了利用它需要什么类型的Payload,并且可能会影响到漏洞所造成的危害级别。
另外,如果应用程序在提交数据时对其进行验证或其他处理,这通常会影响到需要什么样的XSS的Payload。
如何查找和测试反射型XSS漏洞
手动测试反射型XSS漏洞的步骤:
●测试每个入口点
分别测试应用程序HTTP请求中数据的每个入口点,这包括URL查询字符串和消息正文中的参数或其他数据,以及URL文件路径,还包括HTTP标头,但是只能通过某些HTTP标头触发类似XSS的行为在实际环境中可能无法被利用。
●提交随机字母数字值
对于每个入口点,提交一个唯一的随机值并确定该值是否反应在响应中。这个值应设计为能够经受大多数输入验证,因此需要相当短且仅包含字母数字字符,但它又需要足够长,以使响应中的不会发生意外匹配,一般大约8个字符的随机字母数字值是最理想的。
●确定反射上下文
对于响应中反映随机值的每个位置,确定其上下文。这可能在HTML标记之间的文本中,也可能被引用的标记属性中,或是在JavaScript字符串中等。
●测试候选的Payload
根据反射的上下文,测试一个初始候选的Payload,如果它在响应中未修改地反映,它将触发JavaScript执行。测试Payload最简单方法是将请求发送到Burp Repeater,修改请求以插入候选Payload,发出请求,然后查看响应以确认Payload是否有效。一种有效的工作方式是将原始随机值留在请求中,并将候选Payload放在其之前货之后,然后将随机值设置为Burp Repeater的响应视图中的搜索词,Burp将突出显示搜索词出现的每个位置,方便快速定位反射。
●测试替代Payload
如果候选的Payload被应用程序修改或完全阻止,那么就需要测试替代Payload和其他技术,这些Payload和技术可能会根据反射的上下文和正在执行的输入验证类型提供有效的XSS攻击。
●在浏览器中测试攻击
最后,如果成功找到可以使用的Payload,则将攻击转移到真正的浏览器(通过将URL粘贴到地址栏中)。通常,最好执行一些简单的JavaScript,例如alert(document.domain),如果攻击成功,将在浏览器中触发可见的弹窗。
有关反射型跨站脚本的常见问题
●反射型XSS和存储型XSS有什么区别?
当应用程序从HTTP请求中获取一些输入并以不安全的方式将该输入嵌入到即时响应中时,就会出现反射型XSS。使用存储型XSS,应用程序改为存储输入并以不安全的方式将其嵌入到稍后的响应中。
●反射型XSS和Self-XSS有什么区别?
Self-XSS涉及与常规反射XSS类似的应用程序行为,但是它不能通过精心设计的URL或跨域请求以正常方式触发。相反,只有当受害者自己从浏览器提交XSS的Payload时,才会触发该漏洞。
提供Self-XSS攻击通常涉及对受害者进行社会工程,将一些攻击者提供的输入粘贴到他们的浏览器中。因此它通常被认为是一个低影响的漏洞。
SQL注入攻击-检索隐藏的数据
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):跨站脚本攻击XSS-反射型XSS
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论