分类:
- 框架或三方库的XSS
- 浏览器或插件的XSS
- 客户端预览内核的XSS
说明:使用框架开发的或第三方库引用操作的,默认安全写法会自带过滤,所以测试此类的应用需存在漏洞版本或不安全写法导致XSS;同样UXSS也需要存在漏洞的浏览器版本或插件导致;MXSS也要不同环境下的转变解析导致,需多测试。
这三类xss漏洞存在几率低
Vue-XSS

注:使用vue.js开发的网站,出现漏洞的几率很低
启动
npm run dev
测试:
payload
<img src="x" onerror="alert('XSS')" />
修复:使用文本插值({{}})代替 v-html
<template>
<div>
<h1>XSS 漏洞演示</h1>
<input v-model="userInput" placeholder="输入你的内容" />
<button @click="showContent">显示内容</button>
<div v-html="displayContent"></div> //写法一(不安全的写法),将数据作为原始 HTML 解析并插入到 DOM 中,造成xss
<!-- <div>{{ displayContent }}</div>--> //写法二(一般默认,安全),直接转义为纯文本
</div>
</template>
<script>
export default {
data() {
return {
userInput: '', // 用户输入
displayContent: '' // 显示的内容
};
},
methods: {
showContent() {
// 直接将用户输入的内容渲染到页面
this.displayContent = this.userInput;
}
}
};
</script>
写法一(不安全)
<div v-html="displayContent"></div> //将数据作为原始 HTML 解析并插入到 DOM 中,造成xss

写法二(默认且安全)
<div>{{ displayContent }}</div> //写法二(一般默认,安全),直接转义为纯文本
转义为纯文本了,只显示不执行

React-XSS

React 是一个用于构建用户界面的 js 库。
启动
npm install
npm start
源码
function App() {
const [userInput, setUserInput] = useState('');
const [displayedInput, setDisplayedInput] = useState('');
const handleInputChange = (e) => {
setUserInput(e.target.value);
};
const displayInput = () => {
setDisplayedInput(userInput);
};
return (
<div>
<input type="text" value={userInput} onChange={handleInputChange} placeholder="输入内容"/>
<button onClick={displayInput}>显示输入</button>
<div dangerouslySetInnerHTML={{__html: displayedInput}}/> //写法一,不安全
{/*<div>{displayedInput}</div>*/} //写法二,安全
</div>
);
}
写法一(不安全)
<div dangerouslySetInnerHTML={{__html: displayedInput}}/>

写法二(默认、安全)
<div>{displayedInput}</div>
将输入的内容进行实体化,再进行输出
右键点击“编辑html元素”,发现大括号被实体化了,无法造成xss,被框架自动过滤了(与vue一致)

修复:直接使用{displayedInput}来显示
Electron-XSS
Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入Chromium和Node.js渲染,可以 使用JavaScript 代码代码库创建在Windows上运行的跨平台应用

打开后是一个应用程序(不是web界面),把浏览器封装成应用程序

<body>
<input type="text" id="userInput" placeholder="输入内容">
<button onclick="displayInput()">显示输入</button>
<div id="displayArea"></div>
<script>
function displayInput() {
const input = document.getElementById('userInput').value;
const displayArea = document.getElementById('displayArea');
//displayArea.textContent=input; // 安全
displayArea.innerHTML = input; // 产生xss漏洞
}
</script>
</body>
不安全写法
displayArea.innerHTML = input;

安全写法
displayArea.textContent=input;

修复:使用 textContent 代替 innerHTML 来显示文本
JQuery XSS
水洞,没用,实战可忽略,报告可写-不考虑利用
漏洞介绍:
https://mp.weixin.qq.com/s/FsFvQlVrb_J4wsyE8gpprA
https://mp.weixin.qq.com/s/EMsK1c901-bDYapvHxs-VQ
漏洞扫描工具:
在线扫描地址:https://research.insecurelabs.org/jquery/test
https://github.com/mahp/jQuery-with-XSS
https://github.com/honeyb33z/cve-2020-11023-scanner
MXSS:
价值高-难挖-需要耐心-大厂
参考:https://mp.weixin.qq.com/s/31zaBzZ1e6rNobYCrn7Qhg
漏洞介绍:
https://www.fooying.com/the-art-of-xss-1-introduction/#mxss
mXSS中文是突变型XSS,指的是原先的Payload提交是无害不会产生XSS(已经被过滤、转义等操作),而由于一些特殊原因,提取和处理的过程中,将原本无害的XSS Payload进行了转码、反编码等操作,导致Payload发生变异,导致的XSS。
本身已修复,是在数据渲染和转换的过程中没有遵循一个统一的方案造成的

csdn只是载体,漏洞成因在于qq的重新渲染等操作
漏洞核心:
在各种平台转发预览、应用2在重新渲染、解析、转换带有xss语句内容的网址1时触发
存在场景:
各种聊天媒体,在线笔记软件(特别是带预览功能的)–>网址分享出去看是否可以被调用释放,例如csdn各种语句文章、blog语句文章,测试时可以多制作几个
模拟靶场:
https://portswigger-labs.net/mxss
<math><mtext><table><mglyph><style><!--</style><img title="--><img src=1 onerror=alert(1)>">


各种用于测试的文章:

UXSS:Universal Cross-Site Scripting
挖掘困难-价值非常高-技术要求高-二进制、逆向
漏洞介绍:UXSS利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的攻击类型

edge浏览器漏洞:MICROSOFT EDGE uXSS CVE-2021-34506
Edge浏览器翻译功能导致JS语句被调用执行
https://www.bilibili.com/video/BV1fX4y1c7rX
https://mp.weixin.qq.com/s/rR2feGeuRt3hOFPkV3_6Ow
本节知识点
Web攻防-XSS跨站-浏览器&转换-UXSS&MXSS
Web攻防-XSS跨站-框架和库-VUE&React&Electron&JQuery
