Web渗透:XSS-DOM-based XSS

DOM-based XSS(基于DOM的跨站脚本攻击)是一种XSS攻击类型,其特点是恶意脚本通过操作文档对象模型(DOM)直接在客户端执行,而无需经过服务器的处理。这种攻击主要利用客户端JavaScript代码中的漏洞,使得攻击者能够在浏览器中注入并执行恶意代码。

DOM的基本概念

文档对象模型(DOM,Document Object Model)是Web开发中的一个编程接口,允许程序和脚本动态访问和更新文档的内容、结构和样式。DOM将HTML或XML文档表示为一个树状结构,每个节点代表文档的一部分,如元素、属性或文本。

1.树状结构:DOM将文档表示为一棵树。文档的每个部分(如HTML标签、属性和文本)都作为树中的一个节点。树的顶层节点称为根节点,对于HTML文档,根节点通常是 <html> 标签。

2.节点类型

元素节点:代表HTML标签,如 <div>、<p> 等。
属性节点:代表HTML标签的属性,如 id、class 等。
文本节点:代表HTML标签中的文本内容。
文档节点:代表整个文档。
注释节点:代表文档中的注释。

3.DOM API:浏览器提供一组JavaScript API,用于操作DOM树。这些API可以用来查找节点、修改节点内容、添加或删除节点等。

示例

以下是一个简单的HTML文档及其对应的DOM树结构示例:

<!DOCTYPE html>
<html>
<head>
    <title>Sample Page</title>
</head>
<body>
    <h1>Hello, World!</h1>
    <p>This is a sample page.</p>
</body>
</html>

这段HTML代码的DOM树结构可以表示为:

Document
 ├── html
 │   ├── head
 │   │   └── title
 │   │       └── "Sample Page"
 │   └── body
 │       ├── h1
 │       │   └── "Hello, World!"
 │       └── p
 │           └── "This is a sample page."

操作DOM的常用方法和属性

以下是一些常用的DOM操作方法和属性:

  1. 查找节点

    • document.getElementById(id): 根据元素的ID查找元素。

    • document.getElementsByTagName(tagName): 根据标签名称查找元素集合。

    • document.getElementsByClassName(className): 根据类名查找元素集合。

    • document.querySelector(selector): 使用CSS选择器查找第一个匹配的元素。

  2. 修改节点

    • element.innerHTML: 获取或设置元素的HTML内容。

    • element.textContent: 获取或设置元素的文本内容。

    • element.setAttribute(name, value): 设置元素的属性。

    • element.removeAttribute(name): 移除元素的属性。

    • element.style: 修改元素的样式属性。

  3. 创建和删除节点

    • document.createElement(tagName): 创建一个新的元素节点。

    • element.appendChild(newNode): 向一个元素节点添加子节点。

    • element.removeChild(childNode): 删除一个元素节点的子节点。

    • element.replaceChild(newNode, oldNode): 替换一个子节点。

示例代码

下面是一个使用JavaScript操作DOM的示例:

<!DOCTYPE html>
<html>
<head>
    <title>DOM Example</title>
</head>
<body>
    <h1 id="header">Hello, World!</h1>
    <button onclick="changeContent()">Click me</button>
    <script>
        function changeContent() {
            // 查找元素
            var header = document.getElementById('header');
            // 修改内容
            header.textContent = 'Hello, DOM!';
            // 创建新元素
            var newParagraph = document.createElement('p');
            newParagraph.textContent = 'This is a new paragraph.';
            // 添加新元素到body
            document.body.appendChild(newParagraph);
        }
    </script>
</body>
</html>

在这个示例中,当用户点击按钮时,changeContent 函数会被调用,该函数修改 <h1> 元素的文本内容,并创建并添加一个新的 <p> 元素到文档的 body 中,通过DOM,开发者可以动态地操控网页内容,创建交互式的Web应用程序。

效果:

未点击前:

点击后:

可以看到此时通过DOM操作方法就可以不经过后端程序直接在用户前端中对页面进行内容修改。

DOM相关的概念与操作方法讲述完毕后接着来阐述DOM类型的XSS漏洞;这边是以pikachu靶场中的DOM型XSS页面为例子进行解析:

1.打开页面也是有一个搜索框,但是由于时dom型的xss所以此时相关的关键代码是已经在我们页面代码中显示了,这个时候我们可以通过定位click me这个按钮的标签去查看点击按钮后触发的函数是什么。

2.通过浏览器中的标签定位功能我们锁定到这个按钮对应的input标签,发现按下这个按钮后将会触发domxss()这个javascript函数

3.接着我们可以通过ctrl + u 快捷键查看当前的页面代码,定位至该函数处

