PHPslash URL封锁泄漏本地文件漏洞
发布日期:2001-05-18
更新日期:2001-05-18
受影响系统:
phpslash-0.61
- Linux
描述:
PHPSLASH是一个开放源码的PHP工具包。它存在一个远程安全问题,可能泄漏WEB服务器
上的系统文件内容。
问题处在Block_render_url.class中,它没有检查$url变量是否真的是一个正常的URL
请求。如果攻击者输入的内容是一个本地文件名,PHPSLAH将会泄漏该文件的内容。
攻击者要进行攻击必须首先以管理员用户的身份登录。
<*来源:
tobozo@users.sourceforge.net
主页地址:
http://madchat.sourceforge.net
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
以admin身份登录,并访问菜单中的"BLOCKS"(blockAdmin.php3),用下列信息创建一个新
的封锁记录:
Title : notTrusted
Type : url
Site Location : whatever
Source URL : ./config.php3
Expire Length : 0
Owned by section : home
Data : (empty)
Order number : whatever
这会将./config.php3的内容显示在页面中,攻击者也可以指定其他的系统文件。
建议:
临时解决方法:
tobozo@users.sourceforge.net提供了下列解决方法:
function parse($block_info) {
$url = $block_info["source_url"];
/* check for url structure before opening it (you
don't want
/etc/passwd to be validated here -- tobozo -- */
$urlParts = parse_url($url);
if( (empty($urlParts)) or (!$urlParts) ) {
$this->output = "Block_render_url.class:: Parse
error reading
[$url]";
return;
}
$scheme = $urlParts[scheme];
$HostName = $urlParts[host];
if(empty($scheme)) {
$this->output = "Block_render_url.class:: Missing
protocol declaration
[$url]";
return;
}
if(empty($HostName)){
$this->output = "Block_render_url.class:: No
hostname in [$url]";
return;
}
if (!eregi("^(ht|f)tp",$scheme)) {
$this->output = "Block_render_url.class:: No
http:// or ftp:// in
[$url]";
return;
}
/* have to silence 'implode' and 'file' because you
don't want
the errors showing up on the main page */
$ary = @file($url);
$size = count($ary);
$string = @implode("",$ary);
if (strlen($string) < 1) {
$this->output = "Block_render_url.class: $url
contained no data.";
return;
};
for ($i = 0 ; $i < $size ; $i++) {
$output .= $ary[$i];
};
$this->output = $output;
}
厂商补丁:
暂无
浏览次数:5182
严重程度:0(网友投票)