의미없는 블로그
임베디드 톰캣에서 OPTIONS, TRACE 메소드 조치방안 본문
이클립스에서 스프링 프로젝트 만들고 로컬에 다운받은 톰캣으로 구동시키는 경우 있고
내장된 임베디드 톰캣으로 구동시키는 경우 있다
내장된 임베디드 톰캣 쓰면 conf/web.xml, con/server.xml 등 없기 때문에 (임베디드 톰캣은 걍 jar 파일로 되어있는듯)
메소드 조치할 때 java 코드로 설정해줘야 함
1. 이클립스에서 스프링부트 플젝 만들기
> 요기보고 똑같이 따라함
> Spring Starter Project 로 만들면 됨
> Hello World 까지는 안띄워도 됨
> 난 Spring Boot 2.6.2, 내장 톰캣 9.0.56 이었는데 걍 스프링부트2, 톰캣 8~9 정도는 다 비슷하지 않을까
일단 서버 띄우면 디폴트로 1) OPTIONS, TRACE 활성화 되어있고 2) TRACE 전송시에도 응답값에 Allow 메소드 리스트 뜬다
1) OPTIONS 활성화 되어있어 Allow 메소드 리스트 노출됨
2) TRACE 활성화 되어있고, TRACE 전송시에도 Allow 메소드 리스트 노출됨
얘를 조치하려면 일단 1) OPTIONS, TRACE, PUT, DELETE 등 불필요 메소드는 다 차단시키고 2) setAllowTrace 값을 true로 설정해서 TRACE 전송시에 Allow 메소드 리스트 안뜨게 하면 됨
무튼 이거 다 web.xml 이나 server.xml 에서 하는건데 임베디드 톰캣은 얘네 없으니까..
2. setAllowTrace = true 로 설정 (TRACE 전송시 Allow 메소드 리스트 안뜨게)
Webconfig.java 하나 만들고 아래와 같이 작성
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class WebConfig {
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
return customizer -> customizer.addConnectorCustomizers(connector -> {connector.setAllowTrace(true);});
}
}
서버 재실행 하면 이제 TRACE 날려도 Allow 메소드 리스트 안뜸
> 요거 보고했는데
3. OPTIONS, TRACE, PUT, DELETE 등 나머지 메소드들 제한
MethodFilter.java 만들고 아래와 같이 작성
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@Component
public class MethodFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if (request.getMethod().equals("OPTIONS") || request.getMethod().equals("TRACE") || request.getMethod().equals("PUT") || request.getMethod().equals("DELETE")){
response.getWriter().println("method not allowed");
} else {
filterChain.doFilter(request, response);
}
}
}
OPTIONS, TRACE 등 날려도 이제 안뜸
https://www.ostack.cn/?qa=1004866/
> 이거 참고했는데 찔끔 고쳤음
#참고
스프링부트에서 EmbeddedServletContainerCustomizer 이거 써서 메소드 제한하는 블로그 많은데 이거는 spring 1.3~1.5 에 해당하는거라 함 그래서 최근꺼 스프링 쓰면 쟤 안나옴
https://stackoverflow.com/questions/35133942/spring-boot-disable-http-methods
'# 나 > pentest (WEB)' 카테고리의 다른 글
ICMP 터널링을 통한 망간 자료전송 (1) | 2022.06.21 |
---|---|
[나] burp pro (0) | 2022.01.14 |
버프 프록시 안잡힐때 해볼만한것 (0) | 2021.11.18 |
Nginx 에서 TLSv1.2, Cipher Suites 설정하기 (0) | 2021.09.06 |
Tomcat 에서 400, 505 에러페이지 적용 안될때 (0) | 2021.09.06 |