3-10〔OSCP ◈ 研记〕❘ WEB应用攻击▸XSS攻击理论基础

      郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 

    💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥 
    更多文章戳👉
Whoami!-CSDN博客🚀

​​​​​​


𖤐 嘿,经过前面的预热,我们正式打开这扇门,来吧 ! 

𖤐 𝓗𝓮𝔂, 𝓪𝓯𝓽𝓮𝓻 𝔀𝓪𝓻𝓶-𝓾𝓹,𝔀𝓮'𝓻𝓮 𝓷𝓸𝔀 𝓸𝓯𝓯𝓲𝓬𝓲𝓪𝓵𝓵𝔂 𝓸𝓹𝓮𝓷𝓲𝓷𝓰 𝓽𝓱𝓲𝓼 𝓭𝓸𝓸𝓻,𝓒𝓸𝓶𝓮 𝓸𝓷 ! 


→ 信息收集

→ 漏洞检测

→ 初始立足点▸WEB应用攻击▸XSS攻击理论基础-----我们在这儿~ 🔥🔥🔥

→ 权限提升 

→ 横向移动

→ 报告/分析

→ 教训/修复  


目录

1.跨站脚本攻击(XSS)

1.1 XSS类型

1.1.1 存储型XSS(持久型XSS)

1.1.2  反射型XSS(非持久型XSS)

1.1.3 基于DOM的XSS

1.1.3.1 什么是DOM

1.DOM可视化表示

2.HTML文件与DOM树的区别

3.DOM树的三大特点

4.示例说明

1.1.3.2 DOM XSS概述

1.与传统XSS的对比

2.DOM型XSS攻击流程

1.1.3.3 防御策略与最佳实践

1.关键防御措施

2.框架安全实践

3.检测与排查建议

1.2 JavaScript概述

1.2.1 JavaScript在Web中的角色

​1.2.2 JavaScript 的双面性:功能与风险

1.2.3 JavaScript概述

1.3 识别XSS漏洞

1.3.1 XSS漏洞识别流程

1.3.2 常见XSS入口点

1.3.3 特殊字符过滤检测

 1.3.4 Web应用程序编码方式

💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬


1.跨站脚本攻击(XSS)

        跨站脚本攻击(XSS)是一种利用网站对用户信任的安全漏洞,攻击者通过注入恶意脚本(如:JavaScript)到网页中,当其他用户访问时执行这些脚本。曾经被认为是低风险漏洞,如今XSS已成为高风险且普遍的安全威胁。
        XSS漏洞根源在于数据清理不足:即Web应用程序未能正确处理用户输入,未删除或转换危险字符和字符串,导致攻击者能够注入并执行恶意代码。

1.1 XSS类型

 XSS类型对比表:

类型存储机制影响范围持久性触发方式
🔒 存储型XSS恶意代码存储在服务器数据库所有访问受影响页面的用户长期存在用户浏览正常页面
↪️ 反射型XSS不存储,通过URL参数传递仅点击恶意链接的用户一次性用户点击特制链接

1.1.1 存储型XSS(持久型XSS)

解释:存储型XSS是将恶意内容“存储”在服务器上,之后当任何人访问该页面时,恶意代码就会自动执行,影响到所有访问该页面的用户。

比喻:就像把一张恶意纸条放入公共邮箱,所有查看邮箱的人都会受到影响。

详细步骤:

  • 用户输入评论 - 在输入框提交包含恶意JavaScript的文本(如:

    <script>alert('XSS Attack!')</script>
  • 客户端操作 - 点击“提交”按钮,评论内容通过AJAX或表单提交发送到服务器端。

  • 服务器端存储 - 未经充分过滤直接将评论内容存入数据库的某个表中。

  • 数据库保存 - 保存的内容若没有做适当的过滤或转义,恶意的 <script> 标签也会一起存储)。

  • 展示评论 - 其他用户访问时该页面时,网站从数据库读取并展示评论内容,恶意的 <script> 标签可能会被插入到页面中,发给客户端浏览器。

  • XSS攻击发生 - 客户端浏览器渲染页面时,恶意的JavaScript代码就会被执行。例如,恶意的JavaScript代码触发弹出警告框,或者进行其他有害操作(例如窃取用户的Cookies、重定向用户等)。


1.1.2  反射型XSS(非持久型XSS)

比喻:就像收到含恶意链接的邮件,只有点击链接的人才会受到影响。恶意信息就会通过链接进入到你的浏览器中。

详细步骤:

  • 攻击者构造恶意URL
  • 诱导用户点击
  • 服务器返回含恶意代码的响应
  • 浏览器执行恶意脚本

特点:

  • 攻击恶意代码不存储在服务器上
  • 通过URL参数传递恶意载荷
  • 需要社交工程诱导用户点击

1.1.3 基于DOM的XSS

1.1.3.1 什么是DOM

DOM(文档对象模型) 是浏览器用来表示和操作网页的内部数据结构。当网页加载时,浏览器将HTML转换为树形结构(DOM):每个标签、文本和属性都成为树的一个节点。浏览器根据这个结构渲染页面。

1.DOM可视化表示

2.HTML文件与DOM树的区别

特性HTML文件DOM树
本质静态纯文本文件动态树状结构
内容标签、属性和内容节点(Node)及其关系
状态固定不变可动态修改,通过JavaScript修改
用途描述网页结构和内容浏览器内部页面表示

样式:

3.DOM树的三大特点

① 树状结构

  • 每个HTML元素都是一个节点(Node)

  • 节点间形成父子关系

  • html是根节点,headbody是其子节点

② 动态性(⚠️ 安全关键)

  • 可通过JavaScript动态修改

  • 能添加、删除或修改节点

  • 正是这一特性导致DOM XSS攻击的可能性

③ 可访问性

  • 可通过JavaScript访问任何节点

  • 提供丰富的API进行操作

4.示例说明

以上是JavaScript 代码。功能:修改 <h1> 标签内容。该代码通过操作 DOM(文档对象模型),实现对网页中 <h1> 标签文本内容的修改,各部分说明如下:

代码片段类型作用说明
document对象JavaScript 中代表当前网页文档的根对象,是访问和操作整个 DOM 树的入口。
.querySelector('h1')方法document 的内置方法,通过 CSS 选择器查找元素:
'h1' 为 CSS 选择器,匹配所有 <h1> 标签;
- 仅返回第一个匹配的 <h1> 元素。
.textContent属性DOM 元素的内置属性,用于获取或设置元素的纯文本内容(不含 HTML 标签)。
= '你好!'赋值操作将找到的 <h1> 元素的 textContent 属性值设置为 '你好!',替换其原有文本。

1.1.3.2 DOM XSS概述

基于DOM的XSS攻击利用浏览器解析机制,通过修改页面DOM植入恶意JavaScript代码,用户浏览器中触发执行

1.与传统XSS的对比

特性传统XSS(存储型)基于DOM的XSS
执行位置服务器端纯客户端(通过JS操作)
服务器依赖需要服务器返回恶意代码不依赖服务器响应
检测难度相对容易难以检测
数据流服务器-客户端客户端内部

2.DOM型XSS攻击流程

  • 🖊️ 用户输入提交 - 在网页的表单/输入框提交包含恶意脚本的评论内容:

    <script>alert('XSS Attack!');</script>
  • 🔄 客户端处理 - 网站JavaScript代码从网页上获取评论内容,并通过document.getElementById方法动态地将其插入到网页中:

    // 危险示例:未经过滤直接使用
    const userInput = document.getElementById('comment').value;
  • 🌳 DOM操作 - 通过innerHTMLdocument.write()等方法动态插入内容

    document.body.innerHTML += userInput; // 直接插入DOM
  • ⚡ 浏览器解析 - 如果网站的JavaScript代码没有正确处理你的输入,恶意的 <script> 标签会被当做代码直接执行(直接弹框),即在客户端浏览器执行了恶意 <script> 标签。

  • 💥 攻击执行 - 恶意脚本在用户浏览器中执行,比如:窃取cookie、重定向等。


1.1.3.3 防御策略与最佳实践

1.关键防御措施

  • ✅ 输入验证与过滤

    • 对所有用户输入进行严格验证

    • 使用白名单机制允许安全内容

  • ✅ 安全DOM操作

    • 避免使用innerHTMLouterHTMLdocument.write()

    • 优先使用textContentsetAttribute

  • ✅ 使用安全API

    • 采用DOMPurify等库进行HTML清理

    • 实施内容安全策略(CSP)

  • ✅ 编码输出

    • 对动态内容进行适当的编码

    • 区分HTML编码、JavaScript编码和URL编码

2.框架安全实践

// ❌ 危险方式:直接插入HTML
element.innerHTML = userInput;// ✅ 安全方式:文本内容设置
element.textContent = userInput;// ✅ 安全方式:使用专用API
const safeHTML = DOMPurify.sanitize(userInput);
element.innerHTML = safeHTML;
// React示例:自动转义内容
<div>{userInput}</div> // 自动安全处理// Vue示例:安全模板渲染
<template>{{ userInput }}</template>

3.检测与排查建议

代码审查要点

  • 检查所有使用innerHTML的地方

  • 审查eval()setTimeout()setInterval()中的动态代码

  • 检查URL解析和处理逻辑(locationhashsearch

测试方法

  • 使用自动化扫描工具(如OWASP ZAP、Burp Suite)

  • 手动测试:输入特殊字符观察行为

  • 检查数据流:从源点到危险函数调用


1.2 JavaScript概述

JavaScript是一种高级编程语言,已成为现代Web应用程序的核心组成部分。所有现代浏览器都内置JavaScript引擎,能够在浏览器中直接执行JavaScript代码。

1.2.1 JavaScript在Web中的角色

浏览器处理流程


​1.2.2 JavaScript 的双面性:功能与风险

1.正常功能

JavaScript的核心作用:访问和修改页面DOM(文档对象模型),从而实现:

  • 交互式用户体验(如点击按钮后即时更新内容)
  • 动态页面效果(无需重新加载整个页面即可更新内容)
  • 提升网页的交互性和响应速度

2.安全风险(从攻击者角度)

若攻击者成功将恶意JavaScript代码注入应用程序,可利用其DOM访问能力实施不法行为:

  • 篡改页面元素(如重定向登录表单至钓鱼网站)
  • 窃取敏感信息(如提取用户输入的密码)
  • 盗用用户会话(如获取并利用会话 Cookie)

1.2.3 JavaScript概述

函数声明与调用

// 第1-3行:函数声明
function multiplyValues(x, y) {return x * y;
}// 第5行:函数调用
let a = multiplyValues(3, 5);// 第6行:控制台输出
console.log(a); // 输出: 15

🔤 弱类型语言特性

JavaScript是弱类型语言,变量类型由赋值自动推断,无需给变量定义类型:

let variable = 15;     // 数字类型
variable = "文本";     // 现在变为字符串类型
variable = true;       // 现在变为布尔类型

🛠️ 浏览器“开发者工具”实践

  • 在Firefox浏览器打开about:blank空白页

  • 通过以下方式打开开发者工具:

    • 菜单:Web开发者 → Web控制台

    • 快捷键:Ctrl+Shift+K (Windows) / Cmd+Shift+K (Mac)

    • 在控制台中,执行函数并检索输出。将值打印到浏览器的控制台console。


1.3 识别XSS漏洞

1.3.1 XSS漏洞识别流程

1.3.2 常见XSS入口点

入口点类型示例风险等级
🔍 搜索框网站搜索功能🔴 高风险
💬 评论框博客评论、论坛回复🔴 高风险
📝 表单字段联系表单、注册表单🔴 高风险
👤 用户资料用户名、个人描述🟡 中风险
🌐 URL参数?search=keyword🔴 高风险
📊 文件上传文件名、元数据🟡 中风险

💡 检测提示:重点关注所有接受用户输入的区域,特别是那些会将输入内容返回给用户的功能。


1.3.3 特殊字符过滤检测

如果应用程序不删除或编码这些字符,说明它容易受到XSS攻击。因为应用程序将这些字符解释为代码,从而使额外的代码得以执行。

关键测试字符集:

字符HTML用途XSS测试意义编码表示
< >标签界定脚本标签注入&lt; &gt;
' "字符串界定属性逃逸&apos; &quot;
{ }代码块界定JS函数注入&#123; &#125;
&实体引用编码绕过&amp;
;语句结束多语句注入&#59;

测试方法:

  1. 输入基本测试载荷

    <script>alert('XSS')</script>   # 弹框效果
  2. 检查响应

  • 如果弹窗出现 → 说明漏洞存在
  • 如果字符被编码/过滤 → 需要进一步分析

 1.3.4 Web应用程序编码方式

编码(Encoding)在Web应用中的作用,尤其是利用编码方式进行XSS(跨站脚本攻击)。虽然有多种类型的编码,但在Web应用程序中最常遇到的是HTML编码URL编码

📊 编码类型对比表:

编码类型目的示例安全意义

🔗 URL编码

百分比编码

保护URL结构空格 → %20防止URL注入
🌐 HTML编码防止特殊意义的字符(比如 <, >, &, ", ' 等)被误解释为HTML标签、属性或脚本的一部分< → &lt;XSS防护关键
📝 JavaScript编码JS字符串安全" → \x22防止JS注入

🛡️ HTML编码详解:

字符编码说明
<&lt;小于号
>&gt;大于号
&&amp;和号
"&quot;双引号
'&apos;单引号

HTML编码示例

<!-- 原始文本: -->
<script>alert("XSS")</script><!-- HTML编码后: -->
&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;

URL编码示例:

原始URL:https://example.com/search?q=<script>
编码后:https://example.com/search?q=%3Cscript%3E

又例如:
如果想在网页上显示 <>,直接写 < 和 >会让浏览器误认为它们是HTML标签的标记。需要使用HTML编码来显示这些字符。即:<和>以文本方式输出,而非HTML标签的标记。


💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬

您的支持是我创作最大的动力!

 

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

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

相关文章

《嵌入式硬件(四):温度传感器DS1820》

一、DS1820的引脚DS1820单总线数字温度计&#xff1a;异步串行半双工特性&#xff1a;1&#xff09;独特的单线接口&#xff0c;只需 1 个接口引脚即可通信2&#xff09;多点&#xff08;multidrop&#xff09;能力使分布式温度检测应用得以简化3&#xff09;不需要外部元件4&a…

langchain 输出解析器 Output Parser

示例中使用的公共代码&#xff1a; from langchain_deepseek import ChatDeepSeek chat ChatDeepSeek(model"deepseek-chat",temperature0,api_keyAPI_KEY, )使用方法&#xff1a; 引入解析器实例化解析器调用解析器的get_format_instructions()获得提示词&#xff…

LeetCode算法日记 - Day 37: 验证栈序列、N叉树的层序遍历

目录 1. 验证栈序列 1.1 题目解析 1.2 解法 1.3 代码实现 2. N叉树的层序遍历 2.1 题目解析 2.2 解法 2.3 代码实现 1. 验证栈序列 https://leetcode.cn/problems/validate-stack-sequences/description/ 给定 pushed 和 popped 两个序列&#xff0c;每个序列中的 值…

金融数据库--3Baostock

一、 Baostock 是什么&#xff1f;Baostock&#xff08;宝硕股票&#xff09;是一个免费、开源的证券数据平台&#xff08;SDK&#xff09;&#xff0c;旨在为金融量化投资者、研究人员和学生提供稳定、准确、易用的A股历史数据和相关金融数据。其核心是一个 Python 库&#xf…

微信小程序-1-微信开发者工具环境搭建和初始化创建项目

文章目录1 小程序概述1.1 什么是微信小程序1.2 大前端概念1.3 账号注册1.4 开发流程1.5 小程序成员2 创建项目2.1 创建项目流程2.2 创建项目2.3 本地开发支持http3 项目目录3.1 项目目录结构3.2 配置文件3.2.1 app.json(全局配置)3.2.2 xxx.json(页面配置)3.2.3 project.config…

Go语言开发AI应用

为什么选择Go语言开发AI应用在人工智能快速发展的今天&#xff0c;选择合适的编程语言对于AI应用的成功至关重要。虽然Python长期以来被认为是AI开发的首选语言&#xff0c;但Go语言正在逐渐崭露头角&#xff0c;成为AI应用开发的有力竞争者。Go语言的核心优势1. 卓越的性能表现…

10. 游戏开发中的TCP与UDP

1.TCP和UDP 2.TCP为什么慢于UDP 3.可靠UDP1.TCP和UDP 1).通过打电话的方式说明TCP和UDPa.TCP(传输控制协议), 就像打电话- 需要先拨号, 接通, 问候(建立连接)- 你一句, 我一句, 对方没有听清会要求你重复(确认与重传)- 保证对话有条不紊, 内容准确无误(可靠, 有序)- 如果信号不…

CMap常用函数

CMap 是 MFC 中用于存储键值对&#xff08;key-value&#xff09;的关联容器类&#xff0c;类似于 C 标准库中的 std::map&#xff0c;但依赖 MFC 框架实现。它采用哈希表&#xff08;Hash Table&#xff09;作为底层数据结构&#xff0c;支持高效的键值查找、插入和删除操作。…

Rocky9.0去堆叠双发arp(支持“ARP 广播双发”)

摘要 在去堆叠/MLAG 场景下&#xff0c;默认 bonding 只会以单口回复 ARP&#xff0c;另一台交换机收不到 ARP Reply。本文在 Linux bonding 驱动中增加参数 arp_broadcast_mode&#xff0c;当开启时对 ARP 包临时切换到 广播模式&#xff0c;实现双口同时发 ARP Reply。文内提…

网页连接摄像头

摄像机处理 <!-- camera_solve.html --> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

FPGA雷达信号处理之:自适应门限阈值

一、原理 参考这个博主&#xff0c;讲的很仔细&#xff1a;基于脉冲功率的雷达脉冲参数检测原理详解 二、FPGA实现 使用system generator搭建算法模型如下&#xff1a; 在这里&#xff0c;滤波器窗长度为8&#xff0c;原博主设置为50效果更好&#xff0c;门限公式如下&#xf…

Vue 中实现选中文本弹出弹窗的完整指南

在现代 Web 应用中&#xff0c;选中文本后显示相关操作或信息是一种常见的交互模式。本文将详细介绍如何在 Vue 中实现选中文本后弹出弹窗的功能&#xff0c;包括其工作原理、多种实现方式以及实际项目中的应用示例。 一、实现原理 1. 文本选中检测机制 浏览器提供了 Select…

第4节-排序和限制-FETCH

摘要: 在本教程中&#xff0c;你将学习如何使用 PostgreSQL 的 FETCH 子句从查询中检索部分行。 PostgreSQL FETCH 简介 在 PostgreSQL 中&#xff0c;OFFSET 子句的作用类似于 LIMIT 子句。FETCH 子句允许你限制查询返回的行数。 LIMIT 子句并非 SQL 标准的一部分。不过&#…

洛谷 P2680 [NOIP 2015 提高组] 运输计划(二分答案 + 树上差分)

题目链接题目概括与评价 很经典&#xff0c;突破口藏的很深&#xff0c;求最小值这里&#xff0c;是问题切入点&#xff0c;想到用二分答案&#xff0c;然后思考怎么写 f_check 函数。二分答案树上差分。代码 #include <iostream> #include <vector> #include <…

接力邓承浩,姜海荣能讲好深蓝汽车新故事吗?

出品 | 何玺排版 | 叶媛深蓝汽车迎来新话事人。9月5日&#xff0c;新央企长安汽车旗下品牌深蓝汽车传出新的人事调整。多家业内媒体报道称&#xff0c;荣耀前中国区CMO姜海荣已正式加入长安汽车&#xff0c;并出任旗下深蓝汽车CEO一职。原CEO邓承浩则升任深蓝汽车董事长&#x…

esp32-c3写一个收集附近 WiFi 和蓝牙信号通过

下面给你一个基于 ESP-IDF(v5.x) 的完整示例&#xff1a;在 ESP32-C3 上同时扫描附近 Wi-Fi 与蓝牙&#xff08;BLE&#xff09;广播&#xff0c;把结果以 JSON 结构统一输出到串口&#xff0c;并且可可选通过 MQTT 上报到服务器&#xff08;打开一个宏即可&#xff09;。日志默…

文心大模型 X1.1:百度交出的“新深度思考”答卷

文心大模型 X1.1&#xff1a;百度交出的“新深度思考”答卷 2025年9月9日&#xff0c;WAVE SUMMIT 2025深度学习开发者大会在北京正式召开&#xff0c;由深度学习技术及应用国家工程研究中心主办&#xff0c;百度飞桨与文心大模型联合承办。大会上&#xff0c;百度正式发布了基…

开始 ComfyUI 的 AI 绘图之旅-Flux.1图生图(八)

文章标题一、Flux Kontext Dev1.关于 FLUX.1 Kontext Dev1.1 版本说明1.2 工作流说明1.3 模型下载2.Flux.1 Kontext Dev 工作流2.1 工作流及输入图片下载2.2 按步骤完成工作流的运行3.Flux Kontext 提示词技巧3.1 基础修改3.2 风格转换3.3 角色一致性3.4 文本编辑4.常见问题解决…

Java 生成微信小程序二维码

1. java 二维码生成工具类import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.pdatao.api.controller.file.FileController; import com.pdatao.api.error.CommunityException; import org.apache.commons.io.IOUtils; import org.springframe…

智慧健康触手可及:AI健康小屋——未来健康管理的全能守护者

AI健康小屋&#xff0c;这座融合人工智能、物联网与医疗科技的“健康堡垒”&#xff0c;正悄然重构健康管理生态。它以科技为引擎&#xff0c;将专业医疗资源下沉至社区、企业、家庭&#xff0c;通过智能检测、精准分析、个性化干预&#xff0c;实现从疾病治疗到主动预防的健康…