Shiro對rememberMe的cookie做了加密處理,shiro在CookieRememberMeManaer類中將cookierememberMe字段內容分別進行序列化、AES加密、Base64編碼操作。但是,AES加密的密鑰Key被硬編碼在代碼里,意味着每個人通過源代碼都能漏洞描述拿到AES加密的密鑰。因此,攻擊者構造一個惡意的對象,並且對其序列化,AES加密,base64編碼后,作為cookie的rememberMe字段發送。Shiro將rememberMe進行解密並且反序列化,最終造成反序列化漏洞。
有兩種修改方式。
第一種:修改shiro配置文件,修改內容為
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg value="rememberMe"/> <property name="httpOnly" value="true"/> <property name="maxAge" value="31536000"/><!-- 365天 --> </bean> <!-- rememberMe管理器 --> <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager"> <property name="cipherKey" value="#{T(org.apache.shiro.codec.Base64).decode('qQFtSnnj/sx7vu51ixAyEQ==')}"/> <property name="cookie" ref="rememberMeCookie"/> </bean>
qQFtSnnj/sx7vu51ixAyEQ== 這個是生成AES密鑰
生成方式參照:https://www.cnblogs.com/pxblog/p/12485832.html
第二種;替換項目中shiro jar包,替換成1.2.6版本
下載地址:https://yvioo.lanzous.com/b00nueaib