DOM 型 XSS 攻击演示(附链接)

一、介绍

DOM(Document Object Model)型 XSS(Cross-Site Scripting)攻击是一种 Web 应用程序中的安全漏洞,其特点是攻击者成功地注入了恶意脚本,这些脚本在用户的浏览器中执行,从而导致恶意行为。DOM 型 XSS 攻击不同于传统的存储型 XSS,它发生在客户端,通过操作 DOM 实现攻击。

攻击步骤和原理:

恶意输入注入:

攻击者通过输入框、URL 参数等渠道将包含恶意脚本的输入数据提交到 Web 应用程序。

客户端DOM解析:

用户访问包含恶意输入的页面时,浏览器会解析 HTML 并构建 DOM 树。

DOM修改:

恶意脚本通过 JavaScrip t等方式对 DOM 进行修改。

脚本执行:

由于恶意脚本被插入到 DOM 中,浏览器在解析和执行 DOM 时会执行这些脚本,导致攻击成功。

防范措施:

输入验证和过滤:

对用户输入进行验证,仅接受合法和预期的输入。

输出转义:

在将用户输入嵌入到 DOM 中之前,对其进行适当的输出编码,防止执行恶意脚本。

安全的DOM操作:

避免使用容易受到攻击的 DOM 操作方法,如 innerHTML,而是使用更安全的 API。

Content Security Policy(CSP):

使用 CSP 头来限制允许加载和执行的脚本资源,减少 XSS 攻击的风险。

二、实操演示

环境准备:

如果搭建 Pikachu 靶场保姆级教程(附链接)icon-default.png?t=N7T8https://eclecticism.blog.csdn.net/article/details/135718722

测试:

打开咱们已经安装好了的 Pikachu 靶场,找到 DOM 型 xss 这一页面

尝试在输入框中输入一些值,然后点击 click me 

输入框下方显示 what do you see,如果读者在这毫无头绪可以试试打开 F12

可以看到这个 button 按钮绑定了一个点击事件,咱们重新输入一些值仔细观察

这里多了个 div,插入了一个 <a> 标签链接,地址是输入的值

咱们再输入一些敏感值试试

可发现没有做过滤,咱们复制这个点击事件的函数到调试器中寻找

两条结果全部找出,笔者在这复制源代码供读者们仔细分析

分析:

function domxss(){var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}

获取用户输入:

var str = document.getElementById("text").value;
  • 通过 document.getElementById("text") 获取页面上 id 为 "text" 的元素。
  • 使用 .value 获取该元素的值,即用户在该输入框中输入的内容。
  • 将获取的值赋给变量 str。

DOM 操作:

document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
  • 通过 document.getElementById("dom") 获取页面上 id 为 "dom" 的元素。
  • 使用用户输入的值 str 构建一个包含链接的 HTML 片段
  • 使用 .innerHTML 将动态生成的 HTML 内容插入到该元素的内部。

因为是插入到 HTML 标签内部,所以直接嵌入 JavaScript 标签不可行

这里先跟大家讲讲笔者最新发现的一种语法漏洞(原靶场作者只列出了两种)

攻击:

如果读者要想在 HTML 标签中执行 JavaScript 语法可以这样写

javascript:alert(/DOM 型 XSS 攻击成功/)

点击超链接时根据 href 属性跳转执行了 JavaScript 代码

这是更改链接,咱们还可以这样写

先闭合掉前面的废话

'

通过点击事件来让用户执行 JavaScript 代码

' οnclick="alert(/DOM 型 XSS 攻击成功/)"

发现闭合了 href 属性,点击事件也在里面,接下来就是模拟用户点击了

成功!别忘了 HTML 标签可以嵌套,所以咱们试试最后一种攻击方式

还是先闭合前面的 href 属性及 a 标签

'>

插入咱们想插入的标签

'>< img src="#" οnmοuseοver="alert(/DOM 型 XSS 攻击成功/)"

当用户鼠标移上去时就会弹窗被攻击

到这里基本上就结束啦,如果读者觉得对您有帮助麻烦评论点点赞收藏和关注,谢谢支持!! 

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

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

相关文章

OkHttp完全解读

