1. 网络安全学会
  2. 跨站脚本
  3. 反射

脚本漏洞

在本节中,我们将解释反射的跨站点脚本,描述反射的XSS攻击的影响,并阐明如何查找反射的XSS漏洞。

什么是反射的跨站点脚本?

当应用程序在HTTP请求中接收数据并将该数据以不安全的方式包含在即时响应中时,就会出现反射的跨站点脚本(或XSS)。

假设网站具有搜索功能,该功能通过URL参数接收用户提供的搜索词:

https://insecure-website.com/search?term=gift

该应用程序在对此URL的响应中回显提供的搜索词:

<p>You searched for: gift</p>

假设应用程序不对数据进行任何其他处理,则攻击者可以进行如下攻击:

https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>

该URL导致以下响应:

<p>You searched for: <script>/* Bad stuff here... */</script></p>

如果应用程序的另一个用户请求攻击者的URL,则攻击者提供的脚本将在受害用户的浏览器与应用程序会话的上下文中执行。

反射的XSS攻击的影响

如果攻击者可以控制在受害者浏览器中执行的脚本,则他们通常可以完全破坏该用户。 除其他外,攻击者可以:

  • 在用户可以执行的应用程序中执行任何操作。
  • 查看用户能够查看的任何信息。
  • 修改用户能够修改的任何信息。
  • 启动与其他应用程序用户的交互,包括恶意攻击,这些交互似乎源自最初的受害者用户。

攻击者可以通过多种方法诱使受害用户发出由他们控制的请求,以传递反射的XSS攻击。 其中包括在攻击者控制的网站上放置链接,或在允许生成内容的另一个网站上放置链接,或者通过在电子邮件,推文或其他消息中发送链接来放置链接。 攻击可能直接针对已知用户,也可能是针对应用程序的任何用户的不加选择的攻击:

对于攻击的外部传递机制的需求意味着,反射的XSS的影响通常不如存储的XSS严重,存储的XSS可以在易受攻击的应用程序内部传递独立的攻击。

在不同情况下反射的XSS

反映的跨站点脚本有许多不同的种类。 反射数据在应用程序响应中的位置决定了利用哪种类型的有效负载,也可能会影响漏洞的影响。

另外,如果应用程序在反映提交的数据之前对其进行了任何验证或其他处理,则通常会影响所需的XSS有效负载类型。

如何查找和测试反射的XSS漏洞

使用Burp Suite的web漏洞扫描程序可以快速、可靠地找到绝大多数反映的跨站点脚本漏洞。

手动测试反射的XSS漏洞包括以下步骤:

  • 测试每个入口点。 对每个入口点分别测试应用程序的HTTP请求中的数据。 这包括URL查询字符串和消息正文以及URL文件路径中的参数或其他数据。 它也包括HTTP标头,尽管实际上只能通过某些HTTP标头触发的类似XSS的行为可能无法利用。
  • 提交随机的字母数字值。 对于每个入口点,请提交唯一的随机值,然后确定该值是否反映在响应中。 该值应设计为可以经受大多数输入验证,因此必须足够短并且仅包含字母数字字符。 但是它需要足够长的时间才能使响应中的意外匹配变得非常不可能。 通常理想的情况是,大约8个字符的随机字母数字值。 您可以将Burp Intruder的号码有效载荷[https://portswigger.net/burp/documentation/desktop/tools/intruder/payloads/types#numbers]与随机生成的十六进制值一起使用,以生成合适的随机值。 您可以使用Burp Intruder的grep有效负载选项自动标记包含提交值的响应。
  • 确定反射环境。 对于响应中反映随机值的每个位置,请确定其上下文。 这可能是在HTML标签之间的文本中,可能在引号中的标签属性中,在JavaScript字符串中等。
  • 测试候选负载。 根据反射的上下文,测试初始的候选XSS有效载荷,如果该响应在未修改的情况下被反射,它将触发JavaScript执行。 测试有效负载的最简单方法是将请求发送到Burp Repeater,修改请求以插入候选有效负载,发出请求,然后查看响应以查看有效负载是否有效。 一种有效的工作方式是将原始随机值保留在请求中,并将候选XSS有效负载放置在请求之前或之后。 然后在Burp Repeater的响应视图中将随机值设置为搜索项。 Burp将突出显示搜索词出现的每个位置,让您快速定位反射。
  • 测试替代负载。如果候选XSS有效负载被应用程序修改或完全阻止,则您将需要根据反射的环境和所执行的输入验证的类型,测试可能提供有效XSS攻击的替代有效负载和技术。 有关更多详细信息,请参见跨站点脚本上下文。
  • 在浏览器中测试攻击。 最后,如果您成功找到了在Burp Repeater中有效的有效负载,请将攻击转移到真实的浏览器中(通过将URL粘贴到地址栏中,或者通过在Burp Proxy的拦截视图中修改请求,然后查看是否注入了 JavaScript确实已执行,通常最好执行一些简单的JavaScript,例如alert(document.domain),如果攻击成功,它们会在浏览器中触发可见的弹出窗口。

有关反映的跨站点脚本的常见问题

反射的XSS和存储的XSS有什么区别? 当应用程序从HTTP请求中获取一些输入并将该输入以不安全的方式嵌入到即时响应中时,就会出现反射的XSS。 使用存储的XSS,应用程序将存储输入,并将其以不安全的方式嵌入到以后的响应中。

反射的XSS和self-XSS有什么区别? Self-XSS涉及与常规反射XSS相似的应用程序行为,但是无法通过构建的URL或跨域请求以常规方式触发它。 相反,仅当受害者自己从浏览器提交XSS有效负载时,才会触发该漏洞。 进行自我XSS攻击通常涉及对受害者进行社交工程,以将一些攻击者提供的输入粘贴到他们的浏览器中。 因此,通常认为这是一个蹩脚的、影响小的问题。

Try Burp Suite for Free

使用Burp Suite查找XSS漏洞

免费试用