当前位置: 首页 > article >正文

《XSS跨站脚本攻击》

一、XSS简介

XSS全称(Cross Site Scripting)跨站脚本攻击,为了避免和CSS层叠样式表名称冲突,所以改为了XSS,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。

OWASP(开放式Web应用程序安全项目)是一个开放的社区,由非营利组织 OWASP基金会支持的项目。对所有致力于改进应用程序安全的人士开放,旨在提高对应用程序安全性的认识。其最具权威的就是"10项最严重的Web 应用程序安全风险列表",总结并更新Web应用程序中最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。

2021 OWASP Top 10榜单及变化
A01:访问控制失效(Broken Access Control)从第五位上升到了第一位。94%的应用程序都经过了某种形式的访问控制失效测试。映射到访问控制失效的34个CWE在应用程序中的出现频率比其他任何类别都要多。
A02:2021年,加密失败(Cryptographic Failure)——此前名为“敏感数据暴露”(Sensitive DataExposure),这一名称只是描述了广泛的症状而非根本原因——上移到了榜单第二位。此处需要重新关注与密码学相关的故障,这些故障通常会导致敏感数据暴露或系统受损。
A03:2021年,注入(Injection)下滑到第三位。94%的应用程序都测试了某种形式的注入,注入类别中如今包括跨站脚本。映射到该类别的33个CWE在应用程序中出现次数第二多。
A04:不安全设计(Insecure Design)是2021年出现的新类别,并且一出场就高居第四位。此处需要重点关注与设计缺陷相关的风险。如果我们真的想作为一个行业“左移”,就需要更多地使用威胁建模、安全设计模式和原则以及参考架构。
A05:2021年,安全配置错误(Security Misconfiguration)从上一版的第6位上升到了第5位。90%的应用程序都经过了某种形式的错误配置测试,随着转向高度可配置软件的趋势不可逆,看到这一类别排名上升也就不足为奇了。此前版本的XML外部实体注入(XXE)类别现在也被合并为该类别的一部分。
A06:2021年,脆弱过时组件(Vulnerable and Outdated Component)——此前名为“使用具有已知漏洞的组件”(Using Components with Known Vulnerabilities)——也从第6位一跃进入第6位。该类别是唯一一个没有任何CVE映射到所含CWE的类别,因此默认的漏洞与影响权重计5.0分。

A07:2021年,识别与认证失败(Identification and Authentication Failure)——此前称为“身份验证失效”(Broken Authentication)——排名从此前的第2位降到了第7位,而且该类别目前包含更多与识别失败相关的CWE。虽然该类别仍然位列Top 10榜单,但标准化框架的可用性增加似乎有助于解决这一问题。
A08:软件和数据完整性故障(Software and Data Integrity Failure)是2021年新增的一个类别,主要关注缺乏完整性验证情况下做出与软件更新、关键数据和持续集成/持续交付(CI/CD)流水线相关的各种假设。CVE/CVSS数据最高加权影响之一映射到该类别中的10个CWE。此前版本中的“不安全反序列化”(Insecure Deserialization)类别如今也被归入这一更大类别。
A09:2021年,安全日志与监测失败(Security Logging and Monitoring Failure)——此前名为“日志记录和监控不足”(Insufficient Logging & Monitoring)——从最后一名上升至第9位。而且该类别已扩展纳入了其他类型的故障,虽然这些故障难以测试,并且在CVE/CVSS 数据中没有得到很好的体现,但却会直接影响可见性、事件警报和取证。
A10:排在最后一位的服务器端请求伪造(Server-Side Request Forgery)是2021年新增的类别。虽然数据显示其发生率相对较低,但测试覆盖率却高于平均水平,并且漏洞利用和影响潜力的评级也高于平均水平。该类别是行业安全专家为我们预警的一种重要场景,尽管目前并没有数据能够证实其危险性。

从上面中的一段话,可以得知,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行"服务端"攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。
XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。 

二、XSS出现原因

程序对输入输出的控制不够严格,导致“精心构造”的脚本输入后,在输出到前段时被浏览器当作有效代码解析执行从而产生危害。

三、XSS的危害 

 1、首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。
2、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
3、"框架钓鱼"。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。
4、挂马(水坑攻击)
5、有局限性的键盘记录

四、XSS的分类

1、反射型

与服务端交互,但是交互的数据一般不会被存在数据库中,一次性,所见即所得,一般出现在查询类页面等。

2、存储型

 交互的数据会被存在数据库中,永久性存储,一般出现在留言板,注册等页面。

3、DOM型 

