파일 다운로드 취약점이 발생되었을 때 DB에 접근할 수 있는 정보 혹은 업로드하는 파일의 소스코드를 봐서 FU 취약점이 발생될 수 있는지를 확인한다. 이 때 Spring Framework에서 Controller의 위치를 한번에 알 수 있는 방법이 있는지에 대해 공부한 일련의 과정을 정리해둔다.
※ View 위치 찾기
1. /WEB-INF/web.xml
(1) Spring에서 MVC를 구현하기 위한 Dispatcher Servlet을 찾는다.
(2) Dispatcher Servlet에 포함되어 URL Mapping을 담당하고 있는 servlet-context.xml의 경로를 찾는다.
그림1. /WEB-INF/web.xml (출처 : https://all-record.tistory.com/165?category=733072)
◎ 만약 위와 같이 servlet-context.xml이 존재하지 않은 경우
contextConfigLocation 초기화 파라미터를 설정하지 않은 경우, DispatcherServlet은 WEB-INF/[서블릿이름]-servlet.ml 파일을 설정파일로 사용한다.
2. servlet-context.xml 경로
(1) Controller에 의해 리턴된 View를 찾아주는 ViewResolver를 찾는다.
(2) 해당 ViewResolver의 속성인 prefix와 suffix를 통해 내가 요청한 URL의 view page가 어디인지 찾는다.
그림2. servlet-context.xml (출처 : https://all-record.tistory.com/165?category=733072)
※ Controller 위치 찾기
view는 찾기 쉽지만 우리가 원하는 실제 코드는 controller에 있다. 이를 찾기 위해서는 우리가 URL에 입력한 것이 각 controller의 @RequestMapping Annotation에 있는지를 찾아야 한다.
그렇다면 각 controller의 파일명을 알 수 있는 방법이 있을까?
정확하지는 않지만 일단 지금까지의 결론은 다음과 같다.
1. web-xml에 dispatcherServlet을 등록함
2. dispatcherSerlvet 안에 <annotation-driven />과 함께 component-scan을 통해 패키지 안에 @controller라고 적어둔 annotation을 기준으로 컨트롤러를 스캔한다.
3. 이후 요청은 스캔한 컨트롤러들을 기준으로 동작한다.
결론 : 모든 컨트롤러가 적혀있는 특정 파일은 존재하지 않다.
추가적으로 더 알게된 내용이 있으면 추가하겠음.
참고 )
이론 : https://all-record.tistory.com/165?category=733072
실제 파일 위치들 예제 : http://pgm-progger.blogspot.com/2014/01/spring-base-setting.html
'Hacking > Web' 카테고리의 다른 글
tar 명령어 이용 시 주의사항 (0) | 2019.08.11 |
---|---|
Indirect SQL Injection (0) | 2019.08.11 |
MYSQL load_file & into outfile (0) | 2019.06.28 |
[JAVA] AES256 decrypt Code (0) | 2019.04.25 |
[Websec.fr] level 8 Writeup (0) | 2019.04.11 |