인프런 커뮤니티 질문&답변

고광우님의 프로필 이미지
고광우

작성한 질문수

모의해킹 실무자가 알려주는, 파일 다운로드 취약점 공격 기법과 실무 사례 분석

12강 직접 제작하면서 배우는 JSP 기반의 파일 다운로드 기능에 대한 이해 강의에 관한 질문 입니다.

해결된 질문

작성

·

607

0

질문 사항은 크게 2가지가 있는 상황 입니다.

  1. download1.jsp를 동작시키기 위해 index.jsp의 download1.jsp를 클릭하거나, http://localhost:8000/down/download1.jsp?org_filename=test.jpg&real_filename=1234.jpg을 직접 입력해도 '파일명을 입력 되지 않았습니다.' 라는 에러가 발생합니다.

    [에러 이미지]

    다운로드 JSP질문 이미지-1.png

  2. download1.jsp를 수정하고 wamp를 재시작해도 수정된 jsp 코드가 적용되지 않습니다.

 

먼저 1번 질문에 관한여 설명 드리갰습니다.

[download.jsp 코드]

(참고!! ';'다음에 주석 처럼 보이는 것들도 실제 코드 입니다.

예) ;history.back(-1);</script>"); 가 주석처럼 표시 되었는데, 실제로 동작하는 코드 입니다.)

<%@ page contentType="text/html; charset=UTF-8"  %>
<%@ page import="java.util.*, java.io.*"%>

 <%
 FileInputStream fis = null; 
 BufferedInputStream bis = null;
 BufferedOutputStream bos = null; 

String path = "C:\\Bitnami\\wampstack-8.1.4-0\\apache2\\htdocs\\down\\upload\\image\\";
String org_filename = request.getParameter("org_filename");
String real_filename = request.getParameter("real_filename");

if(org_filename == null || real_filename == null){
   out.println("<script>alert('파일명이 입력 되지 않았습니다.');history.back(-1);</script>");
   return;
}

try{
  File fd = new File(path + real_filename);
  if(!fd.exists()){
      out.println("<script>alert('파일이 존재 하지 않습니다.');history.back(-1);</script>");
      return;
  }
  response.setHeader("Content-Type", "application/octect-stream"); 
  response.setHeader("Content-Disposition", "attachment; filename=" + org_filename);
  
  fis = new FileInputStream(fd); 
  bis = new BufferedInputStream(fis); 
  bos = new BufferedOutputStream(response.getOutputStream()); 
  
  byte[] buffer = new byte[1024];
  int i = 0;
  
   while((i=(bis.read(buffer)))!= -1){
      bos.write(buffer, 0, i); 
   }
   bos.flush();
   } finally{
        if(fis != null) fis.close();
        if(bis != null) bis.close();
        if(bos != null) bos.close();
  }
%>

-> 현재 저는 이전 XSS 강의 때 사용한 bitnami 웹 서버를 이용하기 때문에 path의 URL 주소가 강사님의 하신 것과 다릅니다.

 

[path위치에 image파일이 존재]

--> 현재 path에 적어 넣은 경로인 C:\\Bitnami\\wampstack-8.1.4-0\\apache2\\htdocs\\down\\upload\\image\\ 아래에도 test.jpg 이미지를 넣은 상태 입니다.

 

그런데 브라우져에서 index.jsp에서

다운로드 JSP질문 이미지-2.png

--> 첨부파일1: 다운로드 링크를 누르면

--> 맨 처음 질문에 이미지에서 확인 할 수 있듯이

다운로드 JSP질문 이미지-1.png--> org_filename과 real_filename을 모두 URL에 입력 되었는데도, '파일명이 입력되지 않았습니다. ' 라는 경고 문이 발생합니다.

 

그래서 저는 URL에 직접 파일명을 입력하여 파일 다운로드를 시도 해 보았지만, 위와 동일한 에러 메시지만 확인 할 수 있었습니다.

 