一&#xff0c;概述 OkHttp作为android非常流行的网络框架&#xff0c;笔者认为有必要剖析此框架实现原理&#xff0c;抽取并理解此框架优秀的设计模式。OkHttp有几个重要的作用&#xff0c;如桥接、缓存、连接复用等&#xff0c;本文笔者将从使用出发&#xff0c;解读源码&am…

在WebSocket中使用Redis出现空指针异常解决方案

文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类&#xff0c;通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis&#xff0c;在…

金融行业现场故障处理实录

KL银行现场服务记录—HA故障 服务时间 2019年9月10日星期二 14&#xff1a;40 到2019年9月11日星期三 0&#xff1a;30 服务内容 排查redhat RHEL 6.4 一个节点cman启动故障。 &#xff08;1&#xff09;、查看系统日志&#xff1b; &#xff08;2&#xff09;、查看ha日志…

.ui文件相关

目录 ui类生成过程&#xff1a; 提问&#xff1a; 等以后自己熟练了用代码写这些样式内容&#xff0c;尽量用代码写&#xff0c;原因很简单&#xff1a; 用代码写的可以直接修改代码&#xff0c;但是在设计界面修改的东西&#xff0c;电脑没有QC这玩意&#xff0c;还真不好改…

每日一题 力扣514自由之路

514. 自由之路 题目描述&#xff1a; 电子游戏“辐射4”中&#xff0c;任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘&#xff0c;并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring &#xff0c;表示刻在外环上的编码&#xff1b;给定另一…

PHP语法

#本来是在学命令执行&#xff0c;所以学了学&#xff0c;后来发现&#xff0c;PHP语法和命令执行的关系好像没有那么大&#xff0c;不如直接学php的一些命令执行函数了。# #但是还是更一下&#xff0c;毕竟还是很多地方都要求掌握php作为脚本语言&#xff0c;所以就学了前面的…

【AI视野·今日Sound 声学论文速览 第四十七期】Fri, 12 Jan 2024

AI视野今日CS.Sound 声学论文速览 Fri, 12 Jan 2024 Totally 10 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Contrastive Loss Based Frame-wise Feature disentanglement for Polyphonic Sound Event Detection Authors Yadong Guan, Jiqing Han,…

八种Flink任务监控告警方式

目录 一、Flink应用分析 1.1 Flink任务生命周期 1.2 Flink应用告警视角分析 二、监控告警方案说明 2.1 监控消息队中间件消费者偏移量 2.2 通过调度系统监控Flink任务运行状态 2.3 引入开源服的SDK工具实现 2.4 调用FlinkRestApi实现任务监控告警 2.5 定时去查询目标库…

Ubuntu 22.04安装Nginx负载均衡

君衍. 一、编译安装Nginx二、轮询算法实现负载均衡三、加权轮询算法实现负载均衡四、ip_hash实现负载均衡 一、编译安装Nginx 这里我们先将环境准备好&#xff0c;我使用的是Ubuntu22.04操作系统&#xff1a; 这个是我刚安装好的&#xff0c;所以首先我们进行保存快照防止安装…

实战教学:用Semantic Kernel框架集成腾讯混元大模型应用

导语 | 众所周知&#xff0c;Semantic Kernel 主要支持国外的两款大模型&#xff0c;但这对于开发者而言&#xff0c;显然是不够的&#xff0c;尤其是当我们希望对接国内的大模型时&#xff0c;我们应该怎么做呢&#xff1f;如何用 Semantic Kernel 通过 oneapi 来集成腾讯混元…

如何对Microsoft 365中Loop文档进行权限划分

Microsoft 365中Loop文档的权限划分为两种&#xff1a;第一种是共享创意页面。第二种是共享特定的Loop组件。 共享创意页面。 进入创意页面后&#xff0c;点击右上角的“共享”-“页面链接”。 如上图所示&#xff0c;页面共享分三种类型。以“你选择的人”为例。添加要共享的…

iOS 文件分割保存加密

demo只是验证想法&#xff0c;没有做很多异常处理 默认文件是大于1KB的&#xff0c;对于小于1KB的没有做异常处理demo中文件只能分割成2个&#xff0c;可以做成可配置的N个文件分割拼接还可以使用固定的二进制数据&#xff0c;拼接文件开头或结尾 不论哪种拼法&#xff0c;目的…