PHP多字节编码漏洞小结
如果小结中有理解错误的地方,麻烦大家提出。漏洞本质: php 使用 php_escape_shell_cmd这个函数来转义命令行字符串时是作为单字节处理的而当操作系统设置了GBK、EUC-KR、SJIS等宽字节字符集时候,将 …如果小结中有理解错误的地方,麻烦大家提出。漏洞本质:php 使用 php_escape_shell_cmd这个函数来转义命令行字符串时是作为单字节处理的而当操作系统设置了GBK、EUC-KR、SJIS等宽字节字符集时候,将这些命令行字符串传递给MySQL处理时是作为多字节处理的先看个简单的例子
代码如下:
当GPC=OFF时:username未经任何过滤,这是个典型的字符型SQL注入测试地址:http://localhost/gbk.php?username=\’ or 1%23http://localhost/gbk.php?username=\’ or 0%23当然很多情况下GPC=OFF时候都会使用一些函数来过滤用户的输入
代码如下:
看上去貌似没问题了,但是由于多字节编码问题,同样还是可以注入的测试地址:http://localhost/gbk.php?username=%df%27使用mysql_real_escape_string函数对用户输入进行转义存在同样的问题目前的很多开源的系统都是通过设置客户端的字符集为二进制来防止多字节编码问题的。//使用上面这句来替换DEMO中的 mysql_query("SET CHARACTER SET \’gbk\’", $conn);mysql_query("SET character_set_connection=gbk, character_set_results=gbk, character_set_client=binary", $conn);再次测试:http://localhost/gbk.php?username=%df%27OK,这样一来,多字节编码问题就不存在了吗?不见得当使用mb_convert_encoding、iconv对字符集进行错误的转换时候,漏洞再次的出现了(GPC=ON时问题同样存在)例如:$username = iconv(\’gbk\’,\’utf-8\’,$username);或$username = mb_convert_encoding($username,\’utf-8\’,\’gbk\’);来看下T00ls上看到的ECSHOP 2.6.x/2.7.x GBK版本的漏洞吧漏洞文件在api/checkorder.php line 28
代码如下:
我们来看下$_REQUEST[\’username\’] 的获取过程
代码如下:
先是引入了includes/cls_iconv.php这个文件,然后实例化了Chinese这个类,在调用类的Convert的方法见line 127$string = $this->_convert_iconv_mbstring($this->SourceText, $this->config[\’target_lang\’], $this->config[\’source_lang\’]);又调用了另外一个函数_conver_iconv_mbstring见line 278//这里错误的吧字符集从gbk转为了utf8,所以漏洞产生了$return_string = @mb_convert_encoding($string, $target_lang, $source_lang);
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » PHP多字节编码漏洞小结
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 织梦模板使用说明
- 你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html