Tomcat样例目录session操纵漏洞
=============================
一、漏洞简介
————
在Apache
tomcat中,有一个默认的example示例目录,该example目录中存着众多的样例,其中/examples/servlets/servlet/SessionExample
允许用户对Session进行操作。由于Session是存储在服务器端的用于验证用户身份的东西。所以,理论上,只要我们可以操控Session,就可以伪造任意用户身份信息。
二、漏洞影响
————
三、复现过程
————
如图,是Apache tomcat 网站根目录下的文件夹,默认是有一个examples目录的
![img](/static/yougar/Web安全/Tomcat/resource/Tomcat样例目录session操纵漏洞/media/rId24.png)
这是examples目录下的文件
![img](/static/yougar/Web安全/Tomcat/resource/Tomcat样例目录session操纵漏洞/media/rId25.png)
我们访问该SessionExample页面,该页面可以对Session进行操控,本来该页面是Apache
tomcat用来给开发者操纵Session示例的页面。但是,如果实际生产环境中不删除该页面的话,可能存在伪造任意用户身份的漏洞。
![img](/static/yougar/Web安全/Tomcat/resource/Tomcat样例目录session操纵漏洞/media/rId27.png)
那么我们来看看SessionExample页面是如何通过接收用户输入的值,来对Session进行控制的。
表单部分代码,接收用户输入的Name和Value值。
out.println(“
“);
out.print(“
“);
核心代码,将接收的用户输入的Name和Value值写入到Session中
HttpSession session = request.getSession(true);
out.println(rb.getString(“sessions.id”) + ” ” +session.getId());
out.println(“
“);
out.println(rb.getString(“sessions.created”) + ” “);
out.println(new Date(session.getCreationTime()) +”
“);
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中。
![img](/static/yougar/Web安全/Tomcat/resource/Tomcat样例目录session操纵漏洞/media/rId28.png)
### 漏洞示例
我们先来编写 login.jsp 、login\_check.jsp 、 index.jsp
这三个页面,通过这三个页面来模拟一般网站身份验证的过程。
login.jsp
请登录后查看评论内容