0x01 设置远程调试
使用bash bin/catalina.sh jpda run以调试模式运行
Idea中设置远程IP和端口
0x02 复现
HttpServletRequest中包含的常用获取路径方法:
request.getRequestURL():返回全路径;
request.getRequestURI():返回除去Host(域名或IP)部分的路径;
request.getContextPath():返回工程名部分,如果工程映射为/,则返回为空;
request.getServletPath():返回除去Host和工程名部分的路径;
request.getPathInfo():仅返回传递到Servlet的路径,如果没有传递额外的路径信息,则此返回Null;
所以使用这几个方法来查看路径解析特性,新建一个jsp文件包含以下内容,然后通过jar cvf uri.war uri.jsp命令打包为war包部署:
<%
out.println("getRequestURL(): " + request.getRequestURL() + "<br>");
out.println("getRequestURI(): " + request.getRequestURI() + "<br>");
out.println("getContextPath(): " + request.getContextPath() + "<br>");
out.println("getServletPath(): " + request.getServletPath() + "<br>");
out.println("getPathInfo(): " + request.getPathInfo() + "<br>");
%>
正常访问
部署后正常访问如下:
添加./访问
这其实和在本地使用是一样的./表示在当前目录:
添加../访问
和本地路径一样../表示当前目录的上一层目录,所以添加了一个中间目录test,这个目录存不存在都行。
不存在的情况:
存在的情况:
添加;/访问
在;后添加字母
其他的都无法正常访问
所以在项目中使用了request.getRequestURL()和request.getRequestURI()这两个方法就有可能造成认证绕过之类的漏洞。
0x03 路径解析分析
Tomcat中处理socket主要在org.apache.coyote.http11.Http11Processor#service开始
然后进入org.apache.coyote.http11.Http11Processor#prepareRequest方法中,在这里面主要对请求头进行解析
然后会将socket转化为request和response,进入CoyoteAdapter中处理
在CoyoteAdapter中会新建org.apache.catalina.connector中的request和response对象,并且将刚才Http11Processor中的org.apache.coyote.Request和org.apache.coyote.Response放进去
接下来就会进入到postParseRequest方法中再次解析请求,从Http11Processor中提取出请求放到connector的请求里
在postParseRequest中会继续进入parsePathParameters方法中进行处理
在parsePathParameters方法中会检查请求的uri中是否包含;,包含则会首先获取;到第一个出现/之间的字符
然后会将;以及;和第一个/之间的字符串删除
接着会继续对剩下的字符串进行同样的操作
最终会多出/号返回到postParseRequest方法中
返回之后就会进入normalize方法
进到normalize方法就是循环查看/符号的下一个是不是/符号,是则去除后面的/符号
去除/符号后就会检查是否包含/./或者/../,如果不包含则直接返回
当包含/../的时候,则直接跳到上一级,当包含/./的时候则会直接删去./只剩下/
在parsePathParameters方法中会去除;到下一个/之前的字符串,比如/url/;ssfdf/url就剩下/url//url去除了;ssfdf;如果是/uri/uri;asd/也会直接当成/uri/uri/;在normalize方法中会删除/符号后面紧跟着的/符号,最终只保留一个,并且会去除/./中的./,跳到/../中的上一级。
END
往期经典回顾
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,文章作者和本公众号不承担任何法律及连带责任,望周知!!! |
点赞是鼓励 在看是认同 分享是传递知识
看完点个“在看”分享给更多人
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论