취약점
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 |