ApacheTomcat默认安装页面中存在examples样例目录。里面存放着Servlets、JSP、WebSocket的一些服务脚本和接口等样例。其中Servletsexamples服务样例下存在一个session的样例。该样例可以允许用户对session来进行 *** 控。因为session是全局通用的,所以也就可以利用该样例下的session来 *** 控管理员的session来进行会话传输 *** 控管理员的账户进行恶意 *** 作。
漏洞分析:我们直接看核心代码:
上面的这段session控制的核心代码意思说的是用户通过表单提交name和value两个参数值。然后通过request里的getParameter()函数获取name和value值。再通过session.setAttribute()函数将获取到的name和value值传递到session里面。即可以在通过前端页面去控制session值来获取管理员权限。
漏洞复现: 漏洞复现环境:Tomcat7.0.88
JDK1.8.0_181
Burp2.0
这里以自己本地搭建的Tomcat版本为准。也不必刻意寻找相对应的Tomcat版本。
准备好环境之后我们开始复现。
http://127.0.0.1:8080/examples/servlets/servlet/SessionExample
我们来到Examples样例目录下的servlets下的session执行按钮。
在Thefollowing data is in yoursession中我们来执行name名称和value值来获取我们需要的session会话值。下面的GETbased form
我的理解就是通过GET传值的方法来登陆。所以说这项我们就不用去关注了。
这里我们需要三个页面来辅助我们完成这个漏洞的复现。因为在
Examples样例目录下默认是没有模拟登陆网站的页面,所以我们需要这三个页面来模拟通过 *** 控session值来进行模拟登陆网站的后台获取管理权限。
Login.jsp:
Index.jsp:
Login_test.jsp:
准备好三个页面后放置在examples样例目录下。我们就可以开始复现漏洞了。
首先我们模拟访问index.jsp页面,这时候他没有获取到admin的session值,所以代码逻辑会做一个302跳转重定向到login_test.jsp页面。
接下来我们在样例目录下去获取并且传递admin的session。
再进行访问index.jsp页面。这时候获取到了admin的session值。代码逻辑即输出一个登陆成功。
接下来我们访问login.jsp页面并通过post表单的方法传递一个账户的值进去。即可发现跳转到index.jsp。到此 *** 控session来进行绕过登陆复现完成。
漏洞修复:
禁止访问或者直接删除examples样例目录下的资源。做目录访问权限设置,防止目录遍历。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)