0x01 前言
放假前看到很多文章对这个漏洞进行分析复现,又因为过年期间的特殊情况,实在是无聊至极,所以自己也来学习一下,顺便恶补一下反序列化漏洞的知识。这篇文章记录了自己的一些想法以及相关的知识点,方便自己日后忘记可以重新拾起。第一次写文章有不好的,希望大家见谅。
0x02 环境搭建
由于部分cas版本的加密函数不同有相应的变化,因此想要按照此文章来复现漏洞的话还是选择和我一样的版本。
jdk8u144(不一定完全一样)
ApereoCas-4.1.5
- 1
- 2
下载CAS-Overlay-Template
github链接:https://github.com/apereo/cas-overlay-template/tree/4.1
github上有详细的部署操作,这里要注意要修改pom.xml文件cas的版本:
<cas.version>4.1.5</cas.version>
- 1
编译完后,会在target目录生成一个cas.war的war包,将该war包放在tomcat的web目录上,启动tomcat即可通过http://localhost/cas访问example。
成功部署后:
0x03 漏洞分析
该漏洞存在于登录的execution参数,抓包发现该参数值应该是加密过的,故要知道对应的加密方法以及处理过程才行。
web.xml
查看登录url对应的servlet可知道交给了Spring的DispatcherServlet处理了,配置文件为/WEB-INF/cas-servlet.xml
从springmvc的执行流程图(网上找的)可以知道只要找到对应的处理器适配器,就能找到对应的处理器。
cas-servlet.xml
全局搜索login字眼,看到loginHandlerAdapter适配器,处理器的类名为org.jasig.cas.web.flow.SelectiveFlowHandlerAdapter
org.jasig.cas.web.flow.SelectiveFlowHandlerAdapter该类继承FlowHandlerAdapter类,登录时调用继承类的handler方法:
//org.springframework.webflow.mvc.servlet.FlowHandlerAdapter#handle
- 1