SW개발보안과정

Overloper·2020년 11월 10일
1

SW_개발보안과정

목록 보기
7/7

7차시 : 취약점 유형 - 웹 쉘 업로드

웹쉘 업로드 와 위험한 형식의 파일 업로드


파일 업로드 취약점 개요
서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)을 업로드 가능하고, 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우 시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있음

원인

  • 업로드되는 파일의 형식을 제한하지 않음
  • 외부에서 직접 접근가능한 경로에 업로드된 파일을 저장
  • 외부에서 식별가능한 파일 명으로 저장
  • 업로드된 파일을 실행 가능함
  • 업로드되는 파일의 크기나 개수를 제한하지 않음

파일의 저장위치


위험한 형식의 파일 업로드


위험한 형식의 파일 업로드 보안약점 제거

안전하지 않은 코드

public String boardWriteProc(@ModelAttribute("BoardModel") BoardModel boardModel,
MultipartHTttpServletRequest request, HttpSession session) {
	String uploadPath = session.getServletContext().getRealPath("/")+"upload/";
    MultipartFile file = request.getFile("file");
    if ( file != null && ! "".equals(file.getOriginalFilename())) {
    	String fileName = file.getOriginalFilename();
        File uploadFile = new File(uploadPath + fileName);
        if(uploadFile.exists()) {
        	fileName = new Date().getTime() + fileName;
            uploadFile = new File(uploadPath + fileName);
        }
        try {
        	file.transferTo(uploadFile);
        } catch (Exception e) {
        	System.out.println("upload error");
        }
        	boardModel.setFileName(fileName);
        }

안전한 코드

public String boardWriteProc(@ModelAttribute("BoardModel") BoardModel boardModel,
MultipartHTttpServletRequest request, HttpSession session) {
	String uploadPath = session.getServletContext().getRealPath("/")+"WEB-INF/upload/";
    MultipartFile file = request.getFile("file");
    if (file != null && ! "".equals(file.getOriginalFilename())
    	&& file.getSize() <= 10240000
    	&& file.getContentType().contains("image")
    	&& file.getOriginalFilename().toLowerCase.endsWith(".jpg") {
     String savedFileName = null;
     File uploadFile = null;
     do {
     	 saveFileName=UUID.randomUUID.toString();
         uploadFile=new File(uploadPath + savedFileName);
     } while(uploadFile.exist());
     try {
     		file.transferTo(uploadFile);
         } catch (Exception e) {System.out.println("upload error"); }
         boardModel.setFileName(fileName);
         }
     }

파일 다운로드 취약점

파일 다운로드 취약점 개요
경로조작 문자를 이용한 파일 다운로드 취약점
외부입력값에 대해 경로조작에 사용될 수 있는 문자를 필터링하지 않으면, 예상 밖의 접급제한 영역에 대한 경로 문자열 구성이 가능해져 시스템 정보 유출, 서비스 장애 등을 유발

대응방법
요청 파일명에 경로를 조작할 수 있는 ../\ 와 같은 문자를 제거하고 사용하거나, 다운로드에 사용되는 파일명은 서버에서 목록화 하여 지정된 목록 내 파일만 접근가능하도록 제한


내용 정리

_1. 파일의 타입이나 크기, 개수, 저장위치, 저장되는 파일명들을 철저히 통제하지 않으면 웹쉘과 같은 파일을 업로드하여 공격자가 원하는 명령을 실행할 수 있습니다.
2. 파일다운로드를 위해 전달되는 파라미터값에 포함된 경로를 조작하여 허가되지 않은 파일의 다운로드를 요청할 수 있습니다.
파일명을 조작할 수 있는 입력값들은 필터링을 통해 안전하게 걸러내고 사용하여 허가된 파일만 다운로드 할 수 있도록 제한해야 합니다.

profile
세계최초 샤머니즘형 프로그래머🛐

0개의 댓글