12/21
외부 접근 가능 경로에 저장되는 경우 발생할 수 있는 문제점
- 외부에서 호출 실행 할 수 잇는 문제점
> 외부에서 접근하지 못하는 파일(URL 상의 리소스)에 저장되도록
webshell 파일을 업로드, 실행해서 해당 서버 제어권 탈취
- 예상피해 : 정상적인 서비스를 방해, 해당 서버가 악성코드 유포지로 악용, 서버의 제어권 탈취당하게 됨
- 업로드 파일 크기와 개수를 제한
- 업로드 파일을 외부에서 접근할 수 없는 경로에 저장
- 업로드 파일을 저장할 때 외부에서 알 수 없는 형식으로 실행 속성을 제거하고 저장.
게시판에 파일 업로드 취약점이 존재하는지 확인
- 외부 접근 가능 경로에 파일 경로 그대로 저장하고 있음
*파일의 종류를 제한하는지 확인 > 서버 사이드에서 실행 가능한 파일 업로드

> 이렇게 나오는 이유: 업로드한 파일이 이미지가 아니여서 출력되지 않음.
> 해당 업로드 된 파일 주소로 접속 시 명령어 실행 가능

- 위 처럼 id값이 들어가야 함
Path traversal
- 다운로드 기능을 잘못 구현
- 이미지 다운로드 경로 브라우저를 통해서 해당 서버의 파일 요청 가능
>외부 입력값에 경로를 조작하는 문자열(. .. / \ 등) 확인해야 함
대표적 경로 조작 코드
String savedFileName = request.getParameter("file");
String filePath = "c:/upload/files/" + savedFileName;
File file = new File(filePath);
대응 방안
- 외부 입력값을 서버 내부 파일을 참조하는 경우에 조작 문자열 포함 여부를 확인 사용,
- 사용할 수 있는 값을 미리 정의하고 정의된 범위 내의 값만 사용하도록 제한 허용 목록 방식의 제한
파일 업로드 기능을 안전하게
> 파일 다운로드 기능을 구현, 파일 다운로드 구현 시에 경로 조작 취약점 (문자열 여부 확인) 발생하지 않도록 해야 함