这个时候我们来剖析一下这个代码的作用,在剖析之前我先将受影响的HTML代码放在前面:

   <!--<a href="" onclick=('xss')>-->
  <input id="text" name="text" type="text"  value="" />
  <input id="button" type="button" value="click me!" onclick="domxss()" />
 <div id="dom"></div>
JS代码:
  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;

  • 从输入框中获取用户输入的值,并将其存储在变量 str 中。

document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";

  • 使用 str 的值创建一个链接,并将这个链接设置为 <div> 元素(ID为 dom)的内部HTML内容,链接的文本显示为 "what do you see?"。

原理说完后接着来说一下利用的方式,以下就是两个相关的payload,以及其利用后的情况:

payload①
'><img src="#" onmouseover="alert('xss')">

输入后的<a>标签的完整语句:

<a href='"'><img src="#" onmouseover="alert('xss')">"'>what do you see?</a>

<a href='"'>

  • 定义了一个超链接(<a>元素),其href属性设置为'(单引号)。由于引号没有匹配,这里可能是为了展示如何利用不匹配的引号引发XSS。

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

  • 定义了一个图片元素(<img>),其src属性设置为#(一个无效的图片源)。

  • onmouseover="alert('xss')"是一个事件处理器,当用户将鼠标移到图片上时,会执行alert('xss'),弹出一个警告框,显示xss。这就是XSS攻击的一部分,执行恶意JavaScript代码。

"'>what do you see?</a>

  • "'>what do you see?:这是显示给用户的链接文本。

  • </a>:关闭超链接标签。

攻击效果:此时页面中显示了一张破损的图片

这个时候我们将鼠标放置这个图片上就可以触发弹窗,攻击成功。

payload②
' onclick="alert('xss')">

将payload带入函数代码中的<a>标签得到:

<a href='"' onclick="alert('xss')">"'>what do you see?</a>

<a href='"'>

  • 定义了一个超链接(<a>元素),其href属性设置为'(单引号)。这个属性值是不完整的,并且含有引号,这可能是为了演示如何利用引号破坏HTML结构,导致XSS漏洞。

onclick="alert('xss')"

  • 定义了一个点击事件处理器,当用户点击这个链接时,执行alert('xss')。这会弹出一个警告框,显示xss,演示XSS攻击。

"'>what do you see?</a>:
  • "'what do you see?:这是显示给用户的链接文本。

  • </a>:关闭超链接标签。

攻击效果:点击超链接后触发弹窗

至此Dom型XSS的原理、利用方式阐述完毕

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++入门超详细解释

C入门 文章目录 C入门框架命名空间 namespace &#xff08;不常用&#xff09;命名空间的使用方式&#xff08;三种&#xff09;using namespace std;\<iostream>coutendlcincout的使用命名冲突缺省参数&#xff08;省钱的省&#xff09;缺省参数分类全缺省参数半缺省参数…

使用阿里开源的Spring Cloud Alibaba AI开发第一个大模型应用

背景 前段时间看到Spring推出了SpringAI&#xff0c;可以方便快速的接入ChatGPT等国外的大模型&#xff0c;现在阿里巴巴也紧追脚步推出了Spring Cloud Alibaba AI&#xff0c;Spring Cloud Alibaba AI 目前基于 Spring AI 0.8.1 版本 API 完成通义系列大模型的接入。通义接入…

Golang | Leetcode Golang题解之第172题阶乘后的零

题目&#xff1a; 题解&#xff1a; func trailingZeroes(n int) (ans int) {for n > 0 {n / 5ans n}return }

Linux系统开机自启动脚本(案例:Raspberry Pi 4B脚本)

前言&#xff1a;本篇博客为手把手教学的 Linux 系统开机自启动脚本教程&#xff0c;且额外包含有 Raspberry Pi 4B 的开机自启动案例。日常工程项目中往往需要 Linux 系统能够自启动一些代码程序&#xff0c;本篇博客利用虚拟机下的 Ubuntu 自启动脚本来进行教学&#xff0c;且…

【PS】提取手写签名

准备工具&#xff1a; 纸张&#xff1a;用于承载签名&#xff1b; 笔&#xff1a;用于签名&#xff1b; 手机&#xff1a;用于拍摄签名&#xff1b; Adobe Photoshop 版本: 12.0.3 (12.0.3x20101211 [20101211.r.1222 2010/12/11:02:00:00 cutoff; r branch]) x32&#xff1a;用…

多路h265监控录放开发-(8)完成摄像机管理的修改和删除功能

xviewer.h public:XViewer(QWidget* parent Q_NULLPTR);//编辑摄像机void SetCam(int index);//121 public slots:void AddCam(); //新增摄像机配置120void SetCam(); //121void DelCam(); //121 private:Ui::XViewerClass ui;QMenu left_menu_; xviewer.cpp void XView…

React的State和setState

