1. 条件
1)攻击者可以控制服务器上的文件名/文件内容
2)tomcat context配置了persistencemanager的fileSotre
3) persistenceManager 配置了sessionAttributeValueClassNameFilter的值为NULL或者宽松过滤
4) 攻击者知道fileSotre存放位置
条件非常苛刻, 需要同时满足该4个条件。
2. 漏洞原理
利用tomcat创建的session,反序列后进行恶性攻击。 一般而言,session存在于服务器内存中,当服务器重启或者重新加载时,内存中的session就会全部丢失。为了避免这种情况,在某一些场合下,服务器的session可以存放在文件系统中或者数据库中,该过程称之为session持久化,session持久化是将session以序列化的形式存放的,因此存放session需要实现java的序列号接口(java.io.serialize).
具体创建过程如下:
发起session请求》tomcat servelet容器创建httpsession对象》容器将httpsession对象从内存中移到文件系统中或者数据库中》再次需要访问请求时直接从文件系统或者数据库中加载session至内存。
session保存到文件系统具体配置,context.xml
即,通过persistenceManger持久化,将文件存放在文件系统,位置为…/session
反序列过程:tomcat的FileSore 加文件