I
这是IRF系列的第一篇。何为IRF,IRF是Enomothem于2023年1月31日提出的漏洞管理信息方法,IRF分别为Information、Recurrence和Fix plan
I: 漏洞的基本信息、物体Object(什么应用)、时间Time(可选)、空间Space(版本范围,受影响范围)
R: 漏洞复现方法、具备的条件
F: 漏洞修复计划。
基本信息
Tomcat样例(Example)泄露,下载Tomcat后在解压后的文件目录里有tomcat自带的webapp/docs和webapp/example文件夹,docs是tomcat的说明文档,example是tomcat自带的示例。
漏洞分析:docs是文档,所以基本不存在风险,但是examples里面有session,而tomcat的session是共享的,这使得在不需要任何权限的情况下,可以通过examples的session示例对tomcat中的session进行修改,这样的话可能会造成某人通过examples篡改session,从而获取管理员权限等问题。
修复计划:所以在使用tomcat部署应用的时候,建议先备份或者直接删掉webapp/docs和webapp/example文件夹。
OTS
- Tomcat
- ALL version
R
分析
表单部分代码,接收用户输入的Name和Value值
out.println("<P>");
out.print("<form action="");
out.print(response.encodeURL("SessionExample"));
out.print("" ");
out.println("method=POST>");
out.println(rb.getString("sessions.dataname"));
out.println("<input type=text size=20 name=dataname>");
out.println("<br>");
out.println(rb.getString("sessions.datavalue"));
out.println("<input type=text size=20 name=datavalue>");
out.println("<br>");
out.println("<input type=submit>");
out.println("</form>");
核心代码,将接收的用户输入的Name和Value值写入到Session中
HttpSession session = request.getSession(true);
out.println(rb.getString("sessions.id") + " " +session.getId());
out.println("<br>");
out.println(rb.getString("sessions.created") + " ");
out.println(new Date(session.getCreationTime()) +"<br>");
out.println(rb.getString("sessions.lastaccessed") + "");
out.println(new Date(session.getLastAccessedTime()));
String dataName = request.getParameter("dataname");//获取dataname参数的值
String dataValue = request.getParameter("datavalue");//获取datavalue参数的值
if (dataName != null && dataValue != null) {
session.setAttribute(dataName, dataValue);//将dataname和datavalue写入session
}
用户通过表单提交Name和Value参数,然后通过request.getParameter()函数获取这两个参数的值,再通过session.setAttribute() 函数将Name和Value的值写入Session中。
复现
/examples/servlets/servlet/SessionExample
在Name of Session Attribute: 里输入 login
在Value of Session Attribute:里输入 admin
提交后显示login=admin已经写入session
验证
首次打开因为没有Session被重定向到登入页面。
利用样例漏洞后,再次打开index.jsp,显示成功登录。
F
删掉webapp/docs和webapp/example文件夹。
对目录进行访问限制