如何确地使用 State 不要直接修改 State.修改State应该使用 setState():构造函数是唯一可以给 this.state 赋值的地方 State 与 props 类似&#xff0c;但是 state 是私有的&#xff0c;并且完全受控于当前组件 我们可以在我们的自定义组件中添加私有的State jcode class C…

web-原生Ajax

概念: Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML。 作用: 数据交换:通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术&#xff0c;如…

Introduction to linear optimization 第 2 章课后题答案 11-15

线性规划导论 Introduction to linear optimization (Dimitris Bertsimas and John N. Tsitsiklis, Athena Scientific, 1997)&#xff0c; 这本书的课后题答案我整理成了一个 Jupyter book&#xff0c;发布在网址&#xff1a; https://robinchen121.github.io/manual-introdu…

Kafka第一篇——内部组件概念架构启动服务器zookeeper选举以及底层原理

目录 引入 ——为什么分布式系统需要用第三方软件&#xff1f; JMS 对比 组件 架构推演——备份实现安全可靠 &#xff0c; Zookeeper controller的选举 controller和broker底层通信原理 BROKER内部组件 ​编辑 topic创建 引入 ——为什么分布式系统需要用第三方软件&#…

游戏本地化以拓展海外市场

Logrus IT Korea的总监元庆燕&#xff08;KyoungYeon Won&#xff09;发表了一场关于“游戏本地化”的讲座&#xff0c;讲述了独立游戏开发者如何在梦想拓展海外市场的过程中&#xff0c;正确地本地化他们的游戏以满足国际市场的期望&#xff0c;以及实现这一重要任务的过程。 …

Java——包

一、包 1、简要介绍 在Java编程语言中&#xff0c;包&#xff08;Package&#xff09; 是一种用来组织和管理类&#xff08;Class&#xff09;和接口&#xff08;Interface&#xff09;的机制。包为开发者提供了一种逻辑分组的方式&#xff0c;使代码更加模块化、结构化和易于…

k8s部署wordpress及性能优化

镜像版本&#xff1a;wordpress mysql版本&#xff1a;mysql:8.0.27 部署wordpress&#xff1a;v1 此版本包含wordpress基础服务&#xff0c;可访问&#xff0c;但是一旦pod重新创建会丢失数据&#xff0c;文章中的图片等也会丢失&#xff0c;且只又一个pod&#xff0c;性能…

基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 CNN-GRU模型架构 4.3 CNN-GRU结合PSO的时间序列预测 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软…

20240622 每日AI必读资讯

&#x1f916;力压GPT-4o&#xff01;新王Claude 3.5 Sonnet来了&#xff0c;直接免费可用 - 新模型在推理、知识和编码能力评估方面超越了以前的版本和竞争对手GPT 4o模型&#xff0c;同时其运行速度是Claude 3 Opus的两倍。 - 该模型可在http://Claude.ai和Claude iOS应用上…

牛客练习题打卡--redis

A list保证数据线性有序且元素可重复&#xff0c;它支持lpush、blpush、rpop、brpop等操作&#xff0c;可以当作简单的消息队列使用&#xff0c;一个list最多可以存储2^32-1个元素; redis中set是无序且不重复的; zset可以按照分数进行排序 &#xff0c;是有序不重复的; Redi…

5步快速了解电商渠道数字化管理||电商API数据采集|数据分析

随着电商平台的飞速发展&#xff0c;电商渠道占据品牌经销渠道的比重越来越大&#xff0c;以前只有线下经销渠道的时代已经结束&#xff0c;但是随着渠道的拓展&#xff0c;其中出现了很多问题&#xff0c;如线上渠道或者店铺数量更大、扰乱秩序成本更低、日常上线和下线变动价…

『FPGA通信接口』LVDS接口(4)LVDS接收端设计

文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述 接收端的传输模型各个属性应该与LVDS发送端各属性一致&#xff0c;例如&#xff0c;如果用于接收CMOS图像传感器的图像数据&#xff0c;则接收端程序的串化因子、通道个…

ardupilot开发 --- Jetson Orin Nano 后篇

我拼命加速&#xff0c;但贫穷始终快我一步 0~1920. visp-d455&#xff1a;基于IBVS的Pixhawk无人机视觉伺服20.1 基础关于连接、通讯、UDP forward服务&#xff1a;一些相关的、有用的例程Linux C程序的gdb断点调试搭建仿真解决【testPixhawkDroneTakeoff.cpp例程能解锁但起飞…

unity-调用讯飞星火语音唤醒-新版windowsSDK

调用讯飞星火语音唤醒-新版windowsSDK 先贴一张在unity中 wins系统下成功调用新版的讯飞windowsSDK的运行截图 为什么要用讯飞的语音唤醒&#xff1f; 项目中需要在unity和win系统下进行语音唤醒开启语音对话&#xff0c;而语音唤醒比较成熟的方案大多都是在linux系统下的&…