安全—09day

news2024/9/23 3:19:10

XSS

  • 1. XSS的原理
  • 2. Xss漏洞分类
      • 2.1 反射性xss
      • 2.2 存储型XSS
      • 2.3 基于DOM的 XSS
      • 2.4 XSS漏洞的危害
  • 3. XSS的各种bypass技巧
  • 4. 从 XSS Payload 学习浏览器解码
  • 5. 浏览器解析机制
      • 5.1 HTML中有五类元素:
      • 5.2 五类元素的区别

1. XSS的原理

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

2. Xss漏洞分类

2.1 反射性xss

反射型XSS 是非持久性、参数型的跨站脚本。反射型XSS 的JS 代码在Web应用的参数(变量)中,如搜索框的反射型XSS。在搜索框中,提交PoC[scriptalert(/xss/)/script],点击搜索,即可触发反射型XSS。注意到,我们提交的poc 会出现在search.php 页面的keywords 参数中。
在这里插入图片描述

2.2 存储型XSS

存储型XSS 是持久性跨站脚本。持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写进数据库中。此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS 使用的JS 代码,JS 代码的运行环境是浏览器,所以需要浏览器从服务器载入恶意的XSS 代码,才能真正触发XSS。此时,需要我们模拟网站后台管理员的身份,查看留言。
在这里插入图片描述

2.3 基于DOM的 XSS

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

2.4 XSS漏洞的危害

在这里插入图片描述

3. XSS的各种bypass技巧

Level 1
没有什么限制,直接弹窗
在这里插入图片描述
Level 2
在这里插入图片描述

在这里插入图片描述

从上图源码可知,在箭头1处将get方式传递到服务器端的keyword参数的值赋给str变量。在箭头2处是用htmlspecialchars()函数对变量str进行处理之后显示到网页上。但是在箭头3处却是直接将变量值插入到了input标签value属性值中,因为这里并没有对敏感字符进行编码和过滤,所以可以通过构造实现XSS攻击。

<input name=keyword value="" > scriptalert('xss')/script //"

Level 3
在这里插入图片描述
onfocus是javascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了。

http://localhost/level3.php?keyword=scriptalert('xss')/script&submit=搜索

Level 4
在这里插入图片描述
原来如此,在服务器端先是将传递过来的keyword参数的值赋给str变量,然后经过箭头1和箭头2处的处理将变量值中包含的<、>符号删除。最后在箭头3处对变量值进行编码处理之后显示在页面之上,在箭头4处将去除特殊符号后的变量值插入到input标签的value属性值中。

http://localhost/level4.php?keyword="οnfοcus=javascript:alert('xss') "

Level 5
在这里插入图片描述
从源码来看,服务器端先是将传递过来的参数值转换为全小写之后赋值给变量str,接着就是通过str_replace()函数来破坏变量值中的敏感字符的语义。最后在箭头4处通过htmlspecialchars()函数处理之后显示到网页上,在箭头5处直接将进行敏感字符处理之后的变量值插入到input标签的value属性值中。

http://localhost/level5.php?keyword="> <a href=javascript:alert('xss') > xss/a//

Level 6
在这里插入图片描述
从源码来看服务器端做的防护措施比我们想象的要多得多。接下来也会根据图中的一些代码来提一提在前五关中没有提过的执行js代码的其他一些方式。
从箭头1的地方可以看到是用字符<script去匹配我们提交的参数值,如果匹配到了就进行替换来破坏原来的语义导致无法实现XSS。此处能够防范的是script/script这一类的恶意代码。
从箭头2的地方可以看到是用字符on去匹配参数值,如果匹配到了就进行替换破坏原有语义。这里主要防范的是利用带有on字符的事件来触发恶意代码,比如前面用到过的onfocus事件。
从箭头3的地方可以看到是用字符src去进行匹配,但是貌似我们之前没有提到过含有此类字符的恶意代码啊。说到这里我们就不得不提到img标签了。熟悉html的人都会知道在img标签中引用图片会用到一个属性就是src。正常的引用图片就是将待引用图片的地址赋值给src属性。但是在js中如果src属性的值不正常或者无法访问到时就可以触发一个onerror事件来执行js代码。

http://localhost/level1.php?name=<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=">ceshi/a

