Magic WinMail Server漏洞

不久之前我经常去的一家音乐网站突然宣布无限期关闭,但保留对VIPs下载的权利.这个消息对于我这种狂热的音乐爱好者犹如晴天霹雳.但是没有办法,别人的站关不关是别人的事,而我如果想要得到这些音乐,只能***起许久不动的”邪恶”手段了.
    一般来说在渗透一个网站之前,脑海中总要有一个大致的渗透思路,将以前对这个站了解的信息全部挖掘出来,分析有用的部分组合应用.我首先想到的是利用以前这个站点的BBS攻击,记得是Phpwind的,因为最近出了一些漏洞,可以很方便的得到WebShell.然后想到的是以前的一些遗留页面.但是这些想法都失败了,因为关站之后,除了首页上几个关站通知以外,好象没有别的信息了.似乎在脚本上攻击不太现实.
    这个站没有可以利用的地方并不代表别的站点不存在漏洞,我的第二个思路则是旁注,但是等我仔细一查,发现这个IP上只绑定了一个顶级域名,其他的2级域名也无法通过nslookup列出,看来旁注的想法也告吹.一切看来都像走着背运.没有办法,有点想放弃了..脚本上不行,只能看看主机的安全性了.
    如果要对主机进行探测的话,就需要手工的探测一些基本的开放端口,然后整理一个列表,这样可以更详细的了解主机的设置情况,比使用扫描器要方便多了.于是大约在3分钟之内,我探测出来一些开放的端口:21(FTP),80(IIS),3372(MSTDS),3389(Terminal Service),8080(Apache).
对于这些端口,总体来分析一下吧.
FTP上,我没有用户名与密码,采用的是Serv-U Ftp Server 6.0,如果有这个东西的密码的话,主机基本上就下来了.但是似乎得到密码很麻烦.
80端口上配备着IIS 5.0,但是除了端口和一个index.asp就没有任何有价值的东西了.从这里下手也很难.
从开放的3372端口来看,主机并没有做一些安全策略和TCP/IP筛选,或者没有装防火墙,因为凭经验,这个端口一般有安全意识的管理员是不会开放出来的.同时证明这台主机是Server系列版本的.
3389,这个谁都知道,是终端服务的默认端口.登入进去以后发现是Win2000 Advanced Server.
还有一个8080,从Telnet中得到的反馈结果来看,很有可能是Apache的WEB服务器.难说这上面有一些别的什么页面可以浏览的..于是我就打开这个IP的8080端口…居然返回一个Magic WinMail Server..
    记得这个WinMail曾经在25端口有个helo的漏洞,但是那个是老漏洞,新版本应该可以避免了.于是省去了找Exploit的打算.不过为了证实,我还是写了一个段程序,发送了20000字节的数据包,服务器没有挂,说明漏洞已经修补掉了.
    似乎走到这里没辙了.但是我想,既然来了,就这么走太没意思了吧.于是准备对这个Magic WinMail Server进行一翻测试.
    从网上下载了一个Maigc WinMail,然后安装后进行了一番黑盒测试,结果全部失败.想想这个程序写的应该是不错的.但是它的WebMail是用PHP写成的,如果代码不严谨,PHP上就难免出漏洞.至少是明文的代码,可以轻松的找到漏洞.
    简单的看了一下各个PHP中的脚本和函数,找到几个似乎可以利用的地方,但是由于一些限制,没有成功,但是很多地方写的的确不是很严谨.当我看到download.php的时候,突然发觉到了一段奇怪的代码.代码如下

—————————————-codz start———————
<?

$html_compress = “false”;

// load session management
require(“./inc/inc.php”);
// check for all parameters

if( $part == “” || $folder == “”
|| $ix == “”)
Header(“Location: error.php?err=3&sid=$sid&tid=$tid&lid=$lid&retid=$retid\r\n”);

$mail_info = $sess[“headers”][base64_encode($folder)][$ix];
$localname = $mail_info[“localname”];
// check if the file exists, otherwise, do a error

