BrowserSecurity-超文本标记语言(HTML)上.ppt_第1页
BrowserSecurity-超文本标记语言(HTML)上.ppt_第2页
BrowserSecurity-超文本标记语言(HTML)上.ppt_第3页
BrowserSecurity-超文本标记语言(HTML)上.ppt_第4页
BrowserSecurity-超文本标记语言(HTML)上.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Browser Security-超文本标记语言(HTML),重要的4个规则:,1 &符号不应该出现在HTML的大部分节点中。 2 尖括号是不应该出现在标签内的,除非为引号引用。 3 在text节点里面,左尖括号有很大的危害。 4 引号在标签内可能有危害,具体危害取决于存在的位置,但是在text节点是没有危害的。,文件解析模式,在任何HTML文档中,最开始的用来指示浏览器需要解析的方式,同样也可使用Content-Type头来告诉浏览器。 一般情况下,浏览器中的解析器会尝试恢复大多数类型的语法错误,包括开始和结束标记。 在XML中,是非常严格的,所有标签必须有对应的开始关闭,也可以有自动关闭如也是允许的。,了解HTML解析,在IE浏览器中允许在1中插入NUL字符(0x00),可以绕过非常多的xss过滤器。 如下php代码可把NUL字符插入标签内做测试: 2和4中的空格也可以由tab(0x0B)与换页键(0x0C),2处也可以用/来代替。 5中的“在IE中也可替换成。 IE当中还有一个特性是当遇到=后面紧跟一个引号的时候会有奇怪的解析。 Yes, we are still inside a tag!“ ,Entity编码,HTML解析器在建立文档树的时候会针对节点内的Entity编码解码后传输。 以下两个表示相同: 下面两个例子代码不会执行,因为,编码的是标签本身的结构而非节点内的内容: ,Fuzzing,对一个普通的HTML进行Fuzzing测试: Click me看一下可以Fuzzing的位置 可以使用php代码进行快速测试,例如我们对第一个位置(.$i.; ?,上面的代码只测试了256个字符,如果想要测试Unicode的所有字符,则需要创建65536个链接。 php默认字符是ISO-8859-1作为默认的字符编码,而这种编码只有256个字符,所以单纯的循环65536遍是没用的。 所以采用Entity编码方式循环,解码后输出: .$i.; ? 有一个有趣的现象是几乎所有浏览器对$#33;即!,浏览器会33,针对标签名的Fuzzing,click me上面的代码,在Chrom、Firefox和Safari中点击,可以顺利弹出1。 讨论一下空字符的问题,IE浏览器会自动忽略空字符,并解析剩下的代码,这样会绕过很多采用正则匹配黑名单字符串的过滤器。 并且,很多函数和库并没有意识到这个问题: ; ?用IE8打开上述代码的网页,查看源代码只能看到“im“后面的字符都隐藏了。,还有两种方式可以对标签名Fuzzing,第一种是涉及字符集的问题,第二种是针对php中在过滤之前使用了utf8_decode()函数。 rn“; ?,代码很简单,设置返回响应字符集为Shift_JIS,然后把utf-8转换为Shift_JIS字符集。 可以看到在IE中129-159和224-252中,123456中的1消失了,与前面的字符合并成一个字符了。 标签后面也可加入/符号做间隔: 尝试在标签与/之间再插入其他字符来测试,由于空字符无法直观显示,所以用0来表示null,同样主流浏览器都可以执行: 再尝试ASCII码之外的字符,这种字符在正则表达式中w是无法匹配到的,主流浏览器都可以执行: 测试发现,标签名与属性名直接只要是以/开头以/或“结尾,中间几乎可以插入任意字符。 在Fuzzing属性方面,考虑两方面,一个是可以使用什么分隔符,一个是属性值可以采用什么编码。 分隔符有很多种,单引号,双引号,无任何引号,反撇号(IE中)。 .$i. ; ? 上面代码可以直观的看出当前浏览器支持的分隔符有哪些字符。 上面代码size属性如果输入的是字符的话,会顺利执行,所以当$character中循环到数字的时候也会顺利解析,但这并非是把数字当成了分割符:,; ? 以上代码可以看出,属性为字符串的时候,可以作为分隔符的字符。 为了表示那些不可打印的字符,就用x十六进制来表示: 以上代码x17即表示不可打印字符chr(23),浏览器提交的时候可以输入%3Cimg%20src%3D%17%17%20onerror%3Dalert%281%29%2f%2f%3E。 在src中可以正常工作的分隔字符,在处理事件的属性里不一定会工作,例如onerror。 但是仍然有一些字符可以达到我们的目的,ASCII表中的133和160已经IE中的空字符,甚至是分号。,以上代码urldecode之后在chrome中可以顺利执行。 下面讨论多个标签的问题,比如用户可控的数据插入到了标签中,同时过滤了只能插入标签内数据: 在IE中还有一个lowsrc的属性,跟src类似,原本是为了方便调用一个缩略图的,但是在IE6和IE7中,同时也支持伪协议javascript:,还有一个dynsrc属性也类似: / 所有IE都支持 /IE6和IE7支持 / 只有IE6支持,sytle属性中还可以定义非常多的参数:, foobar上面代码可以看到,浏览器显示的字体为红色,背景为黄色,除了定义颜色之外也可以用expression()执行js,后面会讨论。 还有一个属性是专门用来在一个标签中插入多个的:xmlns,XML的命名空间属性,这个后面会在XML中讨论。 还有一处可Fuzzing的点即为标签的关闭,一个有趣的现象是浏览器把与,与成完全一样。 foobar / 不会执行alert foo bar / IE执行了alert / 不会执行,可以执行的代码为没有开始标签的一个闭合标签,IE8中,sytle属性可以插在一个闭合标签内,并顺利执行。 可混淆的另一个方法是:可替换为=,下面例子在IE8中可执行: HTML代码中执行js的各种方式,用以下方式定义的时候,VBscript和JavaScript都可以执行。 alert+1VBScript alert(2)/ JavaScript 也有利用标签中的属性来执行js,例如:onclick,onload,onerror等等。 在iframe标签中,不需要src属性就可以顺利执行onload属性,而img标签不可以。 这是因为在iframe中没有src属性的时候,浏览器会自动加载about:blank页面,即空白页。 附件tag.php可以方便的看到当前浏览器针对各标签在不需要用户交互的情况下,可以自动执行的所有属性。,在Chrome中,html标签也可以执行非常多的属性,同源frameset标签也接受focus和blur事件。 一个很有趣的例子是,让scroll事件可以无交互触发,我们可以引入一个锚点,例如: 或者通过id属性 那我们可以访问/test.html#bottom来访问,浏览器自动滚到该锚点,触发scroll属性。 some text ,IE中hr标签中的onresize属性,在当前窗口大小变化时,会触发resize事件,执行alert(1)。 还有非常多的组合可以在IE中使用,很难全部列出来,只列举出几个很少见的例子: 除了以上on的各种属性之外,src和href属性由于支持javascript和vbscript(只支持IE)伪协议,所以也是可以执行javascript代码: click me click me代码执行时必须使用(),不可以使用vbscript中的alert+2,当点击之后,会弹出一个写在当前页面DOM中的数字2的警告框。 javascript:和vbscript:协议执行后的结果将会映射在DOM后面。 “click me以上代码在IE和Firefox中点击click me之后可执行,并且可以看到弹出的domain为a标签中所在的domain。 以上代码需要用户交互,下面看个不需要用户交互的例子,使用object标签和data:标签:, alert(2) “ 以上三个在Firefox中可执行,第二个可在Opera中执行,把各标签中各属性支持javascript的总结了一些:, / 火狐,Chrome, IE8 / 火狐 / IE6 / IE6 / IE6 / IE6 / IE6 / IE6-7以及applet标签中code和archive属性可以用来调用jar文件,执行java代码。 Javascript可以通过DOM直接获取当前页面中对应的id和name属性的对象: alert(test) 上面代码可以看出Javascript中并没定义test变量,但是获取到了页面中id为test的对象。 反过来,我们可以在外部直接控制Javascript变量,并且在一些浏览器中可以重写Javascript中已有的变量。, alert(location.href) 以上代码在IE中可以看到弹出的bar,而不是当前页面的url,成功覆盖了原本的变量。 还有一种利用meta标签来执行Javascript: 上面代码可以在Chrome,Opera,IE6中可执行javascript代码,并且弹出的时meta标签所在的域。 如果禁止了javascript:协议,也可使用data:协议,不过能够顺利执行javascript并且继承meta标签域的测试到的只有Opera。 alert(document.domain)“IE中为了兼容各个版本,所以有一个条件注释的语法,这个语法其他浏览器并不支持,会自动当成html注释。 Welcome to Internet Explorer 8. ,如上文字只有在IE8中才会显示,条件注释对于开发是一件很好的事情,可以方便的判断浏览器版本获取兼容代码展现给用户。 You are using IE 7 or greater. You are using IE 5 (any version). You are using IE 5.5 or IE 6. Please upgrade your version of Internet Explor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论