不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的漏洞,大部分属于反射型,少部分属于存储型。

五、分类详细介绍

1、反射型XSS或不持久型XSS(中低危) 

交互的数据一般不会存在数据库里,只是单纯的把用户输入的数据反射给浏览器,一次性,所见即所得。

 <?php
$name = $_GET['name'];
echo "Welcome $name<br>";
?>

 示例:比如将上面的代码放到一个文件中,比如文件名称为xss.php,然后将文件放入到phpstudy的网站目录中去

访问一下看看效果, http://192.168.0.15/xss.php?name=1 ,这个代码很明显没有数据库注入漏
洞,但是存在xss漏洞,因为这段代码并没有对用户的参数数据进行过滤处理。

 攻击方法'"><script>confirm(1)</script> ,其中'"> 我们称之为完成闭合符号,后面跟script标签
来进行攻击,弹出了窗口表示我们的js代码被执行了。

 

并且这种弹框的代码是没有什么太大的攻击性的,所以可以作为进行xss的漏洞测试。其实对于初级挖洞的人来说,这个代码就够了,但是如果作为攻防中的红方的话,你还需要往下学习更多的手段。

其实xss的代码手段非常多,因为别人可能通过过滤等手段对script标签做了限制,那么你想攻击的话,就要改变方式,所以攻击代码的写法非常多。

效果:出现了弹框,表示此处有XSS漏洞。 

2、存储型XSS或持久型XSS(高危) 

 交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。

示例: '"><script>confirm(1)</script>

 

 效果:访问页面后出现弹框,说明这个攻击代码存储到了数据库,每次刷新的时候,都会加载这个数据,执行输入的js代码,所以存储型漏洞很严重。

3、DOM XSS(中低危)

通过前端的dom节点形成的XSS漏洞,一般不与后台服务器产生数据交互,属于中低危漏洞了。

DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。

dom型xss的产生原因是由于前端js代码的DOM操作导致。

可能触发DOM型XSS的js操作:

document.referer
window.name
location
innerHTML
document.write

闭合标签:

' onclick="alert(1111)"
' onclick="alert('xss')">
'><img src="#" onmouseover="alert('xss')">
<a href="'</a><script>alert(1);</script>">what do you see?</a> 

 点击a标签提示文字,效果如下:

 4、XSS可能存在的地方

 其实只要是有用户输入输出、用户交互等一些地方,都可能存在xss漏洞。
参考xss跨站脚本攻击文档
HTML context

 Attribute Context

 URL Context

 Style Context

5、XSS测试方法 

1、工具扫描:APPscan、AWVS、xray等大型漏扫工具、xsstrike等自动化小工具。
https://github.com/s0md3v/XSStrike
2、手工测试:Burpsuite、firefox(hackbar)、360开发的一款浏览器插件