제가 어떤 설정을 잘못 하였는지 알려주시면 수정하여 시도해 보도록 하겠습니다.

 

이제 질문2번에 대한 설명을 하겠습니다.

--> 코드가 정상적으로 동작하지 않은 원인을 찾기 위해 out.println 코드를 중간 중간에 넣었습니다.

--> 그리고 수정한 코드가 적용 되게 하기 우해 wamp를 재시작하였습니다.

--> WAMP 모니터에서 apache web server를 재시작하였지만

다운로드 JSP질문 이미지-1.png--> 여전히 파일명이 입력 되지 않았다는 경고 창과, 파일이 존재하지 않는다는 경고 창만 확인 가능하며, 제가 중간에 새로 삽입한 코드 경고 창은 확인 할수 없습니다.

--> 해당 내용에 대해서도 답변이 가능한지 궁금합니다.

 

 

답변 3

1

고광우님 해결하셨나요? 저도 같은 문제를 겪고 있다가 해결했습니다!

 

경로 뒤에 \\를 안붙여서 해당 문제가 발생했던것 같습니다!

C:\\apache-tomcat-8.5.90-windows-x64\\apache-tomcat-8.5.90\\webapps\\ROOT\\upload\\image\\

이렇게 입력하면 경로가 올바르게 동작하여 파일 다운로드가 정상적으로 가능합니다!

고광우님의 프로필 이미지
고광우
질문자

네 루시아제이님 답변 달아주셔서 감사합니다.

다행이 지금은 모두 해결되었습니다.
좋은 댓글 달아주셔서 감사합니다.

1

크리핵티브님의 프로필 이미지
크리핵티브
지식공유자

안녕하세요.

메일로 답변 완료하였습니다.


메일 답변:

real_filename 파라미터는 실제 서버 내 존재하는 파일명

org_filename 파라미터는 업로드 시 파일명

으로 사용됩니다.

따라서 지금 고광우님의 경우도 실제 업로드된 파일명은, 'test.jpg'로 real_filename 파라미터 값이 '1234.jpg'가 아닌 'test.jpg'로 세팅이 되어야 올바르게 다운로드가 진행됩니다.

고광우님의 프로필 이미지
고광우
질문자

메일로 보내주신 사항으로 해결 완료 되었습니다.
빠른 답변과 해결 감사합니다.

1

크리핵티브님의 프로필 이미지
크리핵티브
지식공유자

제 강의에서 PHP와 JSP 2개의 환경에 대해 다루고 있으며,

위에서 언급하신 WAMP는 PHP 환경의 웹 서버를 구동하고 있습니다.

따라서 Tomcat 의 웹디렉터리로 jsp 파일을 옮기고 사용하셔야 합니다.

 

고광우님의 프로필 이미지
고광우
질문자

안녕하세요. 크리핵티브님
빠른 답변 감사합니다. 그런데 문제가 하나 더 발생했습니다.

image--> 이번에는 파일이 존재하지 않는다고 에러가 나오고 있습니다.

 

image--> 이전에 답변을 주신 사항에서 tomcat 위치를 찾아서 jsp 코드를 업로드 했고 정상적으로 동작됨을 확인했습니다.

 

image--> 그런데 다운로드를 클릭하면 위에서 처음에 보여드린 바와 같은 에러 메시지가 보이면서 파일을 다운로드 하지 못하고 있습니다.

image--> 그런데 저는 tomcat 경로 아래에 이미지 파일을 넣은 상태 인데도 파일을 찾지 못하고 있습니다.

[이미지 파일 위치]

image

[download1.jsp에서 지정한 image위치]

image--> path에 입력한 경로 : "C:\\apache-tomcat-8.5.90-windows-x64\\apache-tomcat-8.5.90\\webapps\\ROOT\\upload\\image"

 

수고스러우시겠지만 위의 에러메시지가 발생하는 원인을 한 번 더 가르쳐 주시면 감사하겠습니다.

 

고광우님의 프로필 이미지
고광우

작성한 질문수

질문하기