美文网首页代码审计
【代码审计】敏感信息泄露

【代码审计】敏感信息泄露

作者: TeamsSix | 来源:发表于2021-12-15 13:53 被阅读0次

    这里以 TurboMail 5.2.0 里的敏感信息泄露漏洞作为学习。

    已知 TurboMail 5.2.0 的敏感信息泄露路径为 /mailmain?type=pm

    打开 TurboMail 的安装目录,在 turbomail\web\webapps\ROOT\WEB-INF 下找到 web.xml 文件,发现以下配置信息

    <servlet-mapping>
      <servlet-name>mailmaini</servlet-name>
      <url-pattern>/mailmain</url-pattern>          
    </servlet-mapping>
    
    <servlet-name>mailmaini</servlet-name>
    <servlet-class>turbomail.web.MailMain</servlet-class>
    

    从这些配置信息不难看出 /mailmain 路径对应的 servlet-name 是 mailmaini,而 mailmaini 对应的 servlet-class 是 turbomail.web.MailMain

    那么这里就需要找到 turbomail.web.MailMain 类进行分析,假设这个类是在 turbomail.jar 文件里,通过搜索在 /turbomail/web/webapps/ROOT/WEB-INF/lib/ 下找到 turbomail.jar 文件

    利用 jd-gui 或者 Intellij IDEA 对 turbomail.jar 进行反编译,可以在 turbomail/web/ 文件夹内找到 MailMain.java 文件,这说明之前的假设是正确的。

    在 195 行可以看到接收了 type 参数

    195  String type = request.getParameter("type");
    196  if (type == null) {
    197      type = "";
    198  }
    

    在 543 行可以看到如果 type 参数为 pm,则执行 PMAdmin 的 show 方法

    543  } else if (type.equals("pm")) {
    544     PMAdmin.show(false, request, response);
    

    查看该方法的代码,可以看到并没有对用户身份进行验证

    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));
    }
    }
    

    因此直接访问 /mailmain?type=pm 就可以看到已登录的用户邮箱信息。

    image

    这个地方除了泄露登录用户邮箱外,type 后面跟上不同的参数还会泄露邮箱用户列表以及对管理员密码重置等,读者可以自己尝试去发现发现。

    原文链接:

    https://www.teamssix.com/211215-131111.html

    相关文章

      网友评论

        本文标题:【代码审计】敏感信息泄露

        本文链接:https://www.haomeiwen.com/subject/qcqpfrtx.html