본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


웹 취약점(Web vulnerability)

23. 파일 다운로드(FD)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 12. 10.

 

파일 다운로드 취약점은 해커가 허용된 경로 외 다른 경로의 파일을 열람하거나 다운받는 취약점을 의미 합니다.

일반적인 이미지나 텍스트 파일 같은경우에는 사실 크게 문제가 되지 않습니다만 사용자가 권한과 인증을통해서 올린 파일이나 또는 서버 내부의 시스템 설정과 관련된 파일을 받게 된 다면 이를 악용 할 수 있기 때문에 반드시 조치가 되어야 합니다.

 

 

#방법1

파일 다운로드 기능을 구현 할 때는 사용자의 요청을 파일이름 또는 경로를 받게 해서는 안됩니다.

고유 인덱스 번호를 통해서 스트림 형식으로 파일을 반환하는 방법을 사용해야 합니다.

아래 처럼 파일을 받게 해 준 다면 해커는 쉽게 원하는 파일을 받을수가 있습니다.

#이러한 파일요청 방식이 존재한다고 가정하여 봅니다.
https:127.0.0.1/board/download?path=download&file_name=test.png

#해커는 path와 file_name 등의 의미를 분석하여 아래처럼 요청 할 수 있습니다.
https:127.0.0.1/board/download?path=../../../../../../etc&file_name=passwd

 

아래 메소드는 간략하게 설명을 위해 만들어놓은 메소드 입니다.

아래처럼 특정 인덱스값을 받아서 파일경로 및 파일이름을 가져와서 반환하도록 해야 합니다.

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class 컨트롤러 {

    @RequestMapping(value="/다운로드요청")
    @ResponseBody
    public void 다운로드메소드(@RequestParam HashMap<Object, Object> param, HttpServletResponse response){
        if(param.get("파일인덱스") != null) {
            String file_idx = param.get("파일인덱스").toString();
            InputStream inputStream =null;
            try {
                String file_name = "이곳에서 db에 조회해서 파일이름을 가져옵니다.";
                response.setCharacterEncoding("UTF-8");
                response.setHeader("Content-Type", "application/all");
                response.setHeader("Content-Disposition", "attachment;filename="+file_name);
                
                inputStream = new FileInputStream(new File(file_path + file_name));
                IOUtils.copy(inputStream, response.getOutputStream());
                response.flushBuffer();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(inputStream != null) try {inputStream.close();} catch (Exception e) {e.printStackTrace();}	
            }				
        }
    }
}

 

이상으로 표준취약점 파일다운로드(FD)에 대해서 간단하게 살펴보았습니다.

궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻

 

반응형

'웹 취약점(Web vulnerability)' 카테고리의 다른 글

25. 경로 추적(PT)  (0) 2021.12.10
24. 관리자 페이지 노출(AE)  (0) 2021.12.10
22. 약한 문자열 강도(BF)  (0) 2021.12.09
21. 파일 업로드(PU)  (0) 2021.12.09
20. 프로세스 검증누락(PV)  (0) 2021.12.09
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글