了解跨站脚本(XSS)攻击

201 阅读4分钟

了解跨站脚本攻击

跨站脚本(XSS)是一种攻击网站用户而非服务器本身的网络应用程序漏洞。XSS允许攻击者冒充易受攻击的用户,进行任何活动或使用该用户可以访问的任何数据。

开放网络应用安全项目发布了OWASP十大报告。它是一份最严重的网络应用程序安全问题的清单。在2017年的OWASP Top 10中,XSS是第二大最普遍的问题,在大约三分之二的应用程序中发现。

在这篇文章中,我们将详细介绍XSS攻击,其影响,以及如何缓解它们。

免责声明:本文仅用于教育目的。

前提条件

  • HTML和Javascript的基本知识

XSS是如何工作的

跨站脚本攻击是通过欺骗易受影响的网络应用程序,使其向用户返回恶意的Javascript来完成的。当恶意代码在受害者的浏览器内执行时,攻击者通过收集以下内容,完全控制受害者与应用程序的互动方式。

  • 会话cookie
  • 用户凭证
  • 代币
  • 秘密

其他信息中。

xss

XSS攻击

首先,我们需要找到一个有漏洞的网站。由于我们不能在互联网上随意测试网站,我们将在一个故意有漏洞的网站上进行这种攻击。我们将利用Acunetix的一个在线易受攻击的Web应用程序。为了使用这个易受攻击的网络应用程序,我们访问Acunetix易受攻击的应用程序

acunetix

下一步是找到一个输入字段,在那里我们可以粘贴我们的脚本。它可以是一个用户名,一个搜索框,一个文本区域,或任何其他类型的输入域。我们的易受攻击的网站有一个搜索框,非常完美现在,让我们给它一些简单的HTML代码,看看会发生什么。在搜索框中输入以下HTML代码,然后点击开始按钮。

<u>test</u>
<!-- the HTML u tag or underline tag is used to give a word an underline in HTML -->

html

从上面的截图中,我们可以看到,test 这个词是下划线。很完美!我们在页面上得到了一个反映。我们在页面上得到了一个反映。通过查看应用程序的源代码,我们也可以看到它是如何反映的。

view-page source

现在我们来看看XSS。最简单的XSS有效载荷是脚本标签。一个脚本标签可以引用或嵌入JavaScript代码。最常见的XSS有效载荷之一是在一个脚本标签中使用JavaScript警报函数。让我们尝试一下,在我们的Web应用程序的搜索框中输入以下有效载荷。

<script>alert(1)</script>

alert

我们注意到,当我们在输入XSS有效载荷后,一点击前进按钮,我们就会得到一个显示有1 的警报框,这意味着我们的有效载荷成功了。我们只是在JavaScript中使用了alert函数来显示1。

XSS的类型

反射式XSS

这是一种一次性的XSS。恶意脚本是受害者在线应用程序请求的一部分,经常反映在应用程序的响应中。

反射式XSS最常被用于有针对性的攻击,即黑客发送带有恶意脚本的URL的钓鱼邮件。攻击者甚至可以在一个公共网站上发布一个链接,欺骗用户点击它。

存储的XSS

也被称为Persistent XSS ,有效载荷被保存在服务器上,可以由受害者触发,而不需要应用程序之外的任何用户互动。这种类型的XSS发生在服务器将你提供的输入保存在服务器的某个地方(即数据库或缓存服务器)。

存储的XSS例子

让我们回到我们易受攻击的Web应用程序。我们点击Your profile ,这时我们看到了一个登录页面。

profile-login

现在让我们用这些默认的凭证来登录。

username: test
password: test

logged in

现在我们已经登录了,让我们在名字栏里注入我们的有效载荷,然后点击更新按钮来更新我们的资料。

<script>alert(1)</script>

stored

正如我们所看到的,我们得到了一个警报框。这是因为有效载荷被保存在姓名字段中,而且每次加载页面时都会触发警报框。

DOM XSS

受害者的浏览器直接受到DOM XSS的影响,这是一种本地攻击。文档对象模型(DOM)是浏览器操纵和展示网页的API,在这种攻击中被使用,而不是恶意内容被传递到服务器。

XSS的影响

通过XSS,攻击者可以做以下事情。

  • 捕获用户凭证
  • 玷污网站
  • 冒充用户
  • 进行用户操作

如何减轻XSS攻击

你可以通过以下方式防止XSS攻击

  • 使用适当的响应头
  • 对用户输入进行过滤
  • 对输出的数据进行编码
  • 对HTML进行净化处理

总结

XSS是一种常见的网络漏洞。网络漏洞扫描器,如burp套件,可以用来对网络应用进行XSS测试。