网站地图    收藏   

主页 > 后端 > 网站安全 >

TurboMail邮件系统任意文件读取漏洞(需管理权限

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

[导读] TurboMail邮件系统处理日志文件时未对文件路径进行判断,导致可读取服务器上的任意文件。邮件后台管理进行WEB日志查看时存在任意文件读取漏洞。漏洞代码位于TomcatLogAjax class,其中...

TurboMail邮件系统处理日志文件时未对文件路径进行判断,导致可读取服务器上的任意文件。

邮件后台管理进行“WEB日志查看”时存在任意文件读取漏洞


漏洞代码位于TomcatLogAjax.class,其中getLog函数读取web服务器日志文件的源代码实现如下:

publicstatic void getLog(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException{

MailSession ms = WebUtil.getms(request,response);

if (ms == null) {

AjaxUtil.ajaxFail(request, response,"info.nologin", null);

return;

}

UserInfo userinfo = ms.userinfo;

if (userinfo == null) {

AjaxUtil.ajaxFail(request, response,"info.loginfail", null);

return;

}

String logPath = getLogPath();

String subType =WebUtil.getParameter(request, true, "subType");

if ((subType != null) &&("getLogList".equals(subType))) {

getLogList(request, response, logPath);

return;

}

StringsLogFile = WebUtil.getParameter(request, true, "logFile");

…..//此处省略N行

try{

FiletempFile = new File(logPath + SysConts.FILE_SEPARATOR + sLogFile); //漏洞点,直接拼接

if (!tempFile.exists()) {

AjaxUtil.ajaxFail(request, response,"info.ajax.fail", null);

return;

}

bb.clear();

fis = new RandomAccessFile(tempFile,"r");

if (bReverse) {

long lFileLen = fis.length();

fis.seek(lFileLen);

bsLine = ReadLineInput.RReadLine(fis, false,lo, bb, temp_bs);

} else {

bsLine = ReadLineInput.ReadLine(fis,false, lo, bb, temp_bs);

}

getLog函数在处理用户传递的参数logFile时未进行安全路径的检测导致可以使用../进行读取服务器上的任意文件。

使用邮箱管理员账号登陆邮箱管理后台,进行邮件“日志查看”,选择“web服务器日志”

 

1.png


 

2.png



http请求包如下:
 

3.png



使用burpsuit修改http请求包的logFile参数为../../../../../../../../../../../../../windows/win.ini:
 

4.png



可以发现已经成功读取服务器上的文件:
 

5.png



测试下读取c:/boot.ini:
 

6.png


 

7.png


修复方案:

禁止读取的文件名包含/和\

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

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

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

添加评论