취약점

Web Application 의 download 관련 모듈의 파라미터에 path traversal 문자열을 삽입하여 웹 루트 디렉토리의 상위 경로에 위치하는 OS파일 시스템까지 접근할 수 있으며, 이를 이용해서 시스템의 각종 중요 파일 및 웹 프로그램의 소스 코드를 다운로드할 수 있음. 예를 들어, 파일 요청 URL에 ../를 넣어 특정 디렉토리의 파일을 다운로드할 수 있다.

 

따라서, 입력값 필터링을 해주자!!

 

실습

웹서버 : 리눅스/ 172.30.1.53:8080

http://172.30.1.53:8080/downloadAction?file=../../../../../etc/passwd

◾ 다음과 같이 파일명을 변조하여 요청하자, 다운이 된것을 확인 할 수 있다.

 

◾ 열어보니 웹서버의 /etc/passwd 파일을 다운한 것을 확인할 수 있다.

서버의 중요 파일이 파일명 수정만으로 다운로드 되었다!!

 

 

보안조치

보안조치로서 3가지 방법이 있다.

 1)파일 다운로드 모듈 구현시 파일 경로를 처리하는 파라미터 변수에서 디렉토리 상위 경로를 의미하는 path traversal 문자열을 필터링하여 사용할 수 없도록 함(Path Traversal 문자열 : [..], [../], [..\])

 

 2)실제 파일 경로는 DB에 저장하도록 하고 사용자에게 노출되는 URL의 파라미터에는 인덱스 번호를 통해 다운로드 할 파일을 표시함으로서 사용자에게 조작을 시도할 수 있는 경로 정보가 노출되지 않도록 구현함

 

 3)다운로드를 허용할 디렉토리를 지정하여 해당 디렉토리를 벗어나는 위치의 다운로드 요청에 대해서는 경고메시지와 함께 다운로드를 금지하도록 함

 

여기서 1번 방법을 적용하도록하겠다!

상위 경로를 의미하는 path traversal 문자열을 필터링해주자

 

◾ 다운로드를 수행하는 자바 파일에 다음과 같이 추가해주는데

이것은 입력값을 검사하여 상위 경로 문자가 포함되어있다면 해당 요청을 거부한다.

...

String blockchar[] = {"..", "../", "..\\"};
		 
		 
		boolean checkResult = true;
		
		for(int i=0; i<blockchar.length;i++) {
			if( fileName.indexOf(blockchar[i]) != -1 ) checkResult = false;
		}
		
		if(checkResult == false) {
			response.setContentType("text/html; charset=UTF-8"); 
			PrintWriter script = response.getWriter();
			script.println("<script>alert('올바르지 않은 요청입니다.');");
			script.println("history.back()"); //location.href='http://127.0.0.1:8080'
			script.println("</script>");
			script.close();

			return ;
		}
...

 

결과

필터링에 의해 요청이 거부된 것을 볼수있다!

' > 보안 설정' 카테고리의 다른 글

[JSP] 9. 디렉토리 인덱싱  (0) 2020.12.27
[JSP] 7.URL 파라미터 조작  (0) 2020.09.09
[JSP] 2.SQL 인젝션  (0) 2020.09.08
[JSP] 1-1.Stored XSS 취약점  (0) 2020.09.08
[JSP] 보안 개발 가이드 개요  (0) 2020.09.05

+ Recent posts