当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0120357

漏洞标题:某通用型公共安全系统漏洞合集

相关厂商:公安部一所

漏洞作者: 路人甲

提交时间:2015-06-15 11:38

修复时间:2015-09-18 11:41

公开时间:2015-09-18 11:41

漏洞类型:任意文件遍历/下载

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(公安部一所)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-15: 细节已通知厂商并且等待厂商处理中
2015-06-20: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-08-14: 细节向核心白帽子及相关领域专家公开
2015-08-24: 细节向普通白帽子公开
2015-09-03: 细节向实习白帽子公开
2015-09-18: 细节向公众公开

简要描述:

参考pandas前辈提交的漏洞,获得测试案例。
http://www.wooyun.org/bugs/wooyun-2010-0100874

详细说明:

测试案例请看 WooYun: 多市公共安全系统Getshell漏洞(通用)
一. 任意文件读取

漏洞文件:viewcode.php
if ( $iid )
{
...
else if ( $iid && $catid )
{
$str = file_get_contents( ROOT_PATH."config/moban/".$catid."/".$iid.".php" );
}
}
echo "<textarea style=\"width:500px; height:400px;\">";
echo htmlspecialchars( $str );
echo "</textarea>";
?>


echo htmlspecialchars( $str ); 此处将文件内容html转义后输出,造成任意文件读取,exp详见测试代码区。
二. Getshell

漏洞文件:design/catid_user_save.php
include '../common.php';//引入伪全局变量注册机制
$a=stripslashes($atc_content); //变量a删除反斜杠
//$source=repairhtml($a);
$source=$a;

else{
if (file_exists(ROOT_PATH.'mod/sns/parse/'.$type.'.php')){
include ROOT_PATH.'mod/sns/parse/'.$type.'.php';
}

$r_url=ROOT_URL.'/';
//便于模板的移植性
$source=str_replace($r_url,'',$source);
$content=str_replace($r_url,'',$content);

writefile(SITE_CACHE.'/themes/table_'.$catid.'_'.$type.'_s.php',$source);//漏洞产生,
writefile(SITE_CACHE.'/themes/table_'.$catid.'_'.$type.'.php',$content);//同上
}
?>


writefile函数实则为file_put_contents方法,直接写入webshell,exp详见测试代码区。
三.任意文件删除

漏洞文件:del_mod.php
define( "ROOT_PATH", str_replace( "del_mod.php", "", str_replace( "\\", "/", __FILE__ ) ) );
$delid = $_POST['delid'];
$fid = $_POST['fid'];
$siteid = $_POST['siteid'];
$md = $_POST['md'];
if ( empty( $md ) )
{
exit( "4" );
}
$temp = md5( $siteid."&@#" );
$temp = substr( $temp, 2, 10 );
if ( $md != $temp )
{
exit( "5" );
}
define( "ROOT_PATH", str_replace( "del_mod.php", "", str_replace( "\\", "/", __FILE__ ) ) );
define( SITE_CACHE, ROOT_PATH."../website/".$siteid );
if ( file_exists( SITE_CACHE."/themes/".$delid.".php" ) )
{
@unlink( SITE_CACHE."/themes/".$delid.".php" );


delid可通过伪全局变量来传递,完全可控造成了任意php文件删除。只是需要根据删除的文件名来动态构造md的值才能删除成功,具体可以看测试代码区的exp。

漏洞证明:

一. 任意文件读取证明

1.png


二. Getshell
写入phpinfo来证明:

2x.png


2.png


修复方案:

应该要过滤严格一点

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-09-18 11:41

厂商回复:

漏洞Rank:4 (WooYun评价)

最新状态:

暂无