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

相关推荐
知识分享小能手2 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao5 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾5 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT6 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa6 小时前
HTML和CSS学习
前端·css·学习·html
Suckerbin6 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
看海天一色听风起雨落7 小时前
Python学习之装饰器
开发语言·python·学习
李白你好8 小时前
CyberPoC 是一个现代化的网络安全练习和竞赛平台,支持容器化部署的安全挑战,为用户提供实践网络安全技能的环境。
web安全
speop8 小时前
llm的一点学习笔记
笔记·学习
非凡ghost8 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求