Level 7
在这里插入图片描述
可以看到因为在箭头1处首先是对参数值转换成了小写,所以上一关的大小写绕过才没能奏效。而在箭头2处又将基本的关键字都删除了。但是这里的字符替换操作仅仅执行了一次,因为比如在javascrscriptipt中在匹配的时候仅仅匹配到了一个script字符,所以也就只是将中间该字符删除而并不会接着再对结果字符串进行同样的操作了。
在这里插入图片描述
Level 8
在这里插入图片描述
箭头1处可以看到对参数值做了小写处理,在箭头2处对常见的关键字做了过滤处理,在箭头3处还将用来起闭合作用的引号做了字符实体替换。

<img src=1 onerror=" &#97;&#108;&#101;&#114;&#116;(1)">

Level 9
在这里插入图片描述
可以看到在箭头1处就是对参数值进行小写处理,然后就是对关键字的过滤,跟前面几关的做法是一样的。唯一不同之处就是在下面对处理过后的字符还做了一个查找,如果该字符中含有http://就返回第一次出现的位置,也就可以将该字符插入到href属性值中了,但是如果字符中没有http://的话就会返回false,接着在href属性值中就会出现链接不合法这样的字样。

<img src=1 onerror=" &#97;&#108;&#101;&#114;&#116;(1)">//https://

Level 10
在这里插入图片描述
服务器端在箭头1处说明是接收t_sort参数值的。然后在箭头2处会删除t_sort参数值中的<、>。从这里来看的话这一关就只能是将js代码插入到input标签的属性值中来执行而不能通过闭合input标签引入新的标签来触发XSS了。

http://localhost/level10.php keyword=scriptalert('xss')/script&t_sort="type="text" οnclick="alert('xss')

4. 从 XSS Payload 学习浏览器解码

1

 <a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>

里面没有HTML编码内容,不考虑,其中href内部是URL,于是直接丢给URL模块处理,但是协议无法识别(即被编码的javascript:),解码失败,不会被执行
URL规定协议,用户名,密码都必须是ASCII,编码当然就无效了

2

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">

先HTML解码,得到

<a href="javascript:%61%6c%65%72%74%28%32%29">

href中为URL,URL模块可识别为javascript协议,进行URL解码,得到

<a href="javascript:alert(2)">

由于是javascript协议,解码完给JS模块处理,于是被执行

3

<a href="javascript%3aalert(3)"></a>

同1,不解释

4

<div>&#60;img src=x onerror=alert(4)&#62;</div>

这里包含了HTML编码内容,反过来以开发者的角度思考,HTML编码就是为了显示这些特殊字符,而不干扰正常的DOM解析,所以这里面的内容不会变成一个img元素,也不会被执行
从HTML解析机制看,在读取<div>之后进入数据状态,<会被HTML解码,但不会进入标签开始状态,当然也就不会创建img元素,也就不会执行

5

<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

<textarea>RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素,HTML解码得到

<textarea><script>alert(5)</script></textarea>

于是直接显示

RCDATA`元素(RCDATA elements)包括`textarea`和`title

6

<textarea><script>alert(6)</script></textarea>

同5,不解释

7

<button onclick="confirm('7&#39;);">Button</button>

这里onclick中为标签的属性值(类比2中的href),会被HTML解码,得到

<button onclick="confirm('7');">Button</button>

然后被执行

8

<button onclick="confirm('8\u0027);">Button</button>

onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,'显然不行,JS执行失败

9

<script>&#97;&#108;&#101;&#114;&#116&#40;&#57;&#41;&#59</script>

script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,JS也认不出来,执行失败
原始文本元素(Raw text elements)有<script><style>

10

<script>\u0061\u006c\u0065\u0072\u0074(10);</script>

同8,函数名alert属于标识符,直接被JS执行

11

<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>

同8,不解释

12

<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

这里看似将没毛病,但是这里\u0031\u0032在解码的时候会被解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败

13