if($cache) {
$fullfilename = $temporary_directory.”_attachments\\”.$sess[“user”].’_’.md5(base64_decode($bound)).”_”.$filename;
if (!file_exists($fullfilename))
exit;

clearstatcache();

$fp = fopen($fullfilename,”rb”);
$email = fread($fp, filesize($fullfilename));
fclose($fp);

echo($email);

exit;
}
else {

if ($type == ‘nonmime’){
$filename = base64_decode($filename);
$filename = str_replace(“\\”,””,$filename);
$filename = str_replace(“/”,””,$filename);
$filename = str_replace(“|”,””,$filename);
$filename = str_replace(“<“,””,$filename);
$filename = str_replace(“>”,””,$filename);
$filename = str_replace(“:”,””,$filename);
$filename = str_replace(“*”,””,$filename);
$filename = str_replace(“?”,””,$filename);
$filename = str_replace(“\””, “”, $filename);

$fullfilename = $temporary_directory.”_attachments\\”.$sess[“user”].’_’.md5(base64_decode($bound)).”_”.$filename;

if (file_exists($fullfilename)) {
header(“Content-Type: application/rfc822”);
header(“Content-Disposition: attachment; filename=\””.$filename.”\””);

clearstatcache();

$fp = fopen($fullfilename,”rb”);
$email = fread($fp, filesize($fullfilename));
fclose($fp);

echo($email);

exit;
}
}

// othe codz………………

?>
—————————-codz stop———————-

其中存在问题的代码是这一段.

if($cache) {
$fullfilename = $temporary_directory.”_attachments\\”.$sess[“user”].’_’.md5(base64_decode($bound)).”_”.$filename;
if (!file_exists($fullfilename))
exit;

clearstatcache();

$fp = fopen($fullfilename,”rb”);
$email = fread($fp, filesize($fullfilename));
fclose($fp);

echo($email);

exit;

    让我来讲解一下这段代码吧:
首先,从浏览器中取得cache的值,如果值不为空,那么就开始组合$fullfilename.然后就是fopen,再是读出所有内容并输出到浏览器中。
但是这里就出现了问题了…我们的$filename变量没有经过任何处理就组合到了读取的文件中。如果我们的$filename中包含目录的跳转符号的话,那么我们就可以跨越目录读取文件了….似乎是个好兆头.先去利用一下看看.
到了那个网站的8080端口,从WebMail注册一个用户进去.提示成功,然后从我的邮箱中发一封带附件的邮件到这个新的邮箱中,得到收到邮件以后,我们就开始来利用一下这个漏洞吧.

    在收到的邮件中点开附件,然后按F11将全屏掉IE窗口,再地址栏后输入&cache=kevin1986&filename=/../../../index.php 回车一下,果然读出了index.php的内容.(图P1)
    这一下好办了,我只要去读一些默认的配置文件就可以读到比如Metabase.bin,因为在默认配置下,Magic Winmail是以LocalSystem权限启动的,所以相应的Apache服务也是以LocalSystem权限启动的.所以metabase.bin是可以读到的
但是我要下载,文件名这些东西是必要的,从那个中读到路径可以,但是文件名就不行了.所以我得想别的办法..先看看这个Magic WinMail的安装目录吧,猜一个.多加几个../来到根目录,然后读boot.ini,结果正确返回其中的内容,说明Magic WinMail的目录安装在C盘,似乎Magic WinMail本身不是很好玩,干脆去读读别的东西吧…比如Serv-U…
试着读/../../../../../program files/Serv-U/Readme.txt
发现存在,说明Serv-U安装在C盘里.那么读读ServUDeamon.ini吧.
果然不出我所料读出来了,而且管理员似乎很喜欢在注释中写一些很敏感的东西,比如密码.这不是明摆着放我的水吗?不管了.先从Serv-U里进去,然后就发现站点目录下还有一个vipdownloadsmusic目录,在IE中一访问,居然全部是打包好的音乐.足足6个G呀….爽死我了.挑选几个比较喜爱的New Age风格的piano solo专辑下载,然后睡觉去了..有一些兴奋,但是总觉得不爽,至少我总觉得有些东西还没做够…是什么呢?哦….贪心的坏毛病又来了.拿下主机吧…看看是不是还有别的什么好的音乐…这个站的站长可是收集稀有的音乐碟出名的呀.
从FTP上写一个WebShell进去,浏览了一下C盘,发现做了限制了,但是从刚才跳转的目录来看,一般是默认安装位置,那么就直接进C:\Magic WinMail Server目录…很好很好,什么都能做,包括在Magic Winmail的Webmail目录中写的权限..
我随便写一个PHP代码进到主机里,然后执行命令(图P2).由于权限是最高的关系,很轻松的加进了用户,并且进入了终端服务器。..但是很遗憾,别的盘中除了备份文件,再没有别的东西了.有点沮丧的给管理员发了封邮件,然后删除用户走人…玩网络安全的,要玩的适当才有意思.不对吗?



本文固定链接: http://www.ntxz.net/?p=523 | 周忞 | 吉心的记事本



该日志由 吉心 于2009年12月30日发表在 懒得分类, 旧版博客 分类下, 你可以发表评论
在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Magic WinMail Server漏洞 | 周忞 | 吉心的记事本
【上一篇】
【下一篇】

Magic WinMail Server漏洞:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!