通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 原创精华 >> 文章正文
我发现的Magic WinMail Server漏洞
责任编辑:古典辣M°   更新日期:2005-11-26
 

不久之前我经常去的一家音乐网站突然宣布无限期关闭,但保留对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).由于权限是最高的关系,很轻松的加进了用户,并且进入了终端服务器。..但是很遗憾,别的盘中除了备份文件,再没有别的东西了.有点沮丧的给管理员发了封邮件,然后删除用户走人...玩网络安全的,要玩的适当才有意思.不对吗?

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章REAL蛀虫利用播放器漏洞下载恶意程序
    普通文章李彦宏:中国要在互联网领域逐渐超越美国
    普通文章马云:阿里巴巴的成功是一个生态链的成功
    普通文章Ingres用户认证非授权访问漏洞
    普通文章TCPreen FD_SET()函数远程栈溢出漏洞
    普通文章Winace UUE文件解压堆溢出漏洞
    普通文章Pclxav木马猎手第一代特征码引擎源代码
    普通文章IE收藏夹管理小精灵算法分析
    普通文章Extra Drive Pro算法分析历程
    普通文章雨过天晴自我注册
    精彩专题