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

posted @ 2023-01-13 01:23  zpchcbd  阅读(522)  评论(0)    收藏  举报