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

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

缺陷编号:wooyun-2014-054906

漏洞标题:建站之星 Sitestar 本地包含漏洞一枚

相关厂商:建站之星

漏洞作者: ′雨。

提交时间:2014-03-30 09:54

修复时间:2014-06-28 09:55

公开时间:2014-06-28 09:55

漏洞类型:文件包含

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-03-30: 细节已通知厂商并且等待厂商处理中
2014-03-31: 厂商已经确认,细节仅向厂商公开
2014-04-03: 细节向第三方安全合作伙伴开放
2014-05-25: 细节向核心白帽子及相关领域专家公开
2014-06-04: 细节向普通白帽子公开
2014-06-14: 细节向实习白帽子公开
2014-06-28: 细节向公众公开

简要描述:

过滤不严 包含漏洞。
虽然没有办法上传图片 但是还是有办法Getshell。

详细说明:

在module/mod_auth.php中。

public function auth_callback(){
$this->_layout = NO_LAYOUT;
$type=$_REQUEST['type'];
$code=$_REQUEST['code'];
$db=MysqlConnection::get();
$db->query("SET sql_mode = ''");
try{
$className=$this->auth_lib($type);
if(empty($className)) die('Failed!');
$authclass=new $className();


type code可控。 无过滤。 然后进入auth_lib
来看看

public static function auth_lib($type){
$dirname=P_LIB.'/auth/';
$classname=$type.'_auth';

$libfilename=$dirname.$classname.'.php';

if(is_file($libfilename)){
require_once($dirname."oauth_class.php");
require_once($libfilename);
return $classname;
}
}


只要文件存在就包含 。 虽然会自动加上.php 但是是可以截断后面的.php的。
截断后 就可以来包含了。

b1.jpg


这里 包含根目录下的robots.txt成功。 但是怎么来getshell呢?
我找了找 没有找到能上传图片的地方。 只有另外看其他的了。
看了会码 看到个这个。

public function dologout() {
//日志写入
$reg_time = date("Y-m-d H:i:s",time());
$url = $_SERVER[SERVER_NAME].$_SERVER[REQUEST_URI];
$lastlog_time = date("Y-m-d H:i:s",SessionHolder::get('user/lastlog_time'));
$lastlog_ip = SessionHolder::get('user/lastlog_ip');
$user = SessionHolder::get('user/login');
$file = '#log#.log';
$str = <<<LOGSTR
注册时间:$lastlog_time\r\n
注册IP:$lastlog_ip\r\n
操作时间:$reg_time\r\n
操作类型:退出\r\n
用户源IP地址:$_SERVER[REMOTE_ADDR]\r\n
用户源端口号:$_SERVER[REMOTE_PORT]\r\n
用户名:$user\r\n
URL:$url\r\n
URL:$url\r\n
====================================================== \r\n
LOGSTR;
ParamParser::writeFile($file,$str);
SessionHolder::destroy();
// TODO: We need a logged out page and countdown redirecting to index.php
// Content::redirect(Html::uriquery('mod_auth', 'loginform'));
Content::redirect(Html::uriquery('frontpage', 'index'));
}


可以看到 这里 写了一个Log.txt 看看有没有可控的。

注册时间:$lastlog_time\r\n
注册IP:$lastlog_ip\r\n
操作时间:$reg_time\r\n
操作类型:退出\r\n
用户源IP地址:$_SERVER[REMOTE_ADDR]\r\n
用户源端口号:$_SERVER[REMOTE_PORT]\r\n
用户名:$user\r\n
URL:$url\r\n
URL:$url\r\n


看这里 至少我们用户名是可以控制的。 然后我们就来注册一个phpinfo的用户

b2.jpg


注册成功 看看log 有没有成功写入。

b3.jpg


成功写入码。
然后直接包含这个。 可Getshell。

漏洞证明:

b4.jpg


成功Getshell。

修复方案:

过滤。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-03-31 10:01

厂商回复:

处理中,感谢

最新状态:

2014-04-03:补丁已经发布,请去官网更新补丁或下载最新安装包,谢谢。