基于污点分析的XSS漏洞辅助挖掘的一种方式
字数 2011 2025-08-26 22:11:51

基于污点分析的XSS漏洞辅助挖掘技术详解

1. 概述

本文档详细讲解基于污点分析的XSS漏洞辅助挖掘技术,包括输入源识别、危险函数分类、整体架构设计以及实现细节。

2. 污点来源(输入源)

2.1 当前状态相关输入

  • window.name
  • window.location.href
  • window.location.search
  • window.location.hash
  • window.location.pathname
  • window.location.url
  • document.URL
  • document.documentURI
  • document.URLUnencoded
  • document.baseURI
  • document.referrer

2.2 网络请求输入

通过Hook以下API获取:

  • XMLHttpRequest
  • fetch

2.3 存储相关输入

  • Cookie
  • IndexedDB
  • localStorage
  • sessionStorage

监控机制

  • 静态输入:网页初始化时已确定的输入,程序直接记录
  • 动态输入:通过插桩和事件处理实时监控变化(如cookie等)

3. 危险函数分类

3.1 直接执行JavaScript

  • eval(payload)
  • setTimeout(payload, 100)
  • setInterval(payload, 100)
  • Function(payload)()
  • <script>payload</script>
  • ``

3.2 加载URL执行

  • location=javascript:alert(/xss/)
  • location.href=javascript:alert(/xss/)
  • location.assign(javascript:alert(/xss/))
  • location.replace(javascript:alert(/xss/))

3.3 执行HTML

  • xx.innerHTML=payload
  • xx.outerHTML=payload
  • document.write(payload)
  • document.writeln(payload)

3.4 创建元素

  • scriptElement.src
  • domElement.appendChild
  • domElement.insertBefore
  • domElement.replaceChild

3.5 部分可控执行

  • (new Array()).reduce(func)
  • (new Array()).reduceRight(func)
  • (new Array()).map(func)
  • (new Array()).filter(func)

4. 系统架构设计

4.1 污点追踪实现方案

方案一:浏览器Native层Hook

  • 优点:底层,全面
  • 缺点:
    • 需要对浏览器实现机制深入了解
    • 编译过程复杂
    • 难以迁移
    • 浏览器更新后需要大量修改

方案二:浏览器插件层JavaScript Hook

  • 实现方式:Chrome插件架构
    • content-script:可操纵宿主页面DOM
    • background/popup:其他功能
  • 优点:
    • 开发快速
    • 易于迁移
    • 适应新机制能力强
  • 实现细节:
    • 通过注入方式hook宿主页面JavaScript
    • 记录危险函数调用和网络请求到后台

4.2 疑似利用确认机制

4.2.1 静态分析

  1. 以域名为单位遍历sink和source

  2. 查找source在sink参数中出现的情况

  3. 过滤规则:

    • 去除同一域名下相同参数相同调用的sink
    • 去除同一源和相同返回结果
  4. 确认算法:

    • 使用公共子字符串算法
    • 子串长度需小于sink和source的最小长度

4.2.2 动态验证

  1. 修改请求参数
  2. 修改函数调用参数
  3. 注入测试payload
  4. 检查返回结果确认漏洞

特点

  • 高误报率(可能因WAF、sanitizer、CSP等)
  • 低漏报率(hook全面时)

4.3 结果展示方案

初始方案

  • 使用插件自带界面(popup/background)
  • 浏览器层localStorage存储数据
  • 缺点:影响浏览器间迁移兼容性

最终方案

  • 独立Web应用
  • 前端:Vue.js
  • 后端:Django
  • 功能:接收请求、展示结果

5. 关键技术点总结

  1. 全面覆盖输入源:包括状态、网络、存储三大类
  2. 精细危险函数分类:5大类20+具体函数/模式
  3. 实用实现方案选择:基于浏览器插件而非修改浏览器
  4. 双重验证机制:静态分析+动态验证相结合
  5. 合理结果展示:独立Web应用保证兼容性

