在本节中,我们将解释反射的跨站点脚本,描述反射的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有效负载类型。
使用Burp Suite的web漏洞扫描程序可以快速、可靠地找到绝大多数反映的跨站点脚本漏洞。
手动测试反射的XSS漏洞包括以下步骤:
反射的XSS和存储的XSS有什么区别? 当应用程序从HTTP请求中获取一些输入并将该输入以不安全的方式嵌入到即时响应中时,就会出现反射的XSS。 使用存储的XSS,应用程序将存储输入,并将其以不安全的方式嵌入到以后的响应中。
反射的XSS和self-XSS有什么区别? Self-XSS涉及与常规反射XSS相似的应用程序行为,但是无法通过构建的URL或跨域请求以常规方式触发它。 相反,仅当受害者自己从浏览器提交XSS有效负载时,才会触发该漏洞。 进行自我XSS攻击通常涉及对受害者进行社交工程,以将一些攻击者提供的输入粘贴到他们的浏览器中。 因此,通常认为这是一个蹩脚的、影响小的问题。