Discuz! 官方站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

域名 1 元购,全场 1 折起!- DNSPod 11.11 狂欢季
搜索
查看: 3111|回复: 2

[已解决] DZ7.2发帖使用远程图片的时候,暴露网站所在路径的BUG

[复制链接]
发表于 2010-11-9 20:42:06 | 显示全部楼层 |阅读模式
DNSPod  域名 1 元购,全场 1 折起!
本帖最后由 烟雨楼台 于 2010-11-10 08:50 编辑

以下bug由  烟台大学论坛 www.ytubbs.com 友情提供修复方法
转载请注明出处。
出错信息:
Warning: sprintf() [function.sprintf]: Too few arguments in ….\include\discuzcode.func.php on line 369漏洞位置:
\include\discuzcode.func.php 369行附近
函数名称:
Discuz自定义的bbcodeurl函数,此函数中使用了PHP自带的函数sprintf
漏洞原因:
当用户在发帖的时候,选择使用远程图片地址,且指定了图片的宽,高,且URL中包含%百分号(比如汉字URL编码)的时候,被discuzcode.func.php程序中的discuzcode函数处理。在discuzcode函数处理图片的URL的正则替换部分,用parseimg函数进行处理,parseimg函数的三个参数全部是正则匹配的结果,三个参数依次是宽,高,URL地址。paeseimg函数又调用了bbcodeurl函数处理,并把匹配的URL当作bbcodeurl函数的第二个参数的一部分,交给bbcodeurl函数处理。的sprintf 函数的第一个参数来自用户输入的数据,程序在使用bbcodeurl函数的时候,没有检测用户输入的数据,直接把用户输入的数据作为自己参数的一部分,也就是$tags参数了。bbcodeurl函数用了sprintf函数进行字符串格式化。$tags又是第一个参数,其中,$tags字符串中的%号是格式化字符串的保留字符,以为着有几个单独的%号,就必须后接几个参数。由于程序没有判断$tags中包含几个单独的百分号,后面的参数也是固定的两个,如果URL中包含百分号的话,则导致参数的个数不对,报Warning错,就暴露了程序所在服务器的路径了(config.inc.php中的$errorreport变量限制了错误报告的对象,默认只允许报告给版主,管理人员)。
影响版本:7.2
修复方法:
等待官方补丁或者转义【%】字符即可。。
临时解决办法:
discuzcode.func.php中bbcodeurl函数改成如下
  1. function bbcodeurl($url, $tags) {  

  2. if(!preg_match("/<.+?>/s", $url)) {  

  3. if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://'))) {  

  4. $url = 'http://'.$url;  

  5. }  

  6. $url = str_replace('%','%%',$url);  

  7. return str_replace(array('submit', 'logging.php','%%'), array('', '','%'), sprintf($tags, $url, addslashes($url)));  

  8. } else {  

  9. return '&nbsp;'.$url;  

  10. }  

  11. }
复制代码
 楼主| 发表于 2010-11-10 08:46:23 | 显示全部楼层
回复

使用道具 举报

发表于 2010-11-10 08:48:23 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

腾讯云市场 一站式企业服务 爆款建站、小程序等1元起

QQ|小黑屋|Discuz! 官方站 ( 粤B2-20090059-165 )star

GMT+8, 2019-11-15 16:13

Powered by Discuz! X3.3

Copyright © 2001-2019 Tencent Cloud.

快速回复 返回顶部 返回列表