使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑哪里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。
(1)在目标站点上找到输入点,比如查询接口,留言板等;
(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;
(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞。

相关文章:

《XSS跨站脚本攻击》

一、XSS简介 XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了XSS&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&…...

Golang:精通sync/atomic 包的Atomic 操作

在本指南中&#xff0c;我们将探索sync/atomic包的细节&#xff0c;展示如何编写更安全、更高效的并发代码。无论你是经验丰富的Gopher还是刚刚起步&#xff0c;你都会发现有价值的见解来提升Go编程技能。让我们一起开启原子运算的力量吧&#xff01; 理解Go中的原子操作 在快…...

代码随想录_二叉树

二叉树 二叉树的递归遍历 144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer&g…...

详解Swift中 Sendable AnyActor Actor GlobalActor MainActor Task、await、async

详解Swift中 Sendable AnyActor Actor GlobalActor MainActor 的关联或者关系 及其 各自的作用 和 用法 以及与 Task、await、async&#xff1a; Sendable 协议 作用&#xff1a; Sendable 是一个协议&#xff0c;它用于标记可以安全地跨线程或异步任务传递的数据类型。符合 S…...

【C语言标准库函数】浮点数分解与构造: frexp() 和 ldexp()

目录 一、头文件 二、函数简介 2.1. frexp(double x, int *exp) 2.2. ldexp(double x, int exp) 三、函数实现&#xff08;概念性&#xff09; 3.1. frexp 的概念性实现 3.2. ldexp 的概念性实现 四、注意事项 五、示例代码 在C语言标准库中&#xff0c;frexp() 和 ld…...

【Git】tortoisegit使用配置

1. 安装 首先下载小乌龟&#xff0c;下载地址:https://tortoisegit.org/download/, 可以顺便下载语言包&#xff01; 安装时&#xff0c;默认安装就可以&#xff0c;一路next。也可以安装到指定目录中 目前已完成本地安装&#xff0c;接下来就需要与远程仓库建立连接&…...

Spring基于文心一言API使用的大模型

有时做项目我们可能会遇到要在项目中对接AI大模型 本篇文章是对使用文心一言大模型的使用总结 前置任务 在百度智能云开放平台中注册成为开发者 百度智能云开放平台 进入百度智能云官网进行登录&#xff0c;点击立即体验 点击千帆大模型平台 向下滑动&#xff0c;进入到模型…...

运维_Mac环境单体服务Docker部署实战手册

Docker部署 本小节&#xff0c;讲解如何将前端 后端项目&#xff0c;使用 Docker 容器&#xff0c;部署到 dev 开发环境下的一台 Mac 电脑上。 1 环境准备 需要安装如下环境&#xff1a; Docker&#xff1a;容器MySQL&#xff1a;数据库Redis&#xff1a;缓存Nginx&#x…...

[论文笔记] Deepseek-R1R1-zero技术报告阅读

启发: 1、SFT&RL的训练数据使用CoT输出的格式,先思考再回答,大大提升模型的数学与推理能力。 2、RL训练使用群体相对策略优化(GRPO),奖励模型是规则驱动,准确性奖励和格式化奖励。 1. 总体概述 背景与目标 报告聚焦于利用强化学习(RL)提升大型语言模型(LLMs)…...

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好&#xff01; 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…...

一文读懂:TCP网络拥塞的应对策略与方案

TCP&#xff08;传输控制协议&#xff09;是互联网中广泛使用的可靠传输协议&#xff0c;它通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制确保数据的可靠传输。然而&#xff0c;在网络环境中&#xff0c;由于多个主机共享网络资源&#xff0c;网络拥塞成为了一个…...

SpringSecurity:授权服务器与客户端应用(入门案例)

文章目录 一、需求概述二、开发授权服务器1、pom依赖2、yml配置3、启动服务端 三、开发客户端应用1、pom依赖2、yml配置3、SecurityConfig4、接口5、测试 一、需求概述 maven需要3.6.0以上版本 二、开发授权服务器 1、pom依赖 <dependency><groupId>org.springfr…...

Python与java的区别

一开始接触Python的时候&#xff0c;哔哩视频铺天盖地&#xff0c;看了很多人主讲的&#xff0c;要找适合自己口味的&#xff0c;各种培训机构喜欢在各种平台引流打广告&#xff0c;看了很多家&#xff0c;要么就是一个视频几个小时&#xff0c;长篇大论不讲原理只讲应用&#…...

doris:MySQL 兼容性

Doris 高度兼容 MySQL 语法&#xff0c;支持标准 SQL。但是 Doris 与 MySQL 还是有很多不同的地方&#xff0c;下面给出了它们的差异点介绍。 数据类型​ 数字类型​ 类型MySQLDorisBoolean- 支持 - 范围&#xff1a;0 代表 false&#xff0c;1 代表 true- 支持 - 关键字&am…...

SQL中 的exists用法

EXISTS 是 SQL 中的一个子查询条件&#xff0c;用于检查子查询是否返回任何行。如果子查询返回至少一行&#xff0c;则 EXISTS 返回 TRUE。 例如&#xff0c;查询有订单的客户列表&#xff1a; SELECT * FROM customers c WHERE EXISTS (SELECT 1 FROM orders o WHERE o.cust…...

案例1.spark和flink分别实现作业配置动态更新案例

目录 目录 一、背景 二、解决 1.方法1:spark broadcast广播变量 a. 思路 b. 案例 ① 需求 ② 数据 ③ 代码 2.方法2:flink RichSourceFunction a. 思路 b. 案例 ① 需求 ② 数据 ③ 代码 ④ 测试验证 测试1 测试2 测试3 一、背景 在实时作业(如 Spark Str…...

大数据学习之SparkSql

95.SPARKSQL_简介 网址&#xff1a; https://spark.apache.org/sql/ Spark SQL 是 Spark 的一个模块&#xff0c;用于处理 结构化的数据 。 SparkSQL 特点 1 易整合 无缝的整合了 SQL 查询和 Spark 编程&#xff0c;随时用 SQL 或 DataFrame API 处理结构化数据。并且支…...

鸿蒙UI(ArkUI-方舟UI框架)- 使用文本

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文本使用 文本显示 (Text/Span) Text是文本组件&#xff0c;通常用于展示用户视图&#xff0c;如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…...

Spider 数据集上实现nlp2sql训练任务

NLP2SQL&#xff08;自然语言处理到 SQL 查询的转换&#xff09;是一个重要的自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;其目标是将用户的自然语言问题转换为相应的 SQL 查询。这一任务在许多场景下具有广泛的应用&#xff0c;尤其是在与数据库交互的场景中&…...

数据结构——【树模板】

#思路 1、 结点类&#xff1a; 属性&#xff1a;数据&#xff0c;孩子结点列表 功能1&#xff1a;认孩子&#xff1a; 前提&#xff1a;在父子都是结点的情况下 2. 树类&#xff1a; 属性&#xff1a;根节点&#xff0c;生成初始化的总结点 功能1&#xff1a;获取初始化…...

R 数组:高效数据处理的基础

R 数组&#xff1a;高效数据处理的基础 引言 在数据科学和统计分析领域&#xff0c;R 语言以其强大的数据处理和分析能力而备受推崇。R 数组是 R 语言中用于存储和操作数据的基本数据结构。本文将详细介绍 R 数组的创建、操作和优化&#xff0c;帮助读者掌握 R 数组的使用技巧…...

【DeepSeek】DeepSeek概述 | 本地部署deepseek

目录 1 -> 概述 1.1 -> 技术特点 1.2 -> 模型发布 1.3 -> 应用领域 1.4 -> 优势与影响 2 -> 本地部署 2.1 -> 安装ollama 2.2 -> 部署deepseek-r1模型 1 -> 概述 DeepSeek是由中国的深度求索公司开发的一系列人工智能模型&#xff0c;以其…...

npm link,lerna,pnmp workspace区别

npm link、Lerna 和 pnpm workspace 是三种不同的工具/功能&#xff0c;用于处理 JavaScript 项目的依赖管理和 Monorepo 场景。它们的核心区别如下&#xff1a; 1. npm link 用途 本地调试依赖&#xff1a;将本地开发的包&#xff08;Package A&#xff09;临时链接到另一个…...

ASP.NET Core 使用 WebClient 从 URL 下载

本文使用 ASP .NET Core 3.1&#xff0c;但它在.NET 5、 .NET 6和.NET 8上也同样适用。如果使用较旧的.NET Framework&#xff0c;请参阅本文&#xff0c;不过&#xff0c;变化不大。 如果想要从 URL 下载任何数据类型&#xff0c;请参阅本文&#xff1a;HttpClient 使用WebC…...

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介&#xff1a; 学习资料&#xff1a; 跳转目录&#xff1a; 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…...

vue3 点击图标从相册选择二维码图片,并使用jsqr解析二维码(含crypto-js加密解密过程)

vue3 点击图标从相册选择二维码图片&#xff0c;并使用jsqr解析二维码&#xff08;含crypto-js加密解密过程&#xff09; 1.安装 jsqr 和 crypto-js npm install -d jsqr npm install crypto-js2.在util目录下新建encryptionHelper.js文件&#xff0c;写加密解密方法。 // e…...

kafka 3.5.0 raft协议安装

前言 最近做项目&#xff0c;需要使用kafka进行通信&#xff0c;且只能使用kafka&#xff0c;笔者没有测试集群&#xff0c;就自己搭建了kafka集群&#xff0c;实际上笔者在很早之前就搭建了&#xff0c;因为当时还是zookeeper&#xff08;简称ZK&#xff09;注册元数据&#…...

用Kibana实现Elasticsearch索引的增删改查:实战指南

在大数据时代&#xff0c;Elasticsearch&#xff08;简称 ES&#xff09;和 Kibana 作为强大的数据搜索与可视化工具&#xff0c;受到了众多开发者的青睐。Kibana 提供了一个直观的界面&#xff0c;可以方便地对 Elasticsearch 中的数据进行操作。本文将详细介绍如何使用 Kiban…...

Redis基础笔记

一、基础知识 连接方式 CLI (Command Line Interface)API (Application Programming Interface)GUI (Graphical User Interface) 启动 redis-server连接到Redis&#xff08;Redis CLI Client&#xff09; redis redis-cli telnet 127.0.0.1 6379退出 quit/exit查看过期时…...

前后端服务配置

1、安装虚拟机&#xff08;VirtualBox或者vmware&#xff09;&#xff0c;在虚拟机上配置centos(选择你需要的Linux版本)&#xff0c;配置如nginx服务器等 1.1 VMware 下载路径Sign In注册下载 1.2 VirtualBox 下载路径https://www.virtualbox.org/wiki/Downloads 2、配置服…...