xss-跨站脚本攻击漏洞

news2025/1/14 1:17:30

前备知识:

Cookie和Session是Web开发中用于维持用户状态、跟踪用户会话的核心技术,它们的主要目的是在无状态的HTTP协议基础上实现有状态的用户交互。

**Cookie**
- Cookie是一种由服务器发送到客户端(通常是用户的浏览器)的小型数据块。它以文本文件的形式存储在客户端,并在后续对同一服务器的请求中自动携带回服务器。
   - **特点**
     - 存储容量有限:通常每个cookie大小限制为4KB左右。
     - 安全性较低:因为存储在客户端,理论上可以被用户查看、修改或删除;并且在网络传输中如果不加密,容易被截获。
     - 有效期可设置:可以设置为会话级别的(浏览器关闭时失效),也可以设置一个具体的过期时间。
     - 可跨域访问控制:通过`SameSite`属性等机制控制是否允许跨域携带。

- **用途**
   - 用户认证:例如保存登录状态标识符。
   - 个性化设置:如用户偏好、主题选择等。
   - 购物车功能:记录用户临时添加的商品信息。

**Session**
- Session是服务器端的一种技术,用于维护特定用户的信息集合,这些信息存储在服务器上,而不是客户端。
   - **工作原理**
     - 当用户首次访问服务器时,服务器为其创建一个唯一的Session ID,并将这个ID通过Cookie或者URL重写的方式传递给客户端。
     - 客户端在后续请求时,会将这个Session ID发送给服务器,服务器根据ID从内存、数据库或其他存储介质中查找对应的Session数据。
     - 服务器通过验证Session ID的有效性来识别不同的用户会话。

   - **特点**
     - 数据安全:服务器端存储,相比Cookie更不易受到攻击和篡改。
     - 存储空间大:不受限于4KB的大小限制,理论上可以根据服务器资源存储更多数据。
     - 生命周期:Session默认生命周期通常依赖于服务器端配置,当用户一段时间内无活动后,Session可能会超时自动销毁。

- **用途**
   - 用户认证和授权:保存登录用户的身份信息和权限数据。
   - 保持会话状态:如购物车内容、页面间的跳转状态等。

总结来说,Cookie与Session都是为了追踪用户状态而存在的,但Cookie是基于客户端存储的机制,而Session则是基于服务器端存储的机制。两者结合使用可以提供灵活且相对安全的用户会话管理方案。

xss简介

XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web应用程序安全漏洞。它允许恶意攻击者将恶意的客户端脚本(通常为JavaScript)注入到原本无害的网页中,当其他用户浏览这些页面时,嵌入其中的恶意脚本会在用户的浏览器上执行,从而可能窃取用户的敏感信息、模拟用户操作、破坏网站或者进行重定向等。

XSS攻击分类:

  1. 反射型XSS (Non-Persistent / Type-I)

    • 攻击者构造包含恶意脚本的URL或其他形式的用户输入,然后诱骗用户点击或访问。
    • 服务器接收到请求后,没有正确过滤和转义用户输入,直接将其包含在响应中返回给浏览器。
    • 浏览器解析并执行了这个恶意脚本。
  2. 存储型XSS (Persistent / Type-II)

    • 攻击者将恶意脚本提交至Web应用,如评论区、论坛帖子或个人资料中。
    • 服务器端将该脚本存储在数据库或文件系统中。
    • 当其他用户访问显示包含恶意脚本内容的页面时,服务器会从持久化存储中取出数据并在HTML页面中渲染,导致恶意脚本被执行。
  3. DOM Based XSS (Type-0 or DOM XSS)

    • 在这种类型的XSS中,不是由服务器直接输出未过滤的数据造成的,而是由于客户端JavaScript代码处理不安全的输入,并基于此动态修改了DOM(文档对象模型),使得恶意脚本得以执行。
    • 即使服务器对所有输出进行了严格的过滤,如果前端JavaScript代码没有正确验证和转义来自不可信源的数据,仍可能导致DOM-Based XSS漏洞。

XSS漏洞的危害:

  • 窃取用户的Cookie和其他认证信息,用于账户劫持。
  • 控制用户的浏览器进行钓鱼攻击、点击劫持等。
  • 操纵用户界面,展示虚假内容欺骗用户进行非法操作。
  • 在用户浏览器上植入恶意软件。