<script>alert('13\u0027)</script>

同8

14

<script>alert('14\u000a')</script>

\u000a在JavaScript里是换行,就是\n,直接执行
Java菜鸡才知道在Java里\u000a是换行,相当于在源码里直接按一下回车键,后面的代码都换行了

15

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;"></a>

先HTML解码,得到

<ahref="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>

在href中由URL模块处理,解码得到

javascript:\u0061\u006c\u0065\u0072\u0074(15)

识别JS协议,然后由JS模块处理,解码得到

javascript:alert(15)

最后被执行

5. 浏览器解析机制

5.1 HTML中有五类元素:

1. 空元素(Void elements),如<area>,<br>,<base>等等

2. 原始文本元素(Raw text elements),有<script><style>

3. RCDATA元素(RCDATA elements),有<textarea><title>

4. 外部元素(Foreign elements),例如MathML命名空间或者SVG命名空间的元素

5. 基本元素(Normal elements),即除了以上4种元素以外的元素

5.2 五类元素的区别

1. 空元素,不能容纳任何内容(因为它们没有闭合标签,没有内容能够放在开始标签和闭合标签中间)。

2. 原始文本元素,可以容纳文本。

3. RCDATA元素,可以容纳文本和字符引用。

4. 外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释

5. 基本元素,可以容纳文本、字符引用、其他元素和注释

这里涉及三轮解码,顺序是HTML>URL>JavaScript

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

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

相关文章

AcWing:4861. 构造数列、4862. 浇花(C++)

目录 4861. 构造数列 问题描述&#xff1a; 实现代码&#xff1a; 4862. 浇花 问题描述&#xff1a; 实现代码&#xff1a; 4861. 构造数列 问题描述&#xff1a; 我们规定如果一个正整数满足除最高位外其它所有数位均为 00&#xff0c;则称该正整数为圆数。 例如&…

Redis基础操作以及数据类型

目录 Redis基础操作 java中的i是不是原子操作&#xff1f;不是 数据类型 1. list 2. set 3. Hash哈希 4. Zset有序集合 Redis基础操作 set [key] [value] 设置值 &#xff08;设置相同的会将原先的覆盖&#xff09; get [key] 获取值 不能覆盖和替换 ttl [key] 以秒为单…

【uniapp】开发一款手机端go语言教程软件

文章目录介绍数据源体验优化总结介绍 闲来无事&#xff0c;折腾一款 go语言教程软件&#xff0c;软件使用uniapp-cli&#xff0c;vue2编写。 界面很简单&#xff0c;侧边栏为目录&#xff0c;主页是由markdown渲染的正文。 单击悬浮按钮打开目录&#xff0c;双击回到正文顶部。…

MySQL知识汇总:MySQL函数CASE WHEN用法详解

Case When的两种简单用法 用法一&#xff1a; CASE seasonWHEN Spring THEN 春天 WHEN Summer THEN 夏天 WHEN autumn THEN 秋天 else 冬天 end 用法二&#xff1a; CASE WHEN season Spring THEN 春天WHEN season Summer THEN 夏天WHEN season autumn THEN 秋天 els…

chatGPT与人形机器人,高泽龙接受中国经营报采访谈二者发展

1.相较于Chatgpt&#xff0c;人形机器人的市场前景有多大&#xff1f;答&#xff1a;人形机器人的市场前景可以用“无限大”来形容&#xff0c;这看起来很夸张而且并不合理&#xff0c;其实是客观而且中肯的。因为这个问题就仿佛是五十年前&#xff0c;人们问“未来的电脑市场有…

2023美国大学生数学建模竞赛E题光污染完整数据集和求解代码分享

目录 数据集收集 GeoNames 地理数据集 全球各国的经纬度数据集 协调一致的全球夜间灯光&#xff08;1992 - 2018&#xff09;数据集 NASA 的 EaN Blue Marble 2016 数据集 全球夜间数据集 读取数据集 绘制热图 光污染分析 ​数据集和代码地址 2023美国大学生数学建模…

ChIP-seq 分析:数据质控实操(5)

1. 数据 今天将继续回顾我们在上一次中研究的 Myc ChIPseq。这包括用于 MEL 和 Ch12 细胞系的 Myc ChIPseq 及其输入对照。 可在此处[1]找到 MEL 细胞系中 Myc ChIPseq 的信息和文件可在此处[2]找到 Ch12 细胞系中 Myc ChIPseq 的信息和文件可以在此处[3]找到 MEL 细胞系的输入…

Linux--Upd--套接字编程(单线程和多线程版本)--0215 16

观前提示&#xff1a; 本文涉及了以前博文实现的相关内容&#xff0c;在此贴出 线程的封装 Thread.hpp 及 日志 Liunx--线程池的实现--0208 09_Gosolo&#xff01;的博客-CSDN博客 1. 网络编程相关接口 1.1 创建套接字 #include <sys/types.h> #include <sys/so…

磁盘调度算法

磁盘调度算法 为了减少对文件的访问时间&#xff0c;应采用一种最佳的磁盘调度算法&#xff0c;以使各进程对磁盘的平均访问时间最少。由于在访问磁盘时主要是寻道时间。因此&#xff0c;磁盘调度的目标是使磁盘的平均寻道时间最少。 1.先来先服务&#xff08;FCFS&#xff09…

Java Character 类,超详细整理,适合新手入门

目录 一、什么是Java Character 类&#xff1f; 二、Character类有哪些常用的静态方法&#xff1f; 1、将一个字符分别转换为大写字母和小写字母 2、如何判断一个字符是否是数字&#xff1f; 3、如何将一个字符转换为数字&#xff1f; 4、如何将一个字符串转换为字符数组…

【c++学习】入门c++(中)

目录一. 前言二. 函数重载1. 概念2.函数名修饰规则三 .引用&#xff08;&&#xff09;1. 概念2. 引用特性3.应用1.做参数2. 做返回值3. 传值、传引用效率比较4.引用和指针的区别四 . 结语一. 前言 小伙伴们大家好&#xff0c;今天我们继续学习c入门知识&#xff0c;今天的…

SQL性能优化的47个小技巧,你了解多少?

收录于热门专栏Java基础教程系列&#xff08;进阶篇&#xff09; 1、先了解MySQL的执行过程 了解了MySQL的执行过程&#xff0c;我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器&#xff1b;服务器先查询缓存&#xff0c;如果命中缓存&#xff0c;则立即返回存…

platform 总线

驱动的分离与分层思想 分离&#xff1a;硬件信息分离&#xff1b; 在编写硬件驱动的时候&#xff0c;需要操作许多硬件寄存器。比如gpio 驱动&#xff0c;你需要知道gpio控制器 寄存器的地址&#xff0c;你想要哪个gpio输出&#xff1f;或是输入? 这些操作最终都是靠设置寄存…

19 pandas 分层索引与计算

文章目录分层设置与查询数据index 为有序index 为无序(中文&#xff09;查看数据示例多层索引的创建方式&#xff08;行&#xff09;1、from_arrays 方法2、from_tuples 方法3、from_product 方法多层索引的创建方式&#xff08;列&#xff09;分层索引计算MultiIndex 参数表分…

Mybatis笔记整理

1. 相关文档地址 中文文档 https://mybatis.org/mybatis-3/zh/index.htmlMybatis可以配置成适应多种环境&#xff0c;不过每个SqlSessionFactory实例只能选择一种环境。Mybatis默认事务管理器是JDBC&#xff0c;连接池&#xff1a;POOLEDMaven仓库:下载地址<dependency>…

KVM-1、Linux 操作系统及虚拟化

1. 前言 一台计算机是由一堆硬件设备组合而成,在硬件之上是操作系统,操作系统与计算机硬件密不可分,操作系统用来管理所有的硬件资源提供服务,各个硬件设备是通过 总线 进行连接起来的: 在操作系统之上,需要一个人机交互接口,我们才能使用计算机对其发送指令,这个人机…

C语言【动态内存管理 后篇】

动态内存管理 后篇&#x1fac5;经典例题&#x1f926;‍♂️题目1&#x1f926;‍♂️题目2&#x1f926;‍♂️题目3&#x1f926;‍♂️题目4&#x1fac5;C/C程序的内存开辟前面的一篇文章动态内存管理 前篇&#xff0c;我们已经了解过了动态内存管理的相关信息&#xff0c…

数据库管理-第五十七期 多灾多难(20230218)

数据库管理 2023-02-18第五十七期 多灾多难1 网络震荡2 挂一大片3 恢复虚拟机总结第五十七期 多灾多难 2月第三周&#xff0c;怎么说呢&#xff0c;多灾多难的一周&#xff0c;一周两次严重故障&#xff0c;而且事情还都发生在24小时之内&#xff0c; 1 网络震荡 本周四一大…

不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向

不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向 最近&#xff0c;多所美国高校以及香港大学等都明确禁止在校使用ChatGPT等智能文本生成工具。GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种自然语言处理技术&#x…

04 C++提高编程

文件基本上是黑马程序员的文档&#xff0c;部分添加自己需要的内容&#xff0c;仅用于自己学习&#xff01;链接&#xff1a;黑马程序视频课程GitHub:源代码 C提高编程 本阶段主要针对C泛型编程和STL技术做详细讲解&#xff0c;探讨C更深层的使用 1 模板 1.1 模板的概念 模…