6、XSS转码
  有攻有防,网站程序员肯定不会放任大家利用XSS,所以他们常会过滤类似javascript的关键字符,让大家构造不了自己的XSS,我这里捡两个被忽略惯了的字符来说,它们是"&"和"".首先来说说"&"字符,玩过SQL注入的都知道,注入的语句可以转成16进制再赋给一个变量运行,XSS的转码和这个还真有异曲同工之妙,原因是我们的IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,这种XSS转码支持10进制和16进制,SQL注入转码是将16进制字符串赋给一个变量,而XSS转码则是针对属性所赋的值,下面我拿<img src="javascript:alert('XSS');">示例:
  <img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97
  &#108&#101&#114&#116&#40&#39&#88&#83&#83&#39&#41&#59"> //10进制转码
  <img src="&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70
  &#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3b"> //16进制转码。
  这个&#分隔符还可以继续加0变成“&#0106” ,“&#00106” ,“&#000106” ,“&#0000106”等形式。
  而这个""字符却暴露了一个严重的XSS 0DAY漏洞,这个漏洞和CSS(Cascading Style Sheets)层叠样式表有很大的关联,下面我来看看这个漏洞,先举个javascript的eval 函数的例子,官方是这样定义这个函数:
  eval(codeString),必选项 codestring 参数是包含有效 JScript 代码的字符串值。这个字符串将由 JScript 分析器进行分析和执行。
  我们的JavaScript中的""字符是转义字符,所以可以使用""连接16进制字符串运行代码

 

<SCRIPT LANGUAGE="JavaScript">
eval("x6ax61x76x61x73x63x72x69x70x74x3ax61x6cx65x72x74x28x22x58x53x53x22x29")
</SCRIPT>