防止XSS漏洞的方法:

  • 对所有用户提供的输入进行严格的过滤和转义,确保它们不会被当作HTML或JavaScript代码执行。
  • 使用HTTP头部Content-Security-Policy (CSP)来限制加载外部资源和执行内联脚本。
  • 对于持久化数据,实施严格的输入验证与清理策略。
  • 使用HTTP-only标志保护敏感的Cookie不被JavaScript访问。
  • 在前端代码中同样谨慎处理DOM操作,确保不会引入新的DOM-based XSS风险。

xss漏洞检测和利用

XSS漏洞检测:

  1. 手动检测:

    • 输入测试: 检查所有用户可控的输入点,包括URL查询参数、表单字段、HTTP头部等,并尝试注入基础的XSSPayload(如<script>alert(1)</script>)以查看是否能在浏览器中执行。
    • 动态分析: 使用Burp Suite、OWASP ZAP或类似的代理工具进行中间人攻击模拟,拦截并篡改请求数据,观察服务器响应内容是否对注入的脚本进行了正确过滤。
  2. 自动化扫描:

    • 工具检测: 使用专门的安全扫描器如Nessus、Acunetix、Burp Suite中的Scanner模块、或者ppmap这样的专用XSS检测工具,这些工具会自动发送大量预定义的Payload,寻找潜在的XSS漏洞。
    • 代码审计: 对Web应用程序源代码进行静态分析,查找可能存在的不安全的数据输出位置,确保所有输出到HTML上下文的数据都经过了适当的转义或编码。

XSS漏洞利用:

  1. 获取敏感信息:

    • Cookie窃取: 利用反射型或存储型XSS,构造一个可以将受害者的Cookie信息发送给攻击者服务器的恶意脚本,从而实现账户劫持。
    • DOM-Based XSS: 攻击者通过修改页面DOM结构,获取或操作用户的敏感信息。
  2. 会话劫持与持久化控制:

    • Session Hijacking: 获取用户的有效Session ID后,攻击者可以直接使用该ID登录受害者的账户。
    • 持久化植入: 存储型XSS允许攻击者在目标网站上留下长期有效的恶意脚本,持续影响访问该页面的其他用户。
  3. 钓鱼和社会工程学攻击:

    • 界面伪装: 改变网页内容,欺骗用户点击恶意链接或提供个人信息。
    • 重定向攻击: 通过XSS漏洞将用户重定向到恶意站点,进一步实施攻击。
  4. 更高级的利用:

    • 点击劫持(Clickjacking): 隐藏恶意操作在正常页面之下,诱导用户点击。
    • 浏览器插件/扩展攻击: 利用某些浏览器特性或漏洞,通过XSS发动针对浏览器插件或扩展的攻击。

XSS漏洞的防御和绕过

推荐xss靶场以及pikachu靶场.

此处以xss-labs为例:

html事件:HTML 事件 | 菜鸟教程

常用payload:<script>alert(1)</script>

用于检测过滤的payload: " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> &#106

bypass:

绕过htmlspecialchars()函数,也可叫做实体化函数

htmlspecialchars()函数,会将输入的特定字符进行为html实体。

&:转换为&amp;
":转换为&quot;
':转换为成为 '
<:转换为&lt;
>:转换为&gt;

常见绕过:

1.绕过htmlspecialchars实体化函数

1.使用onfocus事件

onfocus 事件是在 HTML 元素获得焦点时触发的事件。当用户点击或选择某个元素,使其成为当前活动元素时,就会触发 onfocus 事件。例如再次点击输入框.

实例:οnfοcus=javascript:alert(1)

2.使用onblur事件

onblur 事件是在 HTML 元素失去焦点时触发的事件。当用户从一个元素切换到另一个元素或点击页面空白区域时,原本获得焦点的元素就会触发 onblur 事件。例如点击输入框后,在点击输入框外部。

实例:οnblur=javascript:alert(1)

2.script标签,以及on关键字被过滤:

1.大写绕过:scRipt,On

2.a标签

<a> 标签定义超链接,用于从一张页面链接到另一张页面。

<a> 元素最重要的属性是 href 属性,它指示链接的目的地。

实例: <a href=javascript:alert("qiushuo")>test</a>

3.iframe标签

<iframe> 标签定义行内框架(内联框架)。

实例:<iframe src="javascript:alert(1)">test</iframe>

4.当script被替换为空时:

在script中再写script: scrscriptipt

