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

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

缺陷编号:wooyun-2012-010431

漏洞标题:记事狗微博后台拿shell

相关厂商:杭州神话

漏洞作者: yy520

提交时间:2012-08-01 10:19

修复时间:2012-08-06 10:20

公开时间:2012-08-06 10:20

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:7

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-08-01: 细节已通知厂商并且等待厂商处理中
2012-08-06: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

记事狗微博系统,后台存在设计缺陷,可导致进入后台者获得shell
版本:V3.6.1 Build 20120718

详细说明:

1.系统工具->数据备份->自定义备份->选择一张数据量较小的表->更多选项->选择压缩备份文件->多分卷压缩成一个文件。


直接提交。
2.直接把备份文件下载下来,然后往备份文件添加一个zzz.php.sql,内容为<?php phpinfo();?>


3.然后找一张正常的图片 执行cat yy520.zip >> yy520.png ,前台提交yy520.png
4.获取图片的地址 images/topic/6/17/14_o.jpg,回到后台 系统工具->数据恢复


点击解压缩,用burp suite 截包


修改为:datafile_server=./images/topic/6/17/14_o.jpg
最后访问


最后的最后,请让我解释一下,为什么上面会有那么多2b的步骤。
1.

$datafile_server = get_param('datafile_server');
。。。。。
$unzip->ReadFile($datafile_server);
if($unzip->Count() == 0 || $unzip->GetError(0) != 0 || !preg_match("/\.sql$/i", $importfile = $unzip->GetName(0))) {
$this->Messager('数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。',null);
}


由于上面preg_match的限制,在压缩文件里面的文件名必须是以sql结尾,这个可以用apache解析绕过,所以我们的文件名必须是***.php.sql
2.

$identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($unzip->GetData(0), 0, 256))));
$confirm = !empty($confirm) ? 1 : 0;
if(!$confirm && $identify[1] !=SYS_VERSION) {
。。。。反正就不是解压的操作
}


在进行导入的时候它会查看压缩包的第一个文件的头部,然后决定是直接导入,还是先解压,所以我们需要一个正常的备份文件,也就是那个yy520-1.sql
才会执行下面

$sqlfilecount = 0;
foreach($unzip->Entries as $entry) {
if(preg_match("/\.sql$/i", $entry->Name)) {
$len = Load::lib('io', 1)->WriteFile('./data/backup/'.$backupdir.'/'.$entry->Name, $entry->Data);
$sqlfilecount++;
}
}


3.
然后我就屁颠屁颠的跑前台上传zip文件,后来我发现上传后的zip文件路径是记录在数据库中,路径是由一个 mysql_insert_id 来随机生成滴,本来想暴力破,直接提交乌云,敷衍了事,后来想想意义不大。然后发现$unzip->ReadFile($datafile_server);可以读取jpg的,然后就把那个zip文件直接改为jpg上传,提示错误(不是一个有效的图片),看了代码

if(function_exists('exif_imagetype') && !exif_imagetype($temp)) {
$this->_setError(507);
return false;
} elseif (function_exists('getimagesize') && !getimagesize($temp)) {
$this->_setError(507);
return false;
}


然后就必须用一个正常文件,所以必须用cat yy520.zip >> yy520.png
后台拿个shell有必要那么难为我吗~。~

漏洞证明:

这个。。。上面一块写了~~

修复方案:

稍微微的过滤一下下$datafile_server,我的礼物还没到~。~

版权声明:转载请注明来源 yy520@乌云


漏洞回应

厂商回应:

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

忽略时间:2012-08-06 10:20

厂商回复:

最新状态:

暂无


漏洞评价:

评论

  1. 2012-08-01 10:57 | wefgod ( 普通白帽子 | Rank:1807 漏洞数:179 | 力不从心)

    之前见暴出有一个EXP,忘记是什么洞了

  2. 2012-08-06 15:36 | yy520 ( 普通白帽子 | Rank:139 漏洞数:12 )

    又被忽略~ 我先默哀几天

  3. 2012-08-07 09:55 | 杭州神话(乌云厂商)

    @yy520 您好,首先感谢帮助发现系统中存在的问题,由于内部修复中未及时进行确认,非常抱歉,小礼物稍后送上

  4. 2012-08-23 16:07 | leehenwu ( 普通白帽子 | Rank:194 漏洞数:24 | 撸·啊·撸)

    不错 有思想

  5. 2012-08-24 11:32 | wefgod ( 普通白帽子 | Rank:1807 漏洞数:179 | 力不从心)

    无影响厂商忽略?然后说送礼物?

  6. 2013-01-17 22:43 | DragonEgg ( 实习白帽子 | Rank:75 漏洞数:18 | 冷漠无情的绅士,温柔善良的坏蛋。)

    @wefgod 应该是厂商设置的自动审核,,

  7. 2013-01-21 22:49 | wefgod ( 普通白帽子 | Rank:1807 漏洞数:179 | 力不从心)

    @DragonEgg 我擦,还可以自动审核…………

  8. 2014-09-26 15:53 | menmen519 ( 普通白帽子 | Rank:762 漏洞数:146 | http://menmen519.blog.sohu.com/)

    这个肯定忽略啊 人家后台有执行sql的地方 这么麻烦还不如在后台执行以下sql语句来的快