您的位置 » 首页 » 代码审计 » 代码审计:PHP iconv函数字符串转码导致截断问题

代码审计:PHP iconv函数字符串转码导致截断问题

发表于3年前 | 作者: seay | 分类: 代码审计 | 孵化于:2014年02月25日 | 文章热度:7,875 次 全屏阅读

显示不全请点击全屏阅读

iconv导致字符串截断

by qingsh4n

1、iconv函数原型

string iconv ( string $in_charset , string $out_charset , string $str )

in_charset:输入的字符集

out_charset:输出的字符集

str:要转换的字符串

具体查看php手册:http://www.php.net/manual/zh/function.iconv.php

2、iconv导致字符串截断

iconv在字符编码转换时可能导致字符串截断。当$str中有一个字符不能被目标字符集所表示时,str 从第一个无效字符开始截断并导致一个 E_NOTICE。

例如:$d = iconv(“UTF-8”, “gb2312”, $c);该代码是将变量$c从UTF-8编码转换为gb2312。那么当$c中存在一个不能被gb2312表示的字符时,那么就会截断

该字符之后的内容

3、fuzz脚本

<?php
$a = "1.php";
$b = ".jpg";
for($i=0; $i<200; $i++){
    $c = $a.chr($i).$b;
    $d = iconv("UTF-8", "gb2312", $c);
    echo "$i ==> ".$d."n";
}

可以发现当$i为128(0x80)时输出的字符串截断为1.php。为什么0x80开始截断,可以看utf8和gbk的编码范围http://www.docin.com/p-178554948.html

4、漏洞案例

http://www.wooyun.org/bugs/wooyun-2014-048293

5、注意

测试时发现在linux环境下不会截断,在windows下成功。

原文:http://hi.baidu.com/qingsh4n/item/e3c4261e045d17161994ecaa

 

Seay:推荐使用mb_convert_encoding 函数转换编码,函数说明参考 http://www.php.net/mb_convert_encoding

Tags:

代码审计,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/3700/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

已经有1个筒子留下了脚印...

  • aaron 说:
    1楼
    2014 年 2 月 25 日 下午 4:34 回复

    支持!

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)