3.当写入内容在href属性中:

以上关键字都被过滤的时候,可以使用burpsuite的html编码器

例如:javascript:alert(1)的html编码

payload:

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;
下面是实例
<a href=&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;>xss<a>

当输入有限制的,比如必须有"http:"元素,把该元素//然后放在后面如下

&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x31;&#x27;&#x29;//http://

4.隐含参数

此处name属性对应的值也可能是get/post传参的参数。

5.隐藏注入点

一些隐藏注入点因为插入的数据可能被隐藏,一般不要急着注入,先看源码

referer:"type="text" οnclick="alert(1)"起插入作用

插入后:

user-agent也可能为注入点

payload:"type="text" οnclick="alert(1)"   

不过payload并未绝对,还是要依靠实际情况而定

cookie为注入点

hackerbar

此次payload就不同:user="type="text" οnclick="alert(1)"   

6.特殊框架注入

iframe框架

iframe调用的文件地址失效,无法进行测试。要考的应该是通过修改iframe调用的文件来实现xss注入,修改src引用的文件或者地址即可。

7.ng-include

ng-include 指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件

需要包含在同一个域名下。

payload='level1.php?name=test<img src=1 οnerrοr=alert(1)>'

onerror:如果在加载图片时发生错误则执行

8./、空格进行了转换

回车符  %0a

<img%0asrc=123%0aοnerrοr=alert(1)>

9.embed标签

<embed> 标签定义了一个容器,用来嵌入外部应用或者互动程序(插件)。

防御:

就是找好过滤工作,尽量不使用会有威胁的函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

皓学IT:WEB05-Servlet

一、Servlet 1.1.概述 Servlet是SUN公司提供的一套规范&#xff0c;名称就叫Servlet规范&#xff0c;它也是JavaEE规范之一。我们可以像学习Java基础一样&#xff0c;通过API来学习Servlet。这里需要注意的是&#xff0c;在我们之前JDK的API中是没有Servlet规范的相关内容&am…

C语言编程安全规范

目的 本规范旨在加强编程人员在编程过程中的安全意识,建立编程人员的攻击者思维,养成安全编码的习惯,编写出安全可靠的代码。 2 宏 2.1 用宏定义表达式时,要使用完备的括号 2.2 使用宏时,不允许参数发生变化 3 变量 3.1 所有变量在定义时必须赋初值 变量声明赋予初值,可…

python实现线下缓存最优算法

对于现代计算机为了加快数据存储速度&#xff0c;一般会采用多级缓存的方法&#xff0c;以最简单的二级缓存来说&#xff0c;数据会存放在两个地方&#xff0c;一个地方就是存在内存当中&#xff0c;另一个存放的地方就是存放在硬盘当中&#xff0c;但是这两个地方数据读取的速…

微信小程序-场景功能-开发文档学习笔记

界面常见的交互反馈 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever 微信小程序开发指南 微信小程序开发文档 用户和小程序上进行交互的时候&#xff0c;某些操作可能比较耗时&#xff0c;我们应该予以及时的反馈以舒缓用户等待的不良情绪&#xff08;良好…

Centos服务器部署前后端项目

目录 准备工作1. 准备传输软件2. 连接服务器 部署Mysql1.下载Mysql(Linux版本)2. 解压3. 修改配置4. 启动服务另一种方法Docker 部署后端1. 在项目根目录中创建Dockerfile文件写入2. 启动 部署前端1. 在项目根目录中创建Dockerfile文件写入2. 启动 准备工作 1. 准备传输软件 …

机器学习:SVM算法(Python)

