【网络安全学习】XSS跨站脚本漏洞01:基础介绍

XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。

XSS属于客户端攻击,攻击者可能会利用XSS进行跳板,并实施攻击。

1️⃣ XSS原理解析

XSS攻击是在网页中嵌入客户端恶意脚本代码(通常使用JavaScript进行脚本的编写)。

存在XSS漏洞的网站,就可以盗取用户Cookie、黑掉页面、导航到恶意网站,而攻击者需要做的仅仅是向Web页面中注入JavaScript代码。

以下是一个简单的 XSS 注入示例代码:

HTML 复制代码
<!DOCTYPE html>
<html>
<body>
  <input type="text" id="userInput">
  <button οnclick="showMessage()">提交</button>
  <div id="message"></div>
  <script>
    function showMessage() {
      var userText = document.getElementById('userInput').value;
      document.getElementById('message').innerHTML = userText;
    }
  </script>
</body>
</html>

在上述代码中,如果用户在输入框中输入 <script>alert('XSS 攻击!')</script> 并点击提交,就会触发 XSS 攻击,弹出一个警告框。

2️⃣ XSS类型

XSS主要被分为三类,分别是:反射型、存储型和DOM型。

🌟 反射型XSS

当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。这个过程就像一次反射,故称为反射型XSS,也被称为非持久性XSS。

以下是一个简单的反射型 XSS 攻击的例子:

假设存在一个网站,用户可以在搜索框中输入内容进行搜索,然后服务器会将用户输入的内容直接显示在搜索结果页面上。

攻击者构造了以下恶意的搜索输入:

<script>alert('XSS 攻击成功!')</script>

当用户输入上述恶意内容并提交搜索请求时,服务器未对输入进行适当的清理和验证,直接将其返回并显示在搜索结果页面中。浏览器会将嵌入的 <script> 标签视为有效脚本并执行其中的 alert 函数,弹出 "XSS 攻击成功!" 的提示框。

这就是一个基本的反射型 XSS 攻击示例,通过诱使用户访问包含恶意输入的特定页面,从而实现攻击。

🌟 存储型XSS

允许用户存储数据的Web应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这就是存储型XSS,也被称为持久性XSS。

存储型XSS,具有更高的隐蔽性、而且无需手动触发。

以下是常见的存储型XSS的场景:

先确认输入输出点,例如在一个留言板显示区域,确认内容的输出区域是否在标签内,如果显示的内容在属性标签内,那么XSS代码就不会被执行,如:

XML 复制代码
<input type="text" name="content" value="<script>alert('XSS攻击')</script>"/>

以上代码就是因为xss代码在value属性内,那么这个恶意代码就不会被执行,仅仅会把内容显示出来而已。

在知道了输出点之后,就可以根据相应的标签构造HTML代码来闭合,插入XSS代码​,最终在HTML文档中为:输入的代码为:""/><script>alert('XSS攻击')</script>"

XML 复制代码
<input type="text" name="content" value=""/><script>alert('XSS攻击')</script>"/>

这样就可以闭合input标签,使输出的内容不在Value属性中,从而造成XSS跨站漏洞。

🌟 DOM XSS

使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。

DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML 文档中的每个成分都是一个节点。

DOM本身就代表文档的意思,而基于DOM型的XSS是不需要与服务器端交互的,它只发生在客户端处理数据阶段。

以下是一个典型的 DOM 型 XSS 示例:

HTML 复制代码
<!DOCTYPE html>
<html>
<body>
  <input type="text" id="inputText">
  <button οnclick="showMessage()">显示消息</button>
  <script>
    function showMessage() {
      var inputValue = document.getElementById('inputText').value;
      document.getElementById('result').innerHTML = inputValue;
    }
  </script>
  <div id="result"></div>
</body>
</html>

在上述示例中,如果用户在输入框中输入**<script>alert('XSS 攻击')</script>**,然后点击"显示消息"按钮,恶意脚本就会被执行,弹出"XSS 攻击"的警告框。这是因为输入的值被直接插入到页面的 DOM 中并被解释为脚本。


🌈 以上便是XSS的原理以及常见的XSS的分类。

相关推荐
EterNity_TiMe_1 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
Hacker_LaoYi1 小时前
网络安全与加密
安全·web安全
sanguine__1 小时前
java学习-集合
学习
lxlyhwl1 小时前
【STK学习】part2-星座-目标可见性与覆盖性分析
学习
nbsaas-boot1 小时前
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
学习·chatgpt·编辑器
CV学术叫叫兽2 小时前
一站式学习:害虫识别与分类图像分割
学习·分类·数据挖掘
我们的五年2 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
一棵开花的树,枝芽无限靠近你2 小时前
【PPTist】添加PPT模版
前端·学习·编辑器·html
VertexGeek3 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust
二进制_博客3 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink