XSS新攻击的深入剖析:新场景利用与系统化防御策略
1398133550745333 WEB安全 210浏览 · 2025-03-12 05:40

XSS新攻击的深入剖析:新场景利用与系统化防御策略

前言

xss挖掘难道还停留在分三种基础类型?其实xss还有更多的隐藏在其他场景中的,这些一般都是容易忽略的,下面详细分析分析,从代码层面也会讲解漏洞原因,还有目前xss的各种修复手法

其他常见的场景

模板渲染

有去看过一些 cms,确实是这样的,比如模板的特殊标签

th:text 用于展示纯文本,会对特殊字符进行转义 th:utext 则不进行转义,直接展示原始 HTML 内容 当获取后端传来的参数中带有 HTML 标签时,th:text 不会解析这些标签,而 th:utext 会解析并渲染它们。这类似于 Vue 中的 v-text 和 v-html





这个规范一下就 ok 了

文件上传 xss

src 中经常遇到的就是 svg ,html,xml,pdf 没有危害就不管了

我们只需要关注一下文件应该怎么写,这个才是重点

html 就很简单,就是插入我们的脚本就 ok

svg

svg 可以 xss 的原因就是因为可以解析 script 标签

xml

这个比较鸡肋,需要解析 xml 才可以,我觉得最常用的就是 svg 了

组件漏洞

JQuery-XSS 漏洞

CVE-2020-11022/CVE-2020-11023

CVE-2020-11022 和 CVE-2020-11023 是 jQuery 的两个跨站脚本(XSS) 漏洞,影响 jQuery 1.2 - 3.5.0 版本,主要与 html() 方法有关。

CVE-2020-11022

影响 $().html() 方法 允许攻击者通过不受信任的 HTML 代码执行恶意 JavaScript 代码 例如,插入 script、iframe、onerror 等危险标签绕过安全检查 CVE-2020-11023

影响 $().html() 方法在 SVG 元素中处理不当 允许攻击者注入恶意 JavaScript,导致 XSS

比如

然后下一个 cve 就是绕过



Swagger UI XSS 漏洞(CVE-2023-38418)

API 文档的 description、operationId、summary、contact 等字段可被插入恶意 HTML/JavaScript 代码 Swagger UI 在渲染这些字段时未对 HTML 进行适当的转义

比如

作者使用的就比较复杂了 最后是在远程文件https://jumpy-floor.surge.sh/test.yaml



所以需要等待一会才会弹出



漏洞代码修复

白名单

xss 的本质就是需要各种标签去解析,如果我们不能输入标签,那么就可以阻止 xss

我们只能输入字母、数字、下划线和空格

前端

但是我们如果仅仅只是前端过滤的话,任然可以被绕过,这在 src 中很常见


我们输入一个 1 然后抓包

然后再修改我们的 payload



所以开发的时候我们需要在后端写我们的过滤逻辑



后端

如果过滤在后端,无论我们是抓包还是前端输入,都会被拦截

即使我们使用 bp



可以看到还是需要进行数据的过滤




CSP 策略

内容安全策略(CSP:Content Security Policy)是一种由浏览器实施的安全机制(可理解为额外的安全层),旨在减少和防范跨站脚本攻击等安全威胁 核心原理:网站通过发送一个 CSP header 头部(也可以在 html 直接设置),告诉浏览器具体的策略(什么是授权的与什么是被禁止的),从而防止恶意内容的加载和执行 CSP 指令说明: default-src: 指定默认的加载内容的来源,如果未指定其他指令,则默认应用此指令 script-src: 指定允许加载 JavaScript 的来源 style-src: 指定允许加载样式表的来源 img-src: 指定允许加载图片的来源 connect-src: 指定允许向其发送请求的来源(例如 AJAX、WebSocket 连接等)

安全代码



我们重点关注 csp 的限制

限制所有资源(脚本、样式、图片等)只能来自同源(self),不允许外部来源的资源加载。



然后



可以看见 csp 起作用

特殊字符实体转义

可以看到把我们的关键 xss 代码转义了

我们尝试输入一段 xss 代码测试





可以看见成功转义了



我们看到代码部分,是会进入 htmlEscape 函数去转义



HttpOnly

如果 Cookie 设置了 HttpOnly,那么前端 JavaScript 无法读取 Cookie,即使攻击者利用 XSS 注入恶意脚本,也无法窃取 Cookie。

配置方法如下

三种



我们尝试弹一个 cookie

我们看看能不能窃取我们的 JSESSIONID





可以看到失败了,只能获取我们的



参考https://github.com/whgojp/JavaSecLab/wiki

0 条评论
某人
表情
可输入 255