一、前言
这个问题也是最近CTF复现的过程中遇到的问题,打算单独拿出来记录一下
二、过程
后端导致SSRF的语句:
@RequestMapping({"/admin/{index}"})
···
WebClient webClient = WebClient.builder().baseUrl("http://localhost:8079/").build();
···
this.webClient.post().uri(index)
由于index是完全可控的,就算设置了baseUrl,请求的路径还是会被index覆盖,就造成了SSRF
按照我的理解访问服务器上的其他服务,传入的index应该是经过一次URL编码的:
http://localhost:8080
==> http%3a%2f%2flocalhost%3a8080
但是后端没有收到请求,直接返回400错误
经过测试后,发现只会对%2f
报错
查资料后:
默认情况下Tomcat等服务器是拒绝url中带%2F或者%5C的URL,因为它们经浏览器解析之后就变成了/和,服务器默认是拒绝访问的,所以需要通过服务的配置来解决这个问题。
三、解决方法
1、修改启动类,添加系统参数
该参数就是用来解决URL中包含%2F的问题
System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
2、添加在%TOMCAT_HOME%/conf/catalina.properties文件中
- 本文链接:http://siii0.github.io/springboot-URL%E5%B8%A6%E6%9C%89%E5%8F%8D%E6%96%9C%E6%9D%A0%E5%AF%BC%E8%87%B4%E7%9A%84400%E9%94%99%E8%AF%AF/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。