6. 实施建议

  1. 输入监控

    • 对静态输入建立初始化快照
    • 对动态输入实现实时监控
  2. Hook实现

    • 优先覆盖所有危险函数
    • 特别注意网络请求相关API
  3. 验证优化

    • 设计多样化测试payload
    • 建立误报过滤规则库
  4. 结果处理

    • 实现漏洞风险等级分类
    • 提供详细上下文信息辅助人工验证
基于污点分析的XSS漏洞辅助挖掘技术详解 1. 概述 本文档详细讲解基于污点分析的XSS漏洞辅助挖掘技术,包括输入源识别、危险函数分类、整体架构设计以及实现细节。 2. 污点来源(输入源) 2.1 当前状态相关输入 window.name window.location.href window.location.search window.location.hash window.location.pathname window.location.url document.URL document.documentURI document.URLUnencoded document.baseURI document.referrer 2.2 网络请求输入 通过Hook以下API获取: XMLHttpRequest fetch 2.3 存储相关输入 Cookie IndexedDB localStorage sessionStorage 监控机制 : 静态输入:网页初始化时已确定的输入,程序直接记录 动态输入:通过插桩和事件处理实时监控变化(如cookie等) 3. 危险函数分类 3.1 直接执行JavaScript eval(payload) setTimeout(payload, 100) setInterval(payload, 100) Function(payload)() <script>payload</script> `` 3.2 加载URL执行 location=javascript:alert(/xss/) location.href=javascript:alert(/xss/) location.assign(javascript:alert(/xss/)) location.replace(javascript:alert(/xss/)) 3.3 执行HTML xx.innerHTML=payload xx.outerHTML=payload document.write(payload) document.writeln(payload) 3.4 创建元素 scriptElement.src domElement.appendChild domElement.insertBefore domElement.replaceChild 3.5 部分可控执行 (new Array()).reduce(func) (new Array()).reduceRight(func) (new Array()).map(func) (new Array()).filter(func) 4. 系统架构设计 4.1 污点追踪实现方案 方案一:浏览器Native层Hook 优点:底层,全面 缺点: 需要对浏览器实现机制深入了解 编译过程复杂 难以迁移 浏览器更新后需要大量修改 方案二:浏览器插件层JavaScript Hook 实现方式:Chrome插件架构 content-script :可操纵宿主页面DOM background / popup :其他功能 优点: 开发快速 易于迁移 适应新机制能力强 实现细节: 通过注入方式hook宿主页面JavaScript 记录危险函数调用和网络请求到后台 4.2 疑似利用确认机制 4.2.1 静态分析 以域名为单位遍历sink和source 查找source在sink参数中出现的情况 过滤规则: 去除同一域名下相同参数相同调用的sink 去除同一源和相同返回结果 确认算法: 使用公共子字符串算法 子串长度需小于sink和source的最小长度 4.2.2 动态验证 修改请求参数 修改函数调用参数 注入测试payload 检查返回结果确认漏洞 特点 : 高误报率(可能因WAF、sanitizer、CSP等) 低漏报率(hook全面时) 4.3 结果展示方案 初始方案 使用插件自带界面(popup/background) 浏览器层localStorage存储数据 缺点:影响浏览器间迁移兼容性 最终方案 独立Web应用 前端:Vue.js 后端:Django 功能:接收请求、展示结果 5. 关键技术点总结 全面覆盖输入源 :包括状态、网络、存储三大类 精细危险函数分类 :5大类20+具体函数/模式 实用实现方案选择 :基于浏览器插件而非修改浏览器 双重验证机制 :静态分析+动态验证相结合 合理结果展示 :独立Web应用保证兼容性 6. 实施建议 输入监控 : 对静态输入建立初始化快照 对动态输入实现实时监控 Hook实现 : 优先覆盖所有危险函数 特别注意网络请求相关API 验证优化 : 设计多样化测试payload 建立误报过滤规则库 结果处理 : 实现漏洞风险等级分类 提供详细上下文信息辅助人工验证