【网络安全学习】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的分类。

相关推荐
@月落29 分钟前
alibaba获得店铺的所有商品 API接口
java·大数据·数据库·人工智能·学习
6230_40 分钟前
git使用“保姆级”教程1——简介及配置项设置
前端·git·学习·html·web3·学习方法·改行学it
xuan哈哈哈2 小时前
web基础—dvwa靶场(八)XSS
web安全·网络安全
李小星同志2 小时前
高级算法设计与分析 学习笔记6 B树
笔记·学习
霜晨月c2 小时前
MFC 使用细节
笔记·学习·mfc
小江湖19943 小时前
元数据保护者,Caesium压缩不丢重要信息
运维·学习·软件需求·改行学it
dot.Net安全矩阵3 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
sec0nd_3 小时前
1网络安全的基本概念
网络·安全·web安全
微刻时光4 小时前
Redis集群知识及实战
数据库·redis·笔记·学习·程序人生·缓存
网安CILLE4 小时前
2024年某大厂HW蓝队面试题分享
网络·安全·web安全