您当前位置: 首页 » 敏感函数 » iconv()

iconv()

2017年3月6日 | 发表评论(0) 查看评论

一、函数原型及使用说明

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

iconv()的作用是将字符串 str 从 in_charset 转换编码到 out_charset。如果你在 out_charset 后添加了字符串 //TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。 如果你添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则,str 从第一个无效字符开始截断并导致一个 E_NOTICE。

二、函数风险及原理

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

fuzz脚本:

 

可以发现当$i为128(0x80)及以后的字符时输出的字符串截断为1.php。

原理:http://www.docin.com/p-178554948.html

审计实例:

这个洞曾在建站之星上发生过,乌云编号:wooyun-2014-048293 因为洞是14年的,比较久远了,没找到是哪个版本的,我就看着乌云上作者粘贴的代码写了个大概的流程

先是上传一个文件,验证是否是可上传格式,然后把文件名经过iconv()转换之后保存。

大概能模拟建站之星的洞了,也能说明iconv()转换的问题

python代码是直接抄原作者的,只改了一些地址:

效果:

当然这里随机的名字是python代码里写的,其实是完全可以自己控制的。

分类:

敏感函数

| 标签:

,