一、核函数 kernel_func.py import numpy as npdef linear():"""线性核函数:return:"""def _linear(x_i, x_j):return np.dot(x_i, x_j)return _lineardef poly(degree3, coef01.0):"""多项式核函数:param degree: 阶次:param …

曲线生成 | 图解B样条曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 控制点计算之插值2 控制点计算之近似3 仿真实现3.1 ROS C实现3.2 Python实现3.3 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索、采样法、智能算法等)&a…

正则表达式详细使用教程

正则是用于匹配字符串中字符组合的模式&#xff0c;在js中&#xff0c;正则也是对象。 定义正则的两种方式&#xff1a; 1.const 变量名new RegExp(/表达式/) <script>const req new RegExp(/a/)console.log(req.test("asd"))//true</script> 2.con…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

SpringBoot 学习笔记

文章目录 一、IoC二、AOP三、bean3.1 bean 生命周期3.2 三种依赖注入方式3.3 bean 线程安全 四、SpringMVC五、常用注解5.1 Scope5.2 PostConstruct 和 PreDestroy5.3 Component 和 Bean5.4 Autowired 和 Resource 六、基于 ApplicationContextAware 实现工厂模式七、事务失效八…

Cubase学习:Cubase 12常用快捷键

按键盘上的上下箭头就可以让选中的音符向上或向下移动 数字0键: 停止 Ctrl+数字 0 键: 新建视图层 Alt+数字0 键: 重新设置视图层 小数点键: 播放指针回零点 数字1 键: 左定位指针 数字 2 键: 右定位指针 数字3 键--数字9键: 分别控制 3--9 的7个定位标志 Alt+数字1 键--数字9键…

BoomWorks使用wxWidgets+CodeBlocks+GCC开发的软件合集

♦️ 定时执行专家&#xff08;TimingExecutor&#xff09; V7.0 《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件。软件具有 25 种【任务类型】、12 种【触发器】触发方式&#xff0c;并且全面支持界面化【Cron表达式】设置。软件采用多线程并…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月26日,星期一

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月26日 星期一 农历正月十七 1、 气象台&#xff1a;3月初之前南方大部将维持阴雨雪天气。 2、 据海关统计&#xff0c;京津冀协同发展十年成效显著&#xff0c;外贸总量跨两个万亿台阶。 3、 2024年研考初试成绩今天起…

C++入门全集(2):类与对象【上】

目录 一、前言 二、struct在C中的变化 三、类的定义 四、类的访问限定符 五、封装 六、类的实例化 七、类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式 八、this指针 8.1 this指针的用途 8.2 this指针的特性 一、前言 C语言是一种面向过程的语言&…

Folx Pro Mac中文p破解版如何使用?为您带来Folx Pro 详细使用教程!

​ Folx pro 5 中文版是mac上一款功能强大的老牌加速下载软件&#xff0c;新版本的Folx pro整体界面非常的简洁和漂亮&#xff0c;具有非常好用的分类管理功能&#xff0c;支持高速下载、定时下载、速度控制、iTunes集成等功能。Folx pro兼容主流的浏览器&#xff0c;不但可以下…

什么是媒体发稿?发稿媒体分类及发稿流程

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体发稿是一种企业推广和宣传的手段&#xff0c;通过媒体渠道传递企业信息和形象。 媒体发稿的含义在于&#xff0c;当企业有新闻、事件或其他消息需要对外公布时&#xff0c;可以选择…

氢氟酸在晶圆厂中的应用与防护

氢氟酸&#xff0c;这种剧毒液体竟然会被用在晶圆的生产中&#xff0c;这个可能让你匪夷所思。实际上&#xff0c;氢氟酸这种看似普通的清澈液体&#xff0c;实则在芯片生产中扮演了至关重要的角色。 氢氟酸的性质&#xff1f; 氢氟酸&#xff08;Hydrofluoric acid&#xff0c…

【VSCode】解决VSCode远程连接问题:远程主机可能不符合 glibc 和 libstdc++

今天用VSCode进行ssh连接时&#xff0c;提示“远程主机可能不符合 glibc 和 libstdc VSCode 服务器的先决条件”。查了一下发现这个问题主要是由于VSCode在一月份发布的最新版本v1.86中要求远程主机 glibc>2.28导致的&#xff0c;所以ssh连接Ubuntu 18.04的时候就会提示这个…

AI之T2I:Stable Diffusion 3的简介、安装和使用方法、案例应用之详细攻略

AI之T2I&#xff1a;Stable Diffusion 3的简介、安装和使用方法、案例应用之详细攻略 目录 Stable Diffusion 3的简介 1、效果测试 官方demo 网友提供 Stable Diffusion 3的安装和使用方法 1、安装 2、使用方法 Stable Diffusion 3的案例应用 1、基础案例 Stable Diff…

jmeter 测试数据库的详细方法

当前版本&#xff1a; jmeter 5.6.3mysql 5.7.39 简介 JMeter是一个功能强大的开源性能测试工具&#xff0c;它被广泛用于测试Web应用程序、Web服务、API、数据库以及其他类型的应用程序。支持测试数据库的性能和可靠性&#xff0c;可以模拟多个并发用户对数据